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