openvrml::scope Class Reference

The scope class keeps track of defined nodes and prototypes. More...

#include <openvrml/scope.h>

Public Member Functions

 scope (const std::string &id, const boost::shared_ptr< scope > &parent=boost::shared_ptr< scope >())
 Construct.
const std::string & id () const throw ()
 scope identifier.
const boost::shared_ptr< scope > & parent () const throw ()
 The parent scope.
const std::pair
< boost::shared_ptr< node_type >
, bool > 
add_type (const boost::shared_ptr< node_type > &type) throw ( std::bad_alloc )
 Add a node_type.
const boost::shared_ptr
< node_type > & 
find_type (const std::string &id) const
 Find a node_type, given a type name. Returns 0 if no node_type named id is defined for the scope.
const boost::shared_ptr
< node_type > & 
first_type () const
 The first node_type in the scope.
nodefind_node (const std::string &id) const
 Find the node in the scope with node::id id.

Private Attributes

std::list< boost::shared_ptr
< node_type > > 
node_type_list
 List of node_types in the scope.
std::map< std::string, node * > named_node_map
 Map of the named nodes in the scope.

Related Functions

(Note that these are not member functions.)

const std::string path (const scope &s) throw(std::bad_alloc)

Detailed Description

The scope class keeps track of defined nodes and prototypes.

PROTO definitions add node_types to the namespace. PROTO implementations are a separate node_type namespace and require that any nested PROTOs not be available outside the PROTO implementation. PROTOs defined outside the current namespace are available.

Constructor & Destructor Documentation

openvrml::scope::scope ( const std::string &  id,
const boost::shared_ptr< scope > &  parent = boost::shared_ptr<scope>() 
)
explicit

Construct.

Parameters
[in]idthe identifier for the scope.
[in]parentthe parent scope.

For the root scope, id should be the URI of the world. For child scopes, id should be the name of the PROTO to which the scope corresponds.

Member Function Documentation

const std::string & openvrml::scope::id ( ) const throw ()

scope identifier.

Returns
the scope identifier.
const boost::shared_ptr< openvrml::scope > & openvrml::scope::parent ( ) const throw ()

The parent scope.

Returns
the parent scope; or null if the scope is a root scope.
const std::pair< boost::shared_ptr< openvrml::node_type >, bool > openvrml::scope::add_type ( const boost::shared_ptr< node_type > &  type) throw ( std::bad_alloc )

Add a node_type.

Print an error message if the argument type is already defined.

Parameters
[in]typea node_type.
Returns
a pair whose first element is a pointer to a node_type whose node_type::id is the same as that of type. The second element is a boolean value. If the second element is true, type was successfully added to the scope and the first element is the same as type. If the second element is false, type was not added to the scope and the first element is a node_type that already exists in the scope.
Exceptions
std::bad_allocif memory allocation fails.
Precondition
type is not null.
const boost::shared_ptr< openvrml::node_type > & openvrml::scope::find_type ( const std::string &  id) const

Find a node_type, given a type name. Returns 0 if no node_type named id is defined for the scope.

const boost::shared_ptr< openvrml::node_type > & openvrml::scope::first_type ( ) const

The first node_type in the scope.

Returns
the first node_type in the scope, or a null shared_ptr if the scope has no node_types.
openvrml::node * openvrml::scope::find_node ( const std::string &  id) const

Find the node in the scope with node::id id.

Returns
a pointer to a node with node::id id, or 0 if no such node exists in the scope.

Friends And Related Function Documentation

const std::string path ( const scope s) throw(std::bad_alloc)
related
Parameters
[in]sa scope.
Returns
the full “path” to the scope.

Member Data Documentation

std::list< boost::shared_ptr< openvrml::node_type > > openvrml::scope::node_type_list
private

List of node_types in the scope.

std::map< std::string, openvrml::node * > openvrml::scope::named_node_map
private

Map of the named nodes in the scope.