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

Protected Member Functions

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

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.

Additional Inherited Members

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

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.

Reimplemented in openvrml::node_impl_util::abstract_node< Derived >::exposedfield< FieldValue >, and openvrml::node_impl_util::abstract_node< Derived >::exposedfield< sfnode >.

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.

Reimplemented in openvrml::node_impl_util::abstract_node< Derived >::exposedfield< sfnode >.

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.
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.