gpucalc::SharedPtr< T > Class Template Reference

#include <utils.h>

List of all members.

Public Member Functions

void bind (T *Pointer)
T * get () const
T * getPointer () const
bool isNull () const
T & operator* () const
T * operator-> () const
template<class Y>
SharedPtroperator= (const SharedPtr< Y > &r)
SharedPtroperator= (const SharedPtr &r)
void setNull ()
template<class Y>
 SharedPtr (const SharedPtr< Y > &r)
 SharedPtr (const SharedPtr &r)
template<class Y>
 SharedPtr (Y *Pointer)
 SharedPtr ()
bool unique () const
unsigned int useCount () const
unsigned int * useCountPointer () const
virtual ~SharedPtr ()

Protected Member Functions

virtual void destroy ()
void release ()
virtual void swap (SharedPtr< T > &other)

Protected Attributes

T * mPointer
unsigned int * mUseCount


Detailed Description

template<class T>
class gpucalc::SharedPtr< T >

Definition at line 56 of file utils.h.


Constructor & Destructor Documentation

template<class T>
gpucalc::SharedPtr< T >::SharedPtr (  )  [inline]

Constructor, does not initialise the SharedPtr.

Remarks:
Dangerous! You have to call bind() before using the SharedPtr.

Definition at line 63 of file utils.h.

00063               : mPointer(0), mUseCount(0)
00064    {
00065    }

template<class T>
template<class Y>
gpucalc::SharedPtr< T >::SharedPtr ( Y *  Pointer  )  [inline, explicit]

Constructor.

Parameters:
Pointer The pointer to take ownership of

Definition at line 71 of file utils.h.

00071                                                      : mPointer(Pointer), mUseCount(new unsigned int(1))
00072    {
00073    }

template<class T>
gpucalc::SharedPtr< T >::SharedPtr ( const SharedPtr< T > &  r  )  [inline]

Definition at line 76 of file utils.h.

00076                                  : mPointer(0), mUseCount(0)
00077    {
00078     mPointer = r.mPointer;
00079     mUseCount = r.mUseCount;
00080     if (mUseCount)
00081     {
00082      ++(*mUseCount);
00083     }
00084    }

template<class T>
template<class Y>
gpucalc::SharedPtr< T >::SharedPtr ( const SharedPtr< Y > &  r  )  [inline]

Definition at line 101 of file utils.h.

00101                                                        : mPointer(0), mUseCount(0)
00102    {
00103     mPointer = r.getPointer();
00104     mUseCount = r.useCountPointer();
00105     // Handle zero pointer gracefully to manage STL containers
00106     if (mUseCount)
00107     {
00108      ++(*mUseCount);
00109     }
00110    }

template<class T>
virtual gpucalc::SharedPtr< T >::~SharedPtr (  )  [inline, virtual]

Definition at line 127 of file utils.h.

00128    {
00129     release();
00130    }


Member Function Documentation

template<class T>
void gpucalc::SharedPtr< T >::bind ( T *  Pointer  )  [inline]

Binds Pointer to the SharedPtr.

Remarks:
Assumes that the SharedPtr is uninitialised!

Definition at line 156 of file utils.h.

00157    {
00158     assert(!mPointer && !mUseCount);
00159     mUseCount = new unsigned int (1);
00160     mPointer = Pointer;
00161    }

template<class T>
virtual void gpucalc::SharedPtr< T >::destroy (  )  [inline, protected, virtual]

Definition at line 231 of file utils.h.

00232    {
00233     // IF YOU GET A CRASH HERE, YOU FORGOT TO FREE UP POINTERS
00234     // BEFORE SHUTTING gpucalc DOWN
00235     // Use setNull() before shutdown or make sure your pointer goes
00236     // out of scope before gpucalc shuts down to avoid this.
00237     delete mPointer;
00238     delete mUseCount;
00239    }

template<class T>
T* gpucalc::SharedPtr< T >::get (  )  const [inline]

Definition at line 147 of file utils.h.

00148    {
00149     return mPointer;
00150    }

template<class T>
T* gpucalc::SharedPtr< T >::getPointer (  )  const [inline]

Definition at line 184 of file utils.h.

00185    {
00186     return mPointer;
00187    }

template<class T>
bool gpucalc::SharedPtr< T >::isNull (  )  const [inline]

Definition at line 190 of file utils.h.

00191    {
00192     return mPointer == 0;
00193    }

template<class T>
T& gpucalc::SharedPtr< T >::operator* (  )  const [inline]

Definition at line 133 of file utils.h.

00134    {
00135     assert(mPointer);
00136     return * mPointer;
00137    }

template<class T>
T* gpucalc::SharedPtr< T >::operator-> (  )  const [inline]

Definition at line 140 of file utils.h.

00141    {
00142     assert(mPointer);
00143     return mPointer;
00144    }

template<class T>
template<class Y>
SharedPtr& gpucalc::SharedPtr< T >::operator= ( const SharedPtr< Y > &  r  )  [inline]

Definition at line 113 of file utils.h.

00114    {
00115     if (mPointer == r.mPointer)
00116     {
00117      return * this;
00118     }
00119     // Swap current data into a local copy
00120     // this ensures we deal with rhs and this being dependent
00121     SharedPtr<T> tmp(r);
00122     swap(tmp);
00123     return * this;
00124    }

template<class T>
SharedPtr& gpucalc::SharedPtr< T >::operator= ( const SharedPtr< T > &  r  )  [inline]

Definition at line 87 of file utils.h.

00088    {
00089     if (mPointer == r.mPointer)
00090     {
00091      return * this;
00092     }
00093     // Swap current data into a local copy
00094     // this ensures we deal with rhs and this being dependent
00095     SharedPtr<T> tmp(r);
00096     swap(tmp);
00097     return * this;
00098    }

template<class T>
void gpucalc::SharedPtr< T >::release (  )  [inline, protected]

Definition at line 214 of file utils.h.

00215    {
00216     bool destroyThis = false;
00217     if (mUseCount)
00218     {
00219      if (--(*mUseCount) == 0)
00220      {
00221       destroyThis = true;
00222      }
00223     }
00224     if (destroyThis)
00225     {
00226      destroy();
00227     }
00228    }

template<class T>
void gpucalc::SharedPtr< T >::setNull (  )  [inline]

Definition at line 196 of file utils.h.

00197    {
00198     if (mPointer)
00199     {
00200      release();
00201      mPointer = 0;
00202      mUseCount = 0;
00203     }
00204    }

template<class T>
virtual void gpucalc::SharedPtr< T >::swap ( SharedPtr< T > &  other  )  [inline, protected, virtual]

Definition at line 242 of file utils.h.

00243    {
00244     std::swap(mPointer, other.mPointer);
00245     std::swap(mUseCount, other.mUseCount);
00246    }

template<class T>
bool gpucalc::SharedPtr< T >::unique (  )  const [inline]

Definition at line 164 of file utils.h.

00165    {
00166     assert(mUseCount);
00167     return * mUseCount == 1;
00168    }

template<class T>
unsigned int gpucalc::SharedPtr< T >::useCount (  )  const [inline]

Definition at line 171 of file utils.h.

00172    {
00173     assert(mUseCount);
00174     return * mUseCount;
00175    }

template<class T>
unsigned int* gpucalc::SharedPtr< T >::useCountPointer (  )  const [inline]

Definition at line 178 of file utils.h.

00179    {
00180     return mUseCount;
00181    }


Member Data Documentation

template<class T>
T* gpucalc::SharedPtr< T >::mPointer [protected]

Definition at line 209 of file utils.h.

template<class T>
unsigned int* gpucalc::SharedPtr< T >::mUseCount [protected]

Definition at line 211 of file utils.h.


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

Generated on Thu Mar 5 22:36:46 2009 for gpucalc by  doxygen 1.5.6