]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/common/sharedobject.cpp
ICU-551.51.3.tar.gz
[apple/icu.git] / icuSources / common / sharedobject.cpp
index bad79801d7d6f078c675023c1e3cc30069cd9299..6affcd09cd5035395b43f22cdb395db5ef845d6c 100644 (file)
@@ -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