2#ifndef _aspose_system_smart_ptr_counter_h_
3#define _aspose_system_smart_ptr_counter_h_
16namespace System {
namespace Detail {
25 enum ObjectOwnershipState {
36 SmartPtrCounter(Object *o)
38#ifdef ENABLE_EXTERNAL_REFCOUNT
48 , m_ownership(NextOwnership())
60 SmartPtrCounter* WeakRefAdded()
68 if (--m_pointers == 0 && m_object ==
nullptr)
72#ifdef ENABLE_EXTERNAL_REFCOUNT
83 int SharedRefRemovedSafe()
85 const int result = --m_shared_pointers;
92 int DecreaseSharedRef(
int count)
94 const int shared_pointers_left = m_shared_pointers -= count;
96 return shared_pointers_left;
100 int SharedCount()
const
102 return m_shared_pointers;
106 ASPOSECPP_SHARED_API
static ObjectOwnershipState& NextOwnership();
108 void CreatedSuccessfully()
110 m_ownership = OwnedByPointers;
112 ObjectOwnershipState GetOwnershipState()
const
119 [[noreturn]] ASPOSECPP_SHARED_API
static void ThrowNullReferenceException();
122 [[noreturn]] ASPOSECPP_SHARED_API
static void ThrowInvalidCastException();
126 ASPOSECPP_SHARED_API
Object* Lock();
130 bool CanBeDeleted()
const
132 return m_pointers == 0;
138#ifdef ENABLE_EXTERNAL_REFCOUNT
139 m_ownership = Deleted;
148#ifdef ENABLE_EXTERNAL_REFCOUNT
150 RefCount m_shared_pointers;
152 ObjectOwnershipState m_ownership;
156 SmartPtrCounter(
const SmartPtrCounter&) =
delete;
157 SmartPtrCounter(SmartPtrCounter&&) =
delete;
158 SmartPtrCounter& operator = (
const SmartPtrCounter&) =
delete;
159 SmartPtrCounter& operator = (SmartPtrCounter&&) =
delete;
Definition: db_command.h:9