#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