00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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
00062
00063
return this->Object;
00064 }
00066
protected:
00067
00068
00069
void Swap(vtkSmartPointerBase& r);
00070
void Register();
00071
void UnRegister();
00072
00073
00074 vtkObjectBase* Object;
00075 };
00076
00077
00078
00079
00080
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