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