LibCT 2.0

Include/EventData.h

Go to the documentation of this file.
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