CrossFramework Library

XBase/Pointer.hpp

説明を見る。
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
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 マクロ定義