aboutsummaryrefslogtreecommitdiff
path: root/dep/g3dlite/include/G3D/ReferenceCount.h
blob: d3ac0391585208309a631346436866b83a353e66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
  \file G3D/ReferenceCount.h

  Reference Counting Garbage Collector for C++

  \maintainer Morgan McGuire, http://graphics.cs.williams.edu

  \created 2001-10-23
  \edited  2013-01-05
*/
#ifndef G3D_ReferenceCount_h
#define G3D_ReferenceCount_h

#include "G3D/platform.h"
#include "G3D/debug.h"
#include "G3D/AtomicInt32.h"

#define USE_SHARED_PTR

#define ReferenceCountedPointer shared_ptr
#define WeakReferenceCountedPointer weak_ptr
namespace G3D {

class ReferenceCountedObject : public enable_shared_from_this<ReferenceCountedObject> {
public:
    virtual ~ReferenceCountedObject() {};
};

} // namespace

namespace G3D {

template<class T>
bool isNull(const ReferenceCountedPointer<T>& ptr) {
    return ! ptr;
}

template<class T>
bool notNull(const ReferenceCountedPointer<T>& ptr) {
    return (bool)ptr;
}

template<class T>
bool isNull(const T* ptr) {
    return ptr == NULL;
}

template<class T>
bool notNull(const T* ptr) {
    return ptr != NULL;
}

} // namespace

#endif