1// Referencable.cpp 2 3#include "Debug.h" 4#include "Referencable.h" 5 6// constructor 7Referencable::Referencable(bool deleteWhenUnreferenced) 8 : fReferenceCount(1), 9 fDeleteWhenUnreferenced(deleteWhenUnreferenced) 10{ 11} 12 13// destructor 14Referencable::~Referencable() 15{ 16} 17 18// AddReference 19void 20Referencable::AddReference() 21{ 22 atomic_add(&fReferenceCount, 1); 23} 24 25// RemoveReference 26bool 27Referencable::RemoveReference() 28{ 29 bool unreferenced = (atomic_add(&fReferenceCount, -1) == 1); 30 if (fDeleteWhenUnreferenced && unreferenced) 31 delete this; 32 return unreferenced; 33} 34 35// CountReferences 36int32 37Referencable::CountReferences() const 38{ 39 return fReferenceCount; 40} 41 42