00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00081 #ifndef __vtkGarbageCollector_h
00082 #define __vtkGarbageCollector_h
00083
00084 #include "vtkObject.h"
00085 #include "vtkGarbageCollectorManager.h"
00086
00087
00088
00089 void VTK_COMMON_EXPORT
00090 vtkGarbageCollectorReportInternal(vtkGarbageCollector*,
00091 vtkObjectBase*, void*,
00092 const char*);
00093
00094
00095 class vtkObjectBaseToGarbageCollectorFriendship;
00096
00097 class VTK_COMMON_EXPORT vtkGarbageCollector : public vtkObject
00098 {
00099 public:
00100 vtkTypeMacro(vtkGarbageCollector,vtkObject);
00101 void PrintSelf(ostream& os, vtkIndent indent);
00102 static vtkGarbageCollector* New();
00103
00113 static void Collect();
00114
00123 static void Collect(vtkObjectBase* root);
00124
00126
00130 static void DeferredCollectionPush();
00131 static void DeferredCollectionPop();
00133
00135
00137 static void SetGlobalDebugFlag(int flag);
00138 static int GetGlobalDebugFlag();
00140
00141 protected:
00142 vtkGarbageCollector();
00143 ~vtkGarbageCollector();
00144
00145 private:
00146
00154 static int GiveReference(vtkObjectBase* obj);
00155
00161 static int TakeReference(vtkObjectBase* obj);
00162
00163
00164 static void ClassInitialize();
00165 static void ClassFinalize();
00166
00167
00168 friend class vtkGarbageCollectorManager;
00169 friend class vtkObjectBaseToGarbageCollectorFriendship;
00170
00171
00172
00173 virtual void Report(vtkObjectBase* obj, void* ptr, const char* desc);
00174 friend void VTK_COMMON_EXPORT
00175 vtkGarbageCollectorReportInternal(vtkGarbageCollector*,
00176 vtkObjectBase*, void*,
00177 const char*);
00178
00179 private:
00180 vtkGarbageCollector(const vtkGarbageCollector&);
00181 void operator=(const vtkGarbageCollector&);
00182 };
00183
00184
00185 class vtkSmartPointerBase;
00186
00188
00189 void VTK_COMMON_EXPORT
00190 vtkGarbageCollectorReport(vtkGarbageCollector* collector,
00191 vtkSmartPointerBase& ptr,
00192 const char* desc);
00194
00196
00197 template <class T>
00198 void vtkGarbageCollectorReport(vtkGarbageCollector* collector, T*& ptr,
00199 const char* desc)
00201 {
00202 vtkGarbageCollectorReportInternal(collector, ptr, &ptr, desc);
00203 }
00204
00205
00206 #endif