Home | Namespaces | Hierarchy | Alphabetical List | Class list | Files | Namespace Members | Class members | File members | Tutorials

IReferenceCounted.h

Go to the documentation of this file.
00001 // Copyright (C) 2002-2010 Nikolaus Gebhardt
00002 // This file is part of the "Irrlicht Engine".
00003 // For conditions of distribution and use, see copyright notice in irrlicht.h
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                         // someone is doing bad reference counting.
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 } // end namespace irr
00168 
00169 #endif
00170 

The Irrlicht Engine
The Irrlicht Engine Documentation © 2003-2010 by Nikolaus Gebhardt. Generated on Sun Oct 24 12:41:57 2010 by Doxygen (1.6.2)