00001
00025 #ifndef INC_SPATMOD_IMAGESTAGEAUTOPTR_H
00026 #define INC_SPATMOD_IMAGESTAGEAUTOPTR_H
00027
00028 namespace SPATMOD {
00029 namespace IMAGE {
00030
00031 class STAGE;
00032
00033
00034
00036 class STAGE_AUTOPTR {
00037 public:
00038
00040 STAGE_AUTOPTR (
00041 ): m_pStage(0), m_IsOwner(false) { }
00042
00044 STAGE_AUTOPTR (
00045 STAGE *pStage,
00046 bool TakeOwnership
00047 ): m_pStage(pStage), m_IsOwner(TakeOwnership) { }
00048
00050 STAGE_AUTOPTR (
00051 const STAGE_AUTOPTR& rhs
00052 ): m_pStage(rhs.m_pStage), m_IsOwner(false) { }
00053
00055 ~STAGE_AUTOPTR ();
00056
00058 STAGE_AUTOPTR& operator= (
00059 const STAGE_AUTOPTR& rhs
00060 );
00061
00063 STAGE& operator* (
00064 ) const { return (*m_pStage); }
00065
00067 STAGE* operator-> (
00068 ) const { return (m_pStage); }
00069
00071 operator STAGE* (
00072 ) const { return (m_pStage); }
00073
00075 void Assign (
00076 STAGE *pStage,
00077 bool TakeOwnership
00078 );
00079
00081 void Assign (
00082 STAGE_AUTOPTR& StagePtr,
00083 bool TakeOwnership
00084 );
00085
00088 STAGE* Detach (
00089 ) { STAGE *pStage = m_pStage; m_pStage = 0; return (pStage); }
00090
00092 bool IsAssigned (
00093 ) const { return (m_pStage != 0); }
00094
00096 bool IsOwner (
00097 ) const { return (m_IsOwner); }
00098
00099 #ifndef GENERATING_DOXYGEN_OUTPUT
00103 void SetOwner (
00104 bool TakeOwnership
00105 ) { m_IsOwner = TakeOwnership; }
00106 #endif // GENERATING_DOXYGEN_OUTPUT
00107
00108 private:
00109 #ifndef GENERATING_DOXYGEN_OUTPUT
00110 STAGE *m_pStage;
00111 bool m_IsOwner;
00112 #endif // GENERATING_DOXYGEN_OUTPUT
00113 };
00114
00115
00116
00117 }
00118 }
00119
00120 #endif // INC_SPATMOD_IMAGESTAGEAUTOPTR_H