openvrml::exposedfield< FieldValue > Class Template Reference

Inheritance diagram for openvrml::exposedfield< FieldValue >:
[legend]

List of all members.


Detailed Description

template<typename FieldValue>
class openvrml::exposedfield< FieldValue >

Class template to simplify implementation of exposedFields.

exposedfield conveniently implements an event_listener and an event_emitter. Trivial exposedFields can be implemented simply by instantiating this template with a FieldValue. For the purposes of OpenVRML, a trivial exposedField is one that has no side-effects. That is, it simply receives an event, updates an internal value, and fires an eventOut. Nontrivial exposedFields (i.e., those with side-effects) can generally be implemented by inheriting an instance of this class template and overriding exposedfield<FieldValue>::event_side_effect.


Public Member Functions

 exposedfield (openvrml::node &node, const typename FieldValue::value_type &value=typename FieldValue::value_type())
 Construct.
virtual ~exposedfield () throw ()
 Destroy.

Private Member Functions

virtual void do_process_event (const FieldValue &value, double timestamp) throw (std::bad_alloc)
 Process an event.
virtual void event_side_effect (const FieldValue &value, double timestamp) throw (std::bad_alloc)
 Called by exposedfield<FieldValue>::do_process_event.

Constructor & Destructor Documentation

template<typename FieldValue>
openvrml::exposedfield< FieldValue >::exposedfield ( openvrml::node node,
const typename FieldValue::value_type &  value = typename FieldValue::value_type() 
) [inline]

Construct.

Parameters:
node a reference to the node to which the exposedField belongs.
value default value.

template<typename FieldValue>
openvrml::exposedfield< FieldValue >::~exposedfield (  )  throw () [inline, virtual]

Destroy.


Member Function Documentation

template<typename FieldValue>
void openvrml::exposedfield< FieldValue >::do_process_event ( const FieldValue &  value,
double  timestamp 
) throw (std::bad_alloc) [inline, private, virtual]

Process an event.

This function performs the following steps:

  1. set the exposedField value.
  2. call exposedfield<FieldValue>::event_side_effect.
  3. set the modified flag.
  4. emit the event.

Warning:
This function should not be overridden by subclasses. Subclasses should override exposedfield<FieldValue>::event_side_effect instead.
Parameters:
value new value.
timestamp the current time.
Exceptions:
std::bad_alloc if memory allocation fails.

Implements openvrml::field_value_listener< FieldValue >.

template<typename FieldValue>
void openvrml::exposedfield< FieldValue >::event_side_effect ( const FieldValue &  value,
double  timestamp 
) throw (std::bad_alloc) [inline, private, virtual]

Called by exposedfield<FieldValue>::do_process_event.

Subclasses should override this method to implement event handling functionality specific to a particular exposedField. The default implementation of this function does nothing.

Parameters:
value new value.
timestamp the current time.
Exceptions:
std::bad_alloc if memory allocation fails.