| /* |
| ****************************************************************************** |
| * Copyright (C) 2014, International Business Machines |
| * Corporation and others. All Rights Reserved. |
| ****************************************************************************** |
| * sharedobject.cpp |
| */ |
| #include "sharedobject.h" |
| |
| U_NAMESPACE_BEGIN |
| SharedObject::~SharedObject() {} |
| |
| void |
| SharedObject::addRef() const { |
| umtx_atomic_inc(&totalRefCount); |
| } |
| |
| void |
| SharedObject::removeRef() const { |
| if(umtx_atomic_dec(&totalRefCount) == 0) { |
| delete this; |
| } |
| } |
| |
| void |
| SharedObject::addSoftRef() const { |
| addRef(); |
| umtx_atomic_inc(&softRefCount); |
| } |
| |
| void |
| SharedObject::removeSoftRef() const { |
| umtx_atomic_dec(&softRefCount); |
| removeRef(); |
| } |
| |
| UBool |
| SharedObject::allSoftReferences() const { |
| return umtx_loadAcquire(totalRefCount) == umtx_loadAcquire(softRefCount); |
| } |
| |
| int32_t |
| SharedObject::getRefCount() const { |
| return umtx_loadAcquire(totalRefCount); |
| } |
| |
| int32_t |
| SharedObject::getSoftRefCount() const { |
| return umtx_loadAcquire(softRefCount); |
| } |
| |
| void |
| SharedObject::deleteIfZeroRefCount() const { |
| if(getRefCount() == 0) { |
| delete this; |
| } |
| } |
| |
| U_NAMESPACE_END |