CrossFramework Library
|
00001 00006 #if defined(XBASE_INCLUDED_POINTER_HPP) 00007 #else 00008 #define XBASE_INCLUDED_POINTER_HPP 00009 00010 //------------------------------------------------------------ 00011 #include <XBase/RuntimeAssert.hpp> 00012 00013 //------------------------------------------------------------ 00014 namespace XBase { 00016 00017 00022 template< typename T > 00023 class Pointer 00024 { 00025 public: 00027 00028 Pointer() : mPtr( 0 ) {} 00029 Pointer( T& aObj ) : mPtr( 0 ) { set( aObj ); } 00031 00033 00034 00035 bool isNull()const 00036 { 00037 return mPtr == 0; 00038 } 00039 00041 bool isValid()const 00042 { 00043 return mPtr != 0; 00044 } 00045 00050 T* get()const 00051 { 00052 return mPtr; 00053 } 00054 00056 T& ref()const 00057 { 00058 XBASE_POINTER_ASSERT( mPtr ); 00059 return *mPtr; 00060 } 00061 00063 bool equals( const Pointer< T >& aRHS )const 00064 { 00065 return mPtr == aRHS.mPtr; 00066 } 00068 00070 00071 00072 void reset() 00073 { 00074 reset( 0 ); 00075 } 00076 00078 void reset( T* aPtr ) 00079 { 00080 mPtr = aPtr; 00081 } 00082 00087 void set( T& aRef ) 00088 { 00089 XBASE_ASSERT( isNull() ); 00090 mPtr = &aRef; 00091 } 00092 00097 void unset() 00098 { 00099 unset( ref() ); 00100 } 00101 00106 void unset( T& aRef ) 00107 { 00108 XBASE_ASSERT( isValid() ); 00109 XBASE_ASSERT( mPtr == &aRef ); 00110 mPtr = 0; 00111 } 00113 00115 00116 T* operator->()const { return get(); } 00117 T& operator*()const { return ref(); } 00118 bool operator==( const Pointer<T>& aRHS )const { return equals( aRHS ); } 00119 00120 00121 private: 00122 T* mPtr; 00123 }; 00125 } 00126 //------------------------------------------------------------ 00127 #endif 00128 // EOF