00001 #ifndef __ICountedObject__
00002 #define __ICountedObject__
00003
00004
00005
00006 #include "CClass.hpp"
00007 using Exponent::Basics::CClass;
00008
00009
00010
00011 namespace Exponent
00012 {
00013 namespace Basics
00014 {
00034 interface ICountedObject
00035 {
00036
00037
00038
00039 public:
00040
00041
00042
00046 ICountedObject() { }
00047
00051 virtual ~ICountedObject() { }
00052
00053
00054
00058 virtual void referenced() = 0;
00059
00063 virtual void dereference() = 0;
00064
00069 virtual long getReferenceCount() const = 0;
00070
00076 virtual void getObjectDescription(char *string, const long size) const = 0;
00077
00082 virtual const CClass &getObjectClass() const = 0;
00083
00084
00085 };
00086 }
00087 }
00088
00096 #define EXCHANGE_COUNTED_OBJECTS(x, y) if ((x) != (y)) { if (x) { (x)->dereference(); } (x) = (y); if (x) { (x)->referenced(); } }
00097
00102 #define FORGET_COUNTED_OBJECT(x) if(x) { (x)->dereference(); } (x) = NULL;
00103
00104 #endif // End of ICountedObject.hpp