Go to the documentation of this file.00001
00002
00003
00004
00005 #ifndef __I_IREFERENCE_COUNTED_H_INCLUDED__
00006 #define __I_IREFERENCE_COUNTED_H_INCLUDED__
00007
00008 #include "irrTypes.h"
00009
00010 namespace irr
00011 {
00012
00014
00041 class IReferenceCounted
00042 {
00043 public:
00044
00046 IReferenceCounted()
00047 : DebugName(0), ReferenceCounter(1)
00048 {
00049 }
00050
00052 virtual ~IReferenceCounted()
00053 {
00054 }
00055
00057
00086 void grab() const { ++ReferenceCounter; }
00087
00089
00116 bool drop() const
00117 {
00118
00119 _IRR_DEBUG_BREAK_IF(ReferenceCounter <= 0)
00120
00121 --ReferenceCounter;
00122 if (!ReferenceCounter)
00123 {
00124 delete this;
00125 return true;
00126 }
00127
00128 return false;
00129 }
00130
00132
00133 s32 getReferenceCount() const
00134 {
00135 return ReferenceCounter;
00136 }
00137
00139
00142 const c8* getDebugName() const
00143 {
00144 return DebugName;
00145 }
00146
00147 protected:
00148
00150
00153 void setDebugName(const c8* newName)
00154 {
00155 DebugName = newName;
00156 }
00157
00158 private:
00159
00161 const c8* DebugName;
00162
00164 mutable s32 ReferenceCounter;
00165 };
00166
00167 }
00168
00169 #endif
00170