X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/57a6839dcb3bba09e8228b822b290604668416fe..ddf00b07760bc832598161e525f827eea70bc1f6:/icuSources/common/sharedobject.cpp diff --git a/icuSources/common/sharedobject.cpp b/icuSources/common/sharedobject.cpp index bad79801..6affcd09 100644 --- a/icuSources/common/sharedobject.cpp +++ b/icuSources/common/sharedobject.cpp @@ -12,19 +12,41 @@ SharedObject::~SharedObject() {} void SharedObject::addRef() const { - umtx_atomic_inc(&refCount); + umtx_atomic_inc(&totalRefCount); } void SharedObject::removeRef() const { - if(umtx_atomic_dec(&refCount) == 0) { + 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(refCount); + return umtx_loadAcquire(totalRefCount); +} + +int32_t +SharedObject::getSoftRefCount() const { + return umtx_loadAcquire(softRefCount); } void