Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

dox/Common/vtkSmartPointerBase.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkSmartPointerBase.h,v $ 00005 Language: C++ 00006 00007 Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 00008 All rights reserved. 00009 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00010 00011 This software is distributed WITHOUT ANY WARRANTY; without even 00012 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00013 PURPOSE. See the above copyright notice for more information. 00014 00015 =========================================================================*/ 00029 #ifndef __vtkSmartPointerBase_h 00030 #define __vtkSmartPointerBase_h 00031 00032 #include "vtkObjectBase.h" 00033 00034 class VTK_COMMON_EXPORT vtkSmartPointerBase 00035 { 00036 public: 00038 vtkSmartPointerBase(); 00039 00041 vtkSmartPointerBase(vtkObjectBase* r); 00042 00045 vtkSmartPointerBase(const vtkSmartPointerBase& r); 00046 00048 ~vtkSmartPointerBase(); 00049 00051 00053 vtkSmartPointerBase& operator=(vtkObjectBase* r); 00054 vtkSmartPointerBase& operator=(const vtkSmartPointerBase& r); 00056 00058 00059 vtkObjectBase* GetPointer() const 00060 { 00061 // Inline implementation so smart pointer comparisons can be fully 00062 // inlined. 00063 return this->Object; 00064 } 00066 protected: 00067 00068 // Internal utility methods. 00069 void Swap(vtkSmartPointerBase& r); 00070 void Register(); 00071 void UnRegister(); 00072 00073 // Pointer to the actual object. 00074 vtkObjectBase* Object; 00075 }; 00076 00077 //---------------------------------------------------------------------------- 00078 // Need to switch on bool type because std::less requires bool return 00079 // type from operators. This example should not be used to justify 00080 // using bool elsewhere in VTK. 00081 #ifdef VTK_COMPILER_HAS_BOOL 00082 # define VTK_SMART_POINTER_BASE_BOOL bool 00083 #else 00084 # define VTK_SMART_POINTER_BASE_BOOL int 00085 #endif 00086 00087 #define VTK_SMART_POINTER_BASE_DEFINE_OPERATOR(op) \ 00088 inline VTK_SMART_POINTER_BASE_BOOL \ 00089 operator op (const vtkSmartPointerBase& l, const vtkSmartPointerBase& r) \ 00090 { \ 00091 return (static_cast<void*>(l.GetPointer()) op \ 00092 static_cast<void*>(r.GetPointer())); \ 00093 } \ 00094 inline VTK_SMART_POINTER_BASE_BOOL \ 00095 operator op (vtkObjectBase* l, const vtkSmartPointerBase& r) \ 00096 { \ 00097 return (static_cast<void*>(l) op static_cast<void*>(r.GetPointer())); \ 00098 } \ 00099 inline VTK_SMART_POINTER_BASE_BOOL \ 00100 operator op (const vtkSmartPointerBase& l, vtkObjectBase* r) \ 00101 { \ 00102 return (static_cast<void*>(l.GetPointer()) op static_cast<void*>(r)); \ 00103 } 00104 00105 VTK_SMART_POINTER_BASE_DEFINE_OPERATOR(==) 00106 VTK_SMART_POINTER_BASE_DEFINE_OPERATOR(!=) 00107 VTK_SMART_POINTER_BASE_DEFINE_OPERATOR(<) 00108 VTK_SMART_POINTER_BASE_DEFINE_OPERATOR(<=) 00109 VTK_SMART_POINTER_BASE_DEFINE_OPERATOR(>) 00110 VTK_SMART_POINTER_BASE_DEFINE_OPERATOR(>=) 00111 00112 #undef VTK_SMART_POINTER_BASE_DEFINE_OPERATOR 00113 #undef VTK_SMART_POINTER_BASE_BOOL 00114 00116 00117 VTK_COMMON_EXPORT ostream& operator << (ostream& os, 00118 const vtkSmartPointerBase& p); 00120 00121 #endif