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 } 00062 00064 00065 00066 void reset() 00067 { 00068 reset( 0 ); 00069 } 00070 00072 void reset( T* aPtr ) 00073 { 00074 mPtr = aPtr; 00075 } 00076 00081 void set( T& aRef ) 00082 { 00083 XBASE_ASSERT( isNull() ); 00084 mPtr = &aRef; 00085 } 00086 00091 void unset() 00092 { 00093 unset( ref() ); 00094 } 00095 00100 void unset( T& aRef ) 00101 { 00102 XBASE_ASSERT( isValid() ); 00103 XBASE_ASSERT( mPtr == &aRef ); 00104 mPtr = 0; 00105 } 00107 00109 00110 T* operator->()const { return get(); } 00111 T& operator*()const { return ref(); } 00112 00113 00114 private: 00115 T* mPtr; 00116 }; 00118 } 00119 //------------------------------------------------------------ 00120 #endif 00121 // EOF