AutoPtr Class Template Reference

#include <AutoPtr.h>

Inheritance diagram for AutoPtr:

AutoArray List of all members.

Public Member Functions

 AutoPtr (T *t)
void registerReferer (void *pR)
int hasReferer () const
T * origObject ()

Static Public Member Functions

static bool destroy (AutoPtr< T > *pA, void *pR)

Protected Member Functions

void _unregister (void *pR)
 ~AutoPtr ()

Protected Attributes

T * _pObject
 original object
std::set< void * > _ref
 set of referencing objects

Static Protected Attributes

static std::set< AutoPtr<
T > * > 
_repos
 global static set of AutoPtr instances

Detailed Description

template<class T>
class esg::AutoPtr< T >

This class encapsulates given object and guarantees that the object is not destroied until it has some reference to itself.

Protocol:

   INSTANTIATE_AUTOPTR_STATIC_MEMBERS(ObjType); // only once in code

   ObjType          * obj;
   AutoPtr<ObjType> * a = new AutoPtr<ObjType>(obj); // create new autopointer

   //
   // method, which allows the referer to use the autopointed
   // object securely:
   //
   Referer::acceptObject(AutoPtr<ObjType> * a) { 
        a->registerReferer(this);
   }

   //
   // method, which securely deletes the autopointed object when it's not
   // used anymore by the referer:
   //
   Referer::deleteObject(AutoPtr<ObjType> * a) { 
        AutoPtr<ObjType>::destroy(a, this);
   }

Definition at line 42 of file AutoPtr.h.


Constructor & Destructor Documentation

~AutoPtr  )  [inline, protected]
 

AutoPtr T *  t  )  [inline]
 

Parameters:
t original object


Member Function Documentation

void _unregister void *  pR  )  [inline, protected]
 

Definition at line 49 of file AutoPtr.h.

Referenced by AutoPtr< Mesh >::destroy(), and AutoArray< Vertex3 >::destroy().

static bool destroy AutoPtr< T > *  pA,
void *  pR
[inline, static]
 

Destructor of original object. The object is realy destroied only if it has no reference to it.

Parameters:
pA autopointer with deleted object
pR referer to deleted object
Returns:
true if deleted object is really erased from memory, false otherwise

Definition at line 76 of file AutoPtr.h.

int hasReferer  )  const [inline]
 

Returns number of referers registered to this autopointer

Returns:
number of referers

Definition at line 100 of file AutoPtr.h.

Referenced by AutoPtr< Mesh >::destroy(), and AutoArray< Vertex3 >::destroy().

T* origObject  )  [inline]
 

Returns the original object stored in this autopointer

Returns:
original object or NULL

Definition at line 107 of file AutoPtr.h.

Referenced by Surface::_duplicate_attributes(), LightSource::LightSource(), SceneGraphObject::setSharedDiffuseBRDF(), SceneGraphObject::setSharedEmittance(), SceneGraphObject::setSharedGeometry(), SceneGraphObject::setSharedSpecularBRDF(), SceneGraphObject::setSharedTexture(), SceneGraphObject::setSharedTransformation(), and Surface::Surface().

void registerReferer void *  pR  )  [inline]
 

Registers new object that uses the object in this autopointer.

Parameters:
pR referer

Definition at line 93 of file AutoPtr.h.

Referenced by Surface::_duplicate_attributes(), SceneGraphObject::appendSharedAttribute(), SceneGraphObject::appendSharedMaterial(), RhinoParser::RhinoParser(), Shape::setEnergyState(), SceneGraphObject::setSharedDiffuseBRDF(), SceneGraphObject::setSharedEmittance(), SceneGraphObject::setSharedGeometry(), SceneGraphObject::setSharedSpecularBRDF(), SceneGraphObject::setSharedTexture(), SceneGraphObject::setSharedTransformation(), and Surface::Surface().


Member Data Documentation

T* _pObject [protected]
 

original object

Definition at line 44 of file AutoPtr.h.

std::set<void*> _ref [protected]
 

set of referencing objects

Definition at line 45 of file AutoPtr.h.

std::set<AutoPtr<T>*> _repos [static, protected]
 

global static set of AutoPtr instances

Reimplemented in AutoArray, AutoArray< Vector2 >, AutoArray< Vector3 >, AutoArray< Vertex2 >, and AutoArray< Vertex3 >.

Definition at line 46 of file AutoPtr.h.


The documentation for this class was generated from the following file:
Generated on Wed Jun 28 12:24:33 2006 for esg by  doxygen 1.4.6