32 #ifndef _NPT_REFERENCES_H_ 33 #define _NPT_REFERENCES_H_ 38 #include "NptConstants.h" 39 #include "NptThreads.h" 49 NPT_Reference() : m_Object(NULL), m_Counter(NULL), m_Mutex(NULL), m_ThreadSafe(
true) {}
52 m_Counter(
object?
new NPT_Cardinal(1):NULL),
53 m_Mutex((
object && thread_safe)?
new NPT_Mutex():NULL),
54 m_ThreadSafe(thread_safe) {}
57 m_Object(ref.m_Object), m_Counter(ref.m_Counter), m_Mutex(ref.m_Mutex), m_ThreadSafe(ref.m_ThreadSafe) {
58 if (m_Mutex) m_Mutex->Lock();
59 if (m_Counter) ++(*m_Counter);
60 if (m_Mutex) m_Mutex->Unlock();
69 m_Object(
object), m_Counter(counter), m_Mutex(mutex), m_ThreadSafe(thread_safe) {
70 if (m_Mutex) m_Mutex->Lock();
71 if (m_Counter) ++(*m_Counter);
72 if (m_Mutex) m_Mutex->Unlock();
83 m_Object = ref.m_Object;
84 m_Counter = ref.m_Counter;
85 m_Mutex = ref.m_Mutex;
86 m_ThreadSafe = ref.m_ThreadSafe;
88 if (m_Mutex) m_Mutex->Lock();
89 if (m_Counter) ++(*m_Counter);
90 if (m_Mutex) m_Mutex->Unlock();
97 m_Counter =
object?
new NPT_Cardinal(1):NULL;
98 m_Mutex = (
object && m_ThreadSafe)?
new NPT_Mutex():NULL;
101 T& operator*()
const {
return *m_Object; }
102 T* operator->()
const {
return m_Object; }
105 return m_Object == ref.m_Object;
108 return m_Object != ref.m_Object;
130 bool IsNull()
const {
return m_Object == NULL; }
144 void Release(
bool detach_only =
false) {
145 bool last_reference =
false;
146 if (m_Mutex) m_Mutex->Lock();
148 if (m_Counter && --(*m_Counter) == 0) {
150 if (!detach_only)
delete m_Object;
151 last_reference =
true;
161 if (last_reference)
delete mutex;
168 NPT_Cardinal* m_Counter;
173 #endif // _NPT_REFERENCES_H_ T * AsPointer() const
Returns the naked pointer value.
Definition: NptReferences.h:120
Definition: NptThreads.h:76
void Detach()
Detach the reference from the shared object.
Definition: NptReferences.h:138
NPT_Cardinal GetCounter() const
Returns the reference counter value.
Definition: NptReferences.h:125
Definition: NptReferences.h:45
bool IsNull() const
Returns whether this references a NULL object.
Definition: NptReferences.h:130