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