00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00026 #ifndef FALCON_REFCOUNTER_H
00027 #define FALCON_REFCOUNTER_H
00028
00029 namespace Falcon
00030 {
00031
00032
00033 template<class T>
00034 class Refcounter
00035 {
00036 T m_item;
00037 int m_count;
00038
00039 public:
00040 Refcounter():
00041 m_count(0)
00042 {}
00043
00044 virtual ~Refcounter() {}
00045
00049 Refcounter( const T &val ):
00050 m_item( val ),
00051 m_count(0)
00052 {}
00053
00054 Refcounter( const Refcounter &source ):
00055 m_item( source.m_item ),
00056 m_count( 0 )
00057 {}
00058
00059
00060 void incref() { m_count++; }
00061 void decref() { m_count--; if ( m_count <= 0 ) delete this ; }
00062
00063 T &access() { return m_item; }
00064
00065 T &operator *() { return m_item; }
00066 };
00067
00068 }
00069
00070 #endif
00071