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