Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages   Examples  

ReferenceCountedObject.h

00001 // See the file LICENSE in the some directory as this file for legal
00002 // notices about this software.   
00003 // $Id: ReferenceCountedObject_8h-source.html,v 1.11 2001/10/10 20:40:58 sandro Exp $
00004 #ifndef DEV_W3_ORG__2001_BLINDFOLD_SRC_REFERENCECOUNTEDOBJECT_H
00005 #define DEV_W3_ORG__2001_BLINDFOLD_SRC_REFERENCECOUNTEDOBJECT_H
00006 #include "config.h"
00007 
00008 #include <cassert>
00009 
00016 class ReferenceCountedObject {
00017       
00018 public:
00019 
00020     // STANDARD MEMBER FUNCTIONS
00021     ReferenceCountedObject();
00022     ReferenceCountedObject(const ReferenceCountedObject& other);
00023     const ReferenceCountedObject& operator=(const ReferenceCountedObject& other);
00024     bool operator==(const ReferenceCountedObject& other) const;
00025     bool operator<(const ReferenceCountedObject& other) const;
00026     size_t hash() const;
00027     friend std::ostream& operator<<(std::ostream& s, const ReferenceCountedObject& me);
00028     std::ostream& print_to(std::ostream& stream) const; 
00029     virtual ~ReferenceCountedObject();       
00030 
00031     // CLASS-SPECIFIC PUBLIC INTERFACE
00032 
00036     void keep();
00037 
00041     void release();
00042 
00043 
00044 private:
00045 
00046     int reference_count;
00047 
00048 };     
00049 
00050 
00051 
00052 
00053 inline ReferenceCountedObject::ReferenceCountedObject()
00054     :reference_count(1)
00055 {
00056 }
00057 
00058 inline ReferenceCountedObject::~ReferenceCountedObject()
00059 {
00060     assert(reference_count == 0);
00061 }
00062 
00063 inline void ReferenceCountedObject::keep()
00064 {
00065     assert(reference_count > 0);
00066     reference_count++;
00067 }
00068 
00069 inline void ReferenceCountedObject::release()
00070 {
00071     assert(reference_count > 0);
00072     reference_count--;
00073     if (reference_count == 0) delete this;
00074 }
00075 
00076 STANDARD_EXTERNAL(ReferenceCountedObject)
00077 
00078 #endif   /* REFERENCECOUNTEDOBJECT */  // -*-C++-*-

Home to blindfold. This page generated via doxygen 1.2.11.1 Wed Oct 10 16:40:33 2001.