it_bus/ref_counted_base.h

00001 #ifndef _IT_BUS_REF_COUNTED_BASE_H_
00002 #define _IT_BUS_REF_COUNTED_BASE_H_
00003 
00004 // @Copyright 2004 IONA Technologies, Plc. All Rights Reserved.
00005 //
00006 #include <it_tsdsa/atomic_counter.h>
00007 #include <it_bus/api_defines.h>
00008 
00009 namespace IT_Bus
00010 {
00014     class IT_AFC_API RefCountedBase
00015     {
00016       public:
00017         void
00018         _add_ref() const
00019             throw(())
00020         {
00021             ++ IT_CONST_CAST(IT_AtomicCounter&, m_ref_count);
00022         }
00023 
00024         void
00025         _remove_ref() const
00026             throw(())
00027         {
00028             if (-- IT_CONST_CAST(IT_AtomicCounter&, m_ref_count) == 0)
00029             {
00030                 destroy();
00031             }
00032         }
00033 
00034         IT_ULong
00035         _ref_count() const
00036             throw(())
00037         {
00038             IT_AtomicCounter& ref_count = IT_CONST_CAST(IT_AtomicCounter&, m_ref_count); 
00039             return ref_count;            
00040         }
00041 
00042       protected:
00043         RefCountedBase(
00044         ) throw(()) :
00045             m_ref_count(1)
00046         {}
00047 
00048         virtual ~RefCountedBase();
00049 
00050         virtual void
00051         destroy() const throw(());
00052 
00053       private:
00054         IT_AtomicCounter m_ref_count;
00055     };
00056 }
00057 
00058 #endif  
00059 

Generated on Tue Mar 20 15:27:42 2007 for Artix by  doxygen 1.5.1-p1