29#ifndef __AGG_UTIL__REF_COUNTED_OBJECT_H__
30#define __AGG_UTIL__REF_COUNTED_OBJECT_H__
32#include "RCObjectInterface.h"
44typedef std::set<RCObject*> RCObjectSet;
104 RCObjectSet _liveObjects;
121 virtual void executeUseCountHitZeroCB(
RCObject* pAboutToDie) = 0;
168 typedef std::list<UseCountHitZeroCB*> PreDeleteCBList;
189 virtual int ref()
const;
201 virtual int unref()
const;
215 virtual std::string
toString()
const;
230 std::string printRCObject()
const;
242 void executeAndClearPreDeleteCallbacks();
256 PreDeleteCBList _preDeleteCallbacks;
307 operator=(
const RCPtr& rhs)
309 if (rhs._obj != _obj) {
378 std::runtime_error(msg)
465 return RCPtr<T>(NULL);
475 removeMeAsListener();
489 if (pAboutToDie != _pObj) {
490 throw BadWeakPtr(
"executeUseCountHitZeroCB() called with mismatched raw pointers!");
498 void removeMeAsListener()
501 _pObj->removePreDeleteCB(
this);
505 void addMeAsListener()
508 _pObj->addPreDeleteCB(
this);
bool contains(RCObject *pObj) const
void release(RCObject *pObj, bool shouldDelete=true)
void remove(RCObject *pObj)
A base class for a simple reference counted object.
virtual std::string toString() const
virtual void removeFromPool() const
void removePreDeleteCB(UseCountHitZeroCB *pCB)
virtual int unref() const
void addPreDeleteCB(UseCountHitZeroCB *pCB)
virtual int getRefCount() const
A reference to an RCObject which automatically ref() and deref() on creation and destruction.
virtual void executeUseCountHitZeroCB(RCObject *pAboutToDie)
Helper class for temporarily hijacking an existing dhi to load a DDX response for one particular file...