blocxx
BLOCXX_NAMESPACE::COWIntrusiveReference< T > Class Template Reference

COWIntrusiveReference A smart pointer that uses intrusive reference counting. More...

#include <COWIntrusiveReference.hpp>

Public Types

typedef T element_type
 
typedef T *this_type::* unspecified_bool_type
 

Public Member Functions

 COWIntrusiveReference ()
 Default constructor The underlying object pointer will be NULL.
 
 COWIntrusiveReference (T *p, bool addRef=true)
 Construct a COWIntrusiveReference that will contain a pointer to a COWIntrusiveCountableBase object.
 
template<class U >
 COWIntrusiveReference (COWIntrusiveReference< U > const &rhs)
 Copy constructor.
 
 COWIntrusiveReference (COWIntrusiveReference const &rhs)
 Copy constructor.
 
 ~COWIntrusiveReference ()
 Destroy this COWIntrusiveReference.
 
template<class U >
COWIntrusiveReferenceoperator= (COWIntrusiveReference< U > const &rhs)
 Assignment operator that that takes a COWIntrusiveReference of a type derived from T.
 
COWIntrusiveReferenceoperator= (COWIntrusiveReference const &rhs)
 Assignment operator.
 
COWIntrusiveReferenceoperator= (T *rhs)
 Assignment operator.
 
const T * getPtr () const
 
const T & operator* () const
 
const T * operator-> () const
 
T & operator* ()
 
T * operator-> ()
 
 operator unspecified_bool_type () const
 
bool operator! () const
 Negation operator.
 
void swap (COWIntrusiveReference &rhs)
 

Private Types

typedef COWIntrusiveReference this_type
 

Private Member Functions

void getWriteLock ()
 Create a clone of the COWIntrusiveCountableBase object if there is more than one reference to it.
 

Private Attributes

T * m_pObj
 

Friends

template<class U >
class COWIntrusiveReference
 

Detailed Description

template<class T>
class BLOCXX_NAMESPACE::COWIntrusiveReference< T >

COWIntrusiveReference A smart pointer that uses intrusive reference counting.

It supports 'copy on write' functionality. The 'intrusive' in the class names comes from the fact that referenced objects are required to be sub-classes of COWIntrusiveCountableBase. If your looking for a non-intrusive smart smart pointer class that providers copy on write functionality, check out the COWReference class.

This class relies on calls to

 void COWIntrusiveReferenceAddRef(T* p);
 void COWIntrusiveReferenceRelease(T* p);
 bool COWIntrusiveReferenceUnique(T* p);
 T* COWIntrusiveReferenceClone(T* p);

     (p != 0)

The object is responsible for destroying itself.

If you want your class to be managed by COWIntrusiveReference, you can derive it from COWIntrusiveCountableBase, or write your own set of functions.

Definition at line 83 of file COWIntrusiveReference.hpp.

Member Typedef Documentation

◆ element_type

template<class T >
T BLOCXX_NAMESPACE::COWIntrusiveReference< T >::element_type

Definition at line 88 of file COWIntrusiveReference.hpp.

◆ this_type

template<class T >
COWIntrusiveReference BLOCXX_NAMESPACE::COWIntrusiveReference< T >::this_type
private

Definition at line 86 of file COWIntrusiveReference.hpp.

◆ unspecified_bool_type

template<class T >
T* this_type::* BLOCXX_NAMESPACE::COWIntrusiveReference< T >::unspecified_bool_type

Definition at line 251 of file COWIntrusiveReference.hpp.

Constructor & Destructor Documentation

◆ COWIntrusiveReference() [1/4]

template<class T >
BLOCXX_NAMESPACE::COWIntrusiveReference< T >::COWIntrusiveReference ( )
inline

Default constructor The underlying object pointer will be NULL.

Definition at line 94 of file COWIntrusiveReference.hpp.

◆ COWIntrusiveReference() [2/4]

template<class T >
BLOCXX_NAMESPACE::COWIntrusiveReference< T >::COWIntrusiveReference ( T * p,
bool addRef = true )
inline

Construct a COWIntrusiveReference that will contain a pointer to a COWIntrusiveCountableBase object.

Parameters
pA pointer to a COWIntrusiveCountableBase derivative.
addRefIf true the reference count will be incremented before the constructor returns. Otherwise thre reference count is left alone.

Definition at line 104 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReferenceAddRef(), and BLOCXX_NAMESPACE::COWIntrusiveReference< T >::m_pObj.

◆ COWIntrusiveReference() [3/4]

template<class T >
template<class U >
BLOCXX_NAMESPACE::COWIntrusiveReference< T >::COWIntrusiveReference ( COWIntrusiveReference< U > const & rhs)
inline

Copy constructor.

This takes a COWIntrusiveReference of a type derived from T. This constructor will cause this COWIntrusiveReference object to share the same underlying COWIntrusiveCountableBase pointer with another. This will cause the reference count to get incremented on the underlying object.

Parameters
rhsThe object to copy the COWIntrusiveCountableBase pointer from.

Definition at line 118 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReferenceAddRef(), and BLOCXX_NAMESPACE::COWIntrusiveReference< T >::m_pObj.

◆ COWIntrusiveReference() [4/4]

template<class T >
BLOCXX_NAMESPACE::COWIntrusiveReference< T >::COWIntrusiveReference ( COWIntrusiveReference< T > const & rhs)
inline

Copy constructor.

This constructor will cause this COWIntrusiveReference object to share the same underlying COWIntrusiveCountableBase pointer with another. This will cause the reference count to get incremented on the underlying object.

Parameters
rhsThe object to copy the COWIntrusiveCountableBase pointer from.

Definition at line 130 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReferenceAddRef(), and BLOCXX_NAMESPACE::COWIntrusiveReference< T >::m_pObj.

◆ ~COWIntrusiveReference()

template<class T >
BLOCXX_NAMESPACE::COWIntrusiveReference< T >::~COWIntrusiveReference ( )
inline

Destroy this COWIntrusiveReference.

If the reference count to the underlying COWIntrusiveCountableBase object is zero after it is decremented in this method it will be deleted.

Definition at line 139 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReferenceRelease(), and BLOCXX_NAMESPACE::COWIntrusiveReference< T >::m_pObj.

Member Function Documentation

◆ getPtr()

◆ getWriteLock()

template<class T >
void BLOCXX_NAMESPACE::COWIntrusiveReference< T >::getWriteLock ( )
inlineprivate

Create a clone of the COWIntrusiveCountableBase object if there is more than one reference to it.

This method is used to support the copy on write functionality.

Definition at line 285 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReferenceClone(), BLOCXX_NAMESPACE::COWIntrusiveReferenceUnique(), and BLOCXX_NAMESPACE::COWIntrusiveReference< T >::m_pObj.

Referenced by BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator*(), and BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator->().

◆ operator unspecified_bool_type()

template<class T >
BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator unspecified_bool_type ( ) const
inline

◆ operator!()

template<class T >
bool BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator! ( ) const
inline

Negation operator.

Returns
true if this objects COWIntrusiveCountableBase pointer is NULL.

Definition at line 262 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReference< T >::m_pObj.

◆ operator*() [1/2]

template<class T >
T & BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator* ( )
inline

◆ operator*() [2/2]

template<class T >
const T & BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator* ( ) const
inline
Returns
A read only reference to the underlying COWIntrusiveCountableBase object.

Definition at line 201 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReference< T >::m_pObj.

◆ operator->() [1/2]

template<class T >
T * BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator-> ( )
inline

◆ operator->() [2/2]

template<class T >
const T * BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator-> ( ) const
inline
Returns
A read only pointer to the underlying COWIntrusiveCountableBase object.

Definition at line 214 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReference< T >::m_pObj.

◆ operator=() [1/3]

template<class T >
COWIntrusiveReference & BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator= ( COWIntrusiveReference< T > const & rhs)
inline

Assignment operator.

This method will cause this COWIntrusiveReference object to share the same underlying COWIntrusiveCountableBase pointer with another. This will cause the reference count to get incremented on the underlying object.

Parameters
rhsThe object to copy the COWIntrusiveCountableBase pointer from.
Returns
A reference to this COWIntrusiveReference object.

Definition at line 170 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReference< T >::swap().

◆ operator=() [2/3]

template<class T >
template<class U >
COWIntrusiveReference & BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator= ( COWIntrusiveReference< U > const & rhs)
inline

Assignment operator that that takes a COWIntrusiveReference of a type derived from T.

This method will cause this COWIntrusiveReference object to share the same underlying COWIntrusiveCountableBase pointer with another. This will cause the reference count to get incremented on the underlying object.

Parameters
rhsThe object to copy the COWIntrusiveCountableBase pointer from.
Returns
A reference to this COWIntrusiveReference object.

Definition at line 155 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReference< T >::swap().

◆ operator=() [3/3]

template<class T >
COWIntrusiveReference & BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator= ( T * rhs)
inline

Assignment operator.

This changes the underlying COWIntrusiveCountableBase pointer to the one passed to this method.

Parameters
rhsA pointer to a COWIntrusiveCountableBase object. this will be the new underlying pointer for this object.
Returns
A reference to this COWIntrusiveReference object.

Definition at line 183 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReference< T >::swap().

◆ swap()

Friends And Related Symbol Documentation

◆ COWIntrusiveReference

template<class T >
template<class U >
friend class COWIntrusiveReference
friend

Definition at line 276 of file COWIntrusiveReference.hpp.

Member Data Documentation

◆ m_pObj


The documentation for this class was generated from the following file: