Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

HxRcObject.h

00001 /*
00002  *  Copyright (c) 1998, University of Amsterdam, The Netherlands.
00003  *  All rights reserved.
00004  *
00005  *
00006  *  Author(s):
00007  *  Dennis Koelma (koelma@wins.uva.nl)
00008  *  Edo Poll (poll@wins.uva.nl)
00009  */
00010 
00011 #ifndef HxRcObject_h
00012 #define HxRcObject_h
00013 
00014 #include "HxStd.h"
00015 
00016 
00021 class L_HXBASIS HxRcObject
00022 {
00023 public:
00024     HxRcObject*             addRef();
00025     void                    removeRef();
00026     HxRcObject*             assign(HxRcObject* rhs);
00027     int                     isShared() const;
00028     HxRcObject*             getUnshared();
00029     HxRcObject*             doGetUnshared();
00030     virtual HxRcObject*     clone() const ; // overload for value semantics
00031     int                     refCnt() const;
00032 protected:
00033                             HxRcObject();
00034     virtual                 ~HxRcObject();
00035 private:
00036     int                     _refCnt;
00037 };
00038 
00039 
00040 inline
00041 HxRcObject::HxRcObject() : _refCnt(0)
00042 {
00043 }
00044 
00045 inline
00046 HxRcObject::~HxRcObject()
00047 {
00048 }
00049 
00050 inline HxRcObject*
00051 HxRcObject::addRef()
00052 { 
00053     _refCnt++; 
00054     return this; 
00055 } 
00056 
00057 inline void
00058 HxRcObject::removeRef()
00059 { 
00060     if (--_refCnt <= 0) 
00061         delete this; 
00062 }
00063 
00064 inline HxRcObject*
00065 HxRcObject::assign(HxRcObject* rhs)
00066 {
00067     rhs->addRef();
00068     removeRef();
00069     return rhs;
00070 }
00071 
00072 inline int
00073 HxRcObject::isShared() const
00074 { 
00075     return _refCnt > 1; 
00076 }
00077 
00078 inline HxRcObject*
00079 HxRcObject::getUnshared()
00080 {
00081     return (_refCnt <= 1) ? this : doGetUnshared();
00082 }
00083 
00084 inline int
00085 HxRcObject::refCnt() const
00086 {
00087     return _refCnt;
00088 }
00089 
00090 #endif

Generated on Tue Feb 3 14:18:41 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001