MeVisLabToolboxReference
|
00001 // **InsertLicense** code author="Felix Ritter" version="1.0" 00002 00006 00007 #ifndef __macSmartPtr_H 00008 #define __macSmartPtr_H 00009 #if defined(__APPLE__) 00010 00011 #include <stdlib.h> 00012 00013 namespace macx { 00014 00016 template <class T> 00017 class SmartPtr 00018 { 00019 public: 00020 00021 SmartPtr() : _object(NULL) {} 00022 00023 SmartPtr(const SmartPtr<T> &p) : _object(NULL) { 00024 setObject(p.object()); 00025 } 00026 00027 SmartPtr(T *o) { 00028 _object = o; 00029 if (o) o->retain(); 00030 } 00031 00032 ~SmartPtr() { 00033 if (_object) _object->release(); 00034 } 00035 00036 SmartPtr<T> &operator=(const SmartPtr<T> &p) { 00037 setObject(p.object()); 00038 return *this; 00039 } 00040 00041 SmartPtr<T> &operator=(T *o) { 00042 setObject(o); 00043 return *this; 00044 } 00045 00046 bool operator==(const SmartPtr<T> &p) const { 00047 return object() == p.object(); 00048 } 00049 00050 bool operator!= (const SmartPtr<T>& p) const { 00051 return !(*this == p); 00052 } 00053 00054 bool operator==(T *p) const { 00055 return object() == p; 00056 } 00057 00058 bool operator!= (T *p) const { 00059 return object() != p; 00060 } 00061 00062 bool isNull() const { return !object(); } 00063 00064 T* operator->() const { return object(); } 00065 00066 T& operator*() const { return *(object()); } 00067 00068 operator T*() const { return object(); } 00069 00070 protected: 00071 00072 T *object() const { 00073 return _object; 00074 } 00075 00076 void setObject(T *o) { 00077 if (o != _object) { 00078 if (_object) _object->release(); 00079 _object = o; 00080 if (_object) _object->retain(); 00081 } 00082 } 00083 00084 private: 00085 00086 T *_object; 00087 }; 00088 00089 } 00090 00091 #endif // __APPLE__ 00092 #endif // __macSmartPtr_H