openvrml::node_ptr Class Reference

List of all members.

Detailed Description

A reference-counted smart pointer for nodes.


Public Member Functions

 node_ptr (node *node=0) throw (std::bad_alloc)
 Construct.
 node_ptr (const node_ptr &ptr) throw ()
 Construct a copy.
 ~node_ptr () throw ()
 Destructor.
 operator bool () const throw ()
 Automatic conversion to bool.
node_ptroperator= (const node_ptr &ptr) throw ()
 Assignment operator.
nodeoperator * () const throw ()
 Dereference operator.
nodeoperator-> () const throw ()
 Access a method of the node.
nodeget () const throw ()
 Get a raw pointer to the node.
void reset (node *node=0) throw (std::bad_alloc)
 Reset the node_ptr to point to a different node.
void swap (node_ptr &ptr) throw ()
 Swap the values of the node_ptr and ptr.

Static Public Attributes

static const node_ptr self
 Special value used when initializing a script_node.

Private Member Functions

void dispose () throw ()
 Relinquish ownership of the node.
void share (std::map< node *, size_t >::value_type *count_ptr) throw ()
 Share ownership of a node.

Private Attributes

std::map< node *, size_t
>::value_type * 
count_ptr
 Pointer to an entry in count_map.

Friends

class script_node
 Script nodes can be self-referential, so node_ptr works some special magic.
bool operator== (const node_ptr &lhs, const node_ptr &rhs) throw ()
 Compare for equality.

Related Functions

(Note that these are not member functions.)

bool operator!= (const node_ptr &lhs, const node_ptr &rhs) throw()
 Compare for inequality.

Constructor & Destructor Documentation

openvrml::node_ptr::node_ptr ( node node = 0  )  throw (std::bad_alloc) [explicit]

Construct.

Parameters:
node a pointer to a node
Exceptions:
std::bad_alloc if memory allocation fails.

openvrml::node_ptr::node_ptr ( const node_ptr ptr  )  throw ()

Construct a copy.

Parameters:
ptr 

openvrml::node_ptr::~node_ptr (  )  throw () [inline]

Destructor.


Member Function Documentation

openvrml::node_ptr::operator bool (  )  const throw () [inline]

Automatic conversion to bool.

node_ptr & openvrml::node_ptr::operator= ( const node_ptr ptr  )  throw () [inline]

Assignment operator.

Parameters:
ptr 

node & openvrml::node_ptr::operator * (  )  const throw () [inline]

Dereference operator.

Returns:
a reference to the underlying node.

node * openvrml::node_ptr::operator-> (  )  const throw () [inline]

Access a method of the node.

node * openvrml::node_ptr::get (  )  const throw () [inline]

Get a raw pointer to the node.

Returns:
a raw pointer to the underlying node.

void openvrml::node_ptr::reset ( node node = 0  )  throw (std::bad_alloc)

Reset the node_ptr to point to a different node.

Parameters:
node 
Exceptions:
std::bad_alloc if memory allocation fails.

void openvrml::node_ptr::swap ( node_ptr ptr  )  throw () [inline]

Swap the values of the node_ptr and ptr.

void openvrml::node_ptr::dispose (  )  throw () [private]

Relinquish ownership of the node.

Decrement the reference count; if it drops to zero, call node::shutdown on the node, delete the node, and remove its entry from the count map.

void openvrml::node_ptr::share ( std::map< node *, size_t >::value_type *  count_ptr  )  throw () [private]

Share ownership of a node.

Parameters:
count_ptr a pointer to an entry in the count map to share.


Friends And Related Function Documentation

openvrml::node_ptr::script_node [friend]

Script nodes can be self-referential, so node_ptr works some special magic.

bool operator== ( const node_ptr lhs,
const node_ptr rhs 
) throw () [friend]

Compare for equality.

Parameters:
lhs left-hand operand.
rhs right-hand operand.
Returns:
true if lhs and rhs point to the same node; false otherwise.

bool operator!= ( const node_ptr lhs,
const node_ptr rhs 
) throw() [related]

Compare for inequality.

Parameters:
lhs left-hand operand.
rhs right-hand operand.
Returns:
true if lhs and rhs point to different nodes; false otherwise.


Member Data Documentation

std::map< node *, size_t >::value_type * openvrml::node_ptr::count_ptr [private]

Pointer to an entry in count_map.

For internal use only.

Special value used when initializing a script_node.

One should never attempt to dereference this value. It is useful only for comparison.