openvrml::exposedfield< FieldValue > Class Template Reference

Class template to simplify implementation of exposedFields. More...

#include <openvrml/exposedfield.h>

Inheritance diagram for openvrml::exposedfield< FieldValue >:

Public Member Functions

virtual ~exposedfield () throw ()
 Destroy. More...
 
- Public Member Functions inherited from openvrml::node_field_value_listener< FieldValue >
virtual ~node_field_value_listener () throw ()
 Destroy. More...
 
- Public Member Functions inherited from openvrml::node_event_listener
virtual ~node_event_listener () throw ()
 Destroy. More...
 
openvrml::nodenode () const throw ()
 The node to which the node_event_listener belongs. More...
 
const std::string eventin_id () const throw ()
 The associated eventIn identifier. More...
 
- Public Member Functions inherited from openvrml::event_listener
virtual ~event_listener ()=0 throw ()
 Destroy. More...
 
- Public Member Functions inherited from openvrml::field_value_listener< FieldValue >
virtual ~field_value_listener ()=0 throw ()
 Destroy. More...
 
void process_event (const FieldValue &value, double timestamp) throw ( std::bad_alloc )
 Process an event. More...
 
virtual field_value::type_id type () const throw ()
 FieldValue::field_value_type_id. More...
 
- Public Member Functions inherited from openvrml::field_value_emitter< FieldValue >
 field_value_emitter (const FieldValue &value) throw ()
 Construct. More...
 
virtual ~field_value_emitter ()=0 throw ()
 Destroy. More...
 
bool add (field_value_listener< FieldValue > &listener) throw ( std::bad_alloc )
 Add an event listener. More...
 
bool remove (field_value_listener< FieldValue > &listener) throw ()
 Remove an event listener. More...
 
const std::set
< field_value_listener
< FieldValue > * > 
listeners () const throw ( std::bad_alloc )
 The event listeners currently listening to the emitter. More...
 
- Public Member Functions inherited from openvrml::event_emitter
virtual ~event_emitter ()=0 throw ()
 Destroy. More...
 
const field_valuevalue () const throw ()
 A reference to the field_value for the event_emitter. More...
 
const std::string eventout_id () const throw ()
 The associated eventOut identifier. More...
 
double last_time () const throw ()
 The timestamp of the last event emitted. More...
 
template<typename FieldValue >
bool add (field_value_listener< FieldValue > &listener) throw ( std::bad_alloc )
 Add an event listener. More...
 
template<typename FieldValue >
bool remove (field_value_listener< FieldValue > &listener) throw ()
 Remove an event listener. More...
 

Protected Member Functions

 exposedfield (openvrml::node &node, const typename FieldValue::value_type &value=typename FieldValue::value_type())
 Construct. More...
 
 exposedfield (const exposedfield< FieldValue > &obj)
 Construct a copy. More...
 
- Protected Member Functions inherited from openvrml::node_field_value_listener< FieldValue >
 node_field_value_listener (openvrml::node &n) throw ()
 Construct. More...
 
- Protected Member Functions inherited from openvrml::node_event_listener
 node_event_listener (openvrml::node &n) throw ()
 Construct. More...
 
- Protected Member Functions inherited from openvrml::event_listener
 event_listener () throw ()
 Construct. More...
 
- Protected Member Functions inherited from openvrml::field_value_listener< FieldValue >
 field_value_listener () throw ()
 Construct. More...
 

Private Member Functions

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

Additional Inherited Members

- Public Types inherited from openvrml::event_emitter
typedef std::set
< event_listener * > 
listener_set
 Set of event_listeners. More...
 

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.

Template Parameters
FieldValuea Field Value.

Constructor & Destructor Documentation

template<typename FieldValue >
openvrml::exposedfield< FieldValue >::~exposedfield ( )
throw (
)
inlinevirtual
template<typename FieldValue>
openvrml::exposedfield< FieldValue >::exposedfield ( openvrml::node node,
const typename FieldValue::value_type &  value = typename FieldValue::value_type() 
)
inlineprotected

Construct.

Template Parameters
FieldValuea Field Value.
Parameters
[in]nodea reference to the node to which the exposedField belongs.
[in]valuedefault value.
template<typename FieldValue>
openvrml::exposedfield< FieldValue >::exposedfield ( const exposedfield< FieldValue > &  obj)
inlineprotected

Construct a copy.

Template Parameters
FieldValuea Field Value.
Parameters
[in]objthe instance to copy.

Member Function Documentation

template<typename FieldValue>
void openvrml::exposedfield< FieldValue >::do_process_event ( const FieldValue &  value,
double  timestamp 
)
throw (std::bad_alloc
)
inlineprivatevirtual

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.
Template Parameters
FieldValuea Field Value.
Parameters
[in]valuenew value.
[in]timestampthe current time.
Exceptions
std::bad_allocif 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
)
inlineprivatevirtual

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.

Template Parameters
FieldValuea Field Value.
Parameters
[in]valuenew value.
[in]timestampthe current time.
Exceptions
std::bad_allocif memory allocation fails.