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 bool isNull()const { return mPtr == 0; } 00035 bool isValid()const { return mPtr != 0; } 00036 T* get()const { return mPtr; } 00037 00038 T& ref()const 00039 { 00040 XBASE_POINTER_ASSERT( mPtr ); 00041 return *mPtr; 00042 } 00044 00046 00047 00048 void reset() 00049 { 00050 reset( 0 ); 00051 } 00053 void reset( T* aPtr ) 00054 { 00055 mPtr = aPtr; 00056 } 00061 void set( T& aRef ) 00062 { 00063 XBASE_ASSERT( isNull() ); 00064 mPtr = &aRef; 00065 } 00070 void unset() 00071 { 00072 unset( ref() ); 00073 } 00078 void unset( T& aRef ) 00079 { 00080 XBASE_ASSERT( isValid() ); 00081 XBASE_ASSERT( mPtr == &aRef ); 00082 mPtr = 0; 00083 } 00085 00087 00088 T* operator->()const { return get(); } 00089 T& operator*()const { return ref(); } 00090 00091 00092 private: 00093 T* mPtr; 00094 }; 00096 } 00097 //------------------------------------------------------------ 00098 #endif 00099 // EOF