Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

BLOCXX_NAMESPACE::COWIntrusiveReference< T > Class Template Reference

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

#include <COWIntrusiveReference.hpp>

Collaboration diagram for BLOCXX_NAMESPACE::COWIntrusiveReference< T >:

Collaboration graph
[legend]
List of all members.

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

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);

Definition at line 87 of file COWIntrusiveReference.hpp.


Member Typedef Documentation

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

Definition at line 92 of file COWIntrusiveReference.hpp.

template<class T>
typedef COWIntrusiveReference BLOCXX_NAMESPACE::COWIntrusiveReference< T >::this_type [private]
 

Definition at line 90 of file COWIntrusiveReference.hpp.

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

Definition at line 255 of file COWIntrusiveReference.hpp.


Constructor & Destructor Documentation

template<class T>
BLOCXX_NAMESPACE::COWIntrusiveReference< T >::COWIntrusiveReference  )  [inline]
 

Default constructor The underlying object pointer will be NULL.

Definition at line 98 of file COWIntrusiveReference.hpp.

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:
p A pointer to a COWIntrusiveCountableBase derivative.
addRef If true the reference count will be incremented before the constructor returns. Otherwise thre reference count is left alone.

Definition at line 108 of file COWIntrusiveReference.hpp.

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

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:
rhs The object to copy the COWIntrusiveCountableBase pointer from.

Definition at line 122 of file COWIntrusiveReference.hpp.

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

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:
rhs The object to copy the COWIntrusiveCountableBase pointer from.

Definition at line 134 of file COWIntrusiveReference.hpp.

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

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 143 of file COWIntrusiveReference.hpp.

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


Member Function Documentation

template<class T>
const T* BLOCXX_NAMESPACE::COWIntrusiveReference< T >::getPtr  )  const [inline]
 

Returns:
A read only pointer to the underlying COWIntrusiveCountableBase object.

Definition at line 196 of file COWIntrusiveReference.hpp.

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

Referenced by BLOCXX_NAMESPACE::operator!=(), and BLOCXX_NAMESPACE::operator==().

template<class T>
void BLOCXX_NAMESPACE::COWIntrusiveReference< T >::getWriteLock  )  [inline, private]
 

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 289 of file COWIntrusiveReference.hpp.

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

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

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

Returns:
A read/write reference to the underlying COWIntrusiveCountableBase object.

Definition at line 231 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReferenceHelpers::checkNull(), BLOCXX_NAMESPACE::COWIntrusiveReference< T >::getWriteLock(), and BLOCXX_NAMESPACE::COWIntrusiveReference< T >::m_pObj.

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 205 of file COWIntrusiveReference.hpp.

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

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

Definition at line 256 of file COWIntrusiveReference.hpp.

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

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 266 of file COWIntrusiveReference.hpp.

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

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

Returns:
A read/write pointer to the underlying COWIntrusiveCountableBase object.

Definition at line 245 of file COWIntrusiveReference.hpp.

References BLOCXX_NAMESPACE::COWIntrusiveReferenceHelpers::checkNull(), BLOCXX_NAMESPACE::COWIntrusiveReference< T >::getWriteLock(), and BLOCXX_NAMESPACE::COWIntrusiveReference< T >::m_pObj.

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 218 of file COWIntrusiveReference.hpp.

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

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:
rhs A 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 187 of file COWIntrusiveReference.hpp.

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

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:
rhs The object to copy the COWIntrusiveCountableBase pointer from.
Returns:
A reference to this COWIntrusiveReference object.

Definition at line 174 of file COWIntrusiveReference.hpp.

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

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:
rhs The object to copy the COWIntrusiveCountableBase pointer from.
Returns:
A reference to this COWIntrusiveReference object.

Definition at line 159 of file COWIntrusiveReference.hpp.

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

template<class T>
void BLOCXX_NAMESPACE::COWIntrusiveReference< T >::swap COWIntrusiveReference< T > &  rhs  )  [inline]
 

Definition at line 271 of file COWIntrusiveReference.hpp.

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

Referenced by BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator=(), BLOCXX_NAMESPACE::String::swap(), and BLOCXX_NAMESPACE::swap().


Friends And Related Function Documentation

template<class T>
friend class COWIntrusiveReference [friend]
 

Definition at line 280 of file COWIntrusiveReference.hpp.


Member Data Documentation

template<class T>
T* BLOCXX_NAMESPACE::COWIntrusiveReference< T >::m_pObj [private]
 

Definition at line 298 of file COWIntrusiveReference.hpp.

Referenced by BLOCXX_NAMESPACE::COWIntrusiveReference< T >::COWIntrusiveReference(), BLOCXX_NAMESPACE::COWIntrusiveReference< T >::getPtr(), BLOCXX_NAMESPACE::COWIntrusiveReference< T >::getWriteLock(), BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator *(), BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator unspecified_bool_type(), BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator!(), BLOCXX_NAMESPACE::COWIntrusiveReference< T >::operator->(), BLOCXX_NAMESPACE::COWIntrusiveReference< T >::swap(), and BLOCXX_NAMESPACE::COWIntrusiveReference< T >::~COWIntrusiveReference().


The documentation for this class was generated from the following file:
Generated on Tue Sep 13 00:04:56 2005 for blocxx by  doxygen 1.4.4