1/*
2******************************************************************************
3* Copyright (C) 2014, International Business Machines
4* Corporation and others.  All Rights Reserved.
5******************************************************************************
6* sharedobject.cpp
7*/
8#include "sharedobject.h"
9
10U_NAMESPACE_BEGIN
11SharedObject::~SharedObject() {}
12
13void
14SharedObject::addRef() const {
15    umtx_atomic_inc(&refCount);
16}
17
18void
19SharedObject::removeRef() const {
20    if(umtx_atomic_dec(&refCount) == 0) {
21        delete this;
22    }
23}
24
25int32_t
26SharedObject::getRefCount() const {
27    return umtx_loadAcquire(refCount);
28}
29
30void
31SharedObject::deleteIfZeroRefCount() const {
32    if(getRefCount() == 0) {
33        delete this;
34    }
35}
36
37U_NAMESPACE_END
38