LibCT 2.0
|
00001 // ------------------------------------------------------------------ 00012 #ifndef _LIBCT_EVENTDATA_H 00013 #define _LIBCT_EVENTDATA_H 00014 00015 namespace LibCT 00016 { 00018 class EventData 00019 { 00020 public: 00022 EventData( 00023 void* pData, 00024 bool ownPtr = false 00025 ) 00026 : m_pData(pData) 00027 , m_RefCount(0) 00028 , m_OwnPtr(ownPtr) 00029 { 00030 00031 } 00032 00034 EventData( 00035 const EventData& rhs 00036 ) 00037 { 00038 m_pData = rhs.m_pData; 00039 m_RefCount = rhs.m_RefCount; 00040 m_OwnPtr = rhs.m_OwnPtr; 00041 } 00042 00045 EventData& operator = ( 00046 const EventData& rhs 00047 ) 00048 { 00049 if(this != &rhs) 00050 { 00051 m_pData = rhs.m_pData; 00052 m_RefCount = rhs.m_RefCount; 00053 m_OwnPtr = rhs.m_OwnPtr; 00054 } 00055 return *this; 00056 } 00057 00060 const void* GetData() const { return m_pData; } 00061 00064 operator const void*() const { return m_pData; } 00065 00068 int Reference() 00069 { 00070 return ++m_RefCount; 00071 } 00072 00075 int DeReference() 00076 { 00077 --m_RefCount; 00078 if(m_RefCount <= 0) 00079 { 00080 delete this; 00081 } 00082 return m_RefCount; 00083 } 00084 00086 void Destroy() 00087 { 00088 delete this; 00089 } 00090 00091 private: 00092 void* m_pData; 00093 int m_RefCount; 00094 bool m_OwnPtr; 00095 00097 ~EventData() 00098 { 00099 if(m_OwnPtr) 00100 { 00101 delete m_pData; 00102 } 00103 } 00104 }; 00105 }; 00106 00107 #endif // _LIBCT_EVENTDATA_H