openvrml::node_type Class Reference

Type information object for nodes. More...

#include <openvrml/node.h>

Inheritance diagram for openvrml::node_type:

Public Member Functions

virtual ~node_type ()=0 throw ()
 Destructor.
const node_metatypemetatype () const throw ()
 The class object associated with the node_type.
const std::string & id () const throw ()
 The name of the node_type.
const node_interface_setinterfaces () const throw ()
 Get the set of interfaces for the node_type.
const boost::intrusive_ptr< nodecreate_node (const boost::shared_ptr< scope > &scope, const initial_value_map &initial_values=initial_value_map()) const throw ( unsupported_interface , std::bad_cast , std::bad_alloc )
 Create a new node with this node_type.

Protected Member Functions

 node_type (const node_metatype &c, const std::string &id) throw ( std::bad_alloc )
 Constructor.

Private Member Functions

virtual const node_interface_setdo_interfaces () const =0 throw ()
 Get the set of interfaces for the node_type.
virtual const
boost::intrusive_ptr< node
do_create_node (const boost::shared_ptr< scope > &scope, const initial_value_map &initial_values) const =0 throw ( unsupported_interface , std::bad_cast , std::bad_alloc )
 Create a new node with this node_type.

Related Functions

(Note that these are not member functions.)

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

Detailed Description

Type information object for nodes.

Constructor & Destructor Documentation

openvrml::node_type::~node_type ( ) throw ()
pure virtual

Destructor.

openvrml::node_type::node_type ( const node_metatype c,
const std::string &  id 
) throw ( std::bad_alloc )
protected

Constructor.

Parameters
[in]cthe class object associated with the node_type.
[in]idthe name for the node_type.
Exceptions
std::bad_allocif memory allocation fails.

Member Function Documentation

const openvrml::node_metatype & openvrml::node_type::metatype ( ) const throw ()

The class object associated with the node_type.

Returns
the class object associated with the node_type.
const std::string & openvrml::node_type::id ( ) const throw ()

The name of the node_type.

Returns
the name of the node_type.
const openvrml::node_interface_set & openvrml::node_type::interfaces ( ) const throw ()

Get the set of interfaces for the node_type.

This function delegates to do_interfaces.

Returns
the set of interfaces.
const boost::intrusive_ptr< openvrml::node > openvrml::node_type::create_node ( const boost::shared_ptr< scope > &  scope,
const initial_value_map initial_values = initial_value_map() 
) const throw ( unsupported_interface , std::bad_cast , std::bad_alloc )

Create a new node with this node_type.

Parameters
[in]scopethe scope to which the new node should belong.
[in]initial_valuesa map of initial values for the node's fields and exposedFields.
Returns
a boost::intrusive_ptr to a new node.
Exceptions
unsupported_interfaceif initial_values specifies a field name that is not supported by the node type.
std::bad_castif a value in initial_values is the wrong type.
std::bad_allocif memory allocation fails.
See Also
http://boost.org/libs/smart_ptr/intrusive_ptr.html
const openvrml::node_interface_set & openvrml::node_type::do_interfaces ( ) const throw ()
privatepure virtual

Get the set of interfaces for the node_type.

Subclasses must implement this function.

Returns
the set of interfaces.
const boost::intrusive_ptr< openvrml::node > openvrml::node_type::do_create_node ( const boost::shared_ptr< scope > &  scope,
const initial_value_map initial_values 
) const throw ( unsupported_interface , std::bad_cast , std::bad_alloc )
privatepure virtual

Create a new node with this node_type.

Subclasses must implement this function.

Parameters
[in]scopethe scope to which the new node should belong.
[in]initial_valuesa map of initial values for the node's fields and exposedFields.
Returns
a boost::intrusive_ptr to a new node.
Exceptions
unsupported_interfaceif initial_values specifies a field name that is not supported by the node type.
std::bad_castif a value in initial_values is the wrong type.
std::bad_allocif memory allocation fails.
See Also
http://boost.org/libs/smart_ptr/intrusive_ptr.html

Friends And Related Function Documentation

bool operator== ( const node_type lhs,
const node_type rhs 
) throw()
related

Compare for equality.

Two node_types t and u are considered equal if all of the following are true:

  • t.id() == u.id()
  • t.interfaces() == u.interfaces()
  • t.metatype().id() is in the set of identifiers associated with u in the browser's node_metatype map.

Note that the latter requirement makes this comparison a rather expensive operation.

Parameters
[in]lhs
[in]rhs
Returns
true if lhs and rhs are equal; false otherwise.
bool operator!= ( const node_type lhs,
const node_type rhs 
) throw()
related

Compare for inequality.

Parameters
[in]lhs
[in]rhs
Returns
true if lhs and rhs are not equal; false otherwise.