Main Page   Modules   Namespace List   Class Hierarchy   Compound List   Namespace Members   Compound Members   Related Pages  

openvrml::node_traverser Class Reference

Traverse the children of each node in a node hierarchy only once. More...

List of all members.


Public Member Functions

 node_traverser () throw (std::bad_alloc)
 Construct.

virtual ~node_traverser ()=0 throw ()
 Destroy.

void traverse (node &n)
 Traverse a node.

void traverse (const node_ptr &node)
 Traverse an sfnode.

void traverse (const std::vector< node_ptr > &nodes)
 Traverse an mfnode.


Protected Member Functions

void halt_traversal () throw ()
 Halt the traversal.


Private Member Functions

 node_traverser (const node_traverser &)
 Not implemented.

node_traverser & operator= (const node_traverser &)
 Not implemented.

virtual void on_entering (node &n)
 Called for each node in the traversal before traversing the its descendants.

virtual void on_leaving (node &n)
 Called for each node in the traversal after traversing the its descendants.

void do_traversal (node &n)
 Traverse a node.


Private Attributes

std::set< node * > traversed_nodes
 The set of nodes that have already been traversed.

bool halt
 Flag to indicate if the traversal should be halted.


Detailed Description

Traverse the children of each node in a node hierarchy only once.

The node_traverser provides a generalized traversal mechanism that avoids redundantly traversing branches of the node hierarchy. If a node occurs multiple places in a branch, the children of that node will be visted in the traversal only once.

For each node encountered in the traversal, node_traverser::performAction is called. Concrete subclasses of node_traverser implement this method in order to perform some operation on each node.


Constructor & Destructor Documentation

openvrml::node_traverser::node_traverser  )  throw (std::bad_alloc)
 

Construct.

Exceptions:
std::bad_alloc if memory allocation fails.

openvrml::node_traverser::~node_traverser  )  throw () [pure virtual]
 

Destroy.

openvrml::node_traverser::node_traverser const node_traverser &   )  [private]
 

Not implemented.

node_traverser is not copyable.


Member Function Documentation

void openvrml::node_traverser::do_traversal node n  )  [private]
 

Traverse a node.

For internal use only.

Parameters:
n the node to traverse.
Exceptions:
std::bad_alloc if memory allocation fails.

void openvrml::node_traverser::halt_traversal  )  throw () [protected]
 

Halt the traversal.

If this method is called during a traversal, no more descendent nodes will be traversed. Note that if halt_traversal is called in the implementation of on_entering, on_leaving will still be called for the current node.

void openvrml::node_traverser::on_entering node n  )  [private, virtual]
 

Called for each node in the traversal before traversing the its descendants.

Parameters:
n the node currently being traversed.

void openvrml::node_traverser::on_leaving node n  )  [private, virtual]
 

Called for each node in the traversal after traversing the its descendants.

Parameters:
n the node currently being traversed.

node_traverser & openvrml::node_traverser::operator= const node_traverser &   )  [private]
 

Not implemented.

node_traverser is not copyable.

void openvrml::node_traverser::traverse const std::vector< node_ptr > &  nodes  ) 
 

Traverse an mfnode.

No guarantee is made about the state of the node_traverser instance in the event that this method throws.

In addition to std::bad_alloc, this function throws any exception thrown from on_entering or on_leaving.

Parameters:
nodes the root nodes of the branch to traverse.
Exceptions:
std::bad_alloc if memory allocation fails.

void openvrml::node_traverser::traverse const node_ptr node  ) 
 

Traverse an sfnode.

No guarantee is made about the state of the node_traverser instance in the event that this method throws.

In addition to std::bad_alloc, this function throws any exception thrown from onEntering or onLeaving.

Parameters:
node the root node of the branch to traverse.
Exceptions:
std::bad_alloc if memory allocation fails.

void openvrml::node_traverser::traverse node n  ) 
 

Traverse a node.

No guarantee is made about the state of the node_traverser instance in the event that this method throws.

In addition to std::bad_alloc, this function throws any exception thrown from onEntering or onLeaving.

Parameters:
n the root node of the branch to traverse.
Exceptions:
std::bad_alloc if memory allocation fails.

Member Data Documentation

bool openvrml::node_traverser::halt [private]
 

Flag to indicate if the traversal should be halted.

std::set< node * > openvrml::node_traverser::traversed_nodes [private]
 

The set of nodes that have already been traversed.