H3D::Field Class Reference

The Field class. More...

#include <H3D/Field.h>

Inheritance diagram for H3D::Field:

Inheritance graph

List of all members.

Classes

struct  Event
 The Event struct encapsulates an event in the field network. More...
class  FieldAccessError
 Exception thrown when performing actions that conflict with the field's access type. More...

Public Types

enum  AccessType { INITIALIZE_ONLY, OUTPUT_ONLY, INPUT_ONLY, INPUT_OUTPUT }
 The different access types that a field can have. More...

Public Member Functions

 Field ()
 Constructor.
virtual ~Field ()
 Destructor.
virtual void checkFieldType (Field *f, int index)
 Check that a given input field is of the correct type.
void setName (string _name)
 Sets local the name of the field. Will be used in error reporting.
string getName ()
 Gets the name of the field.
string getFullName ()
 Get the full name of the field including the name of the owner node if it exists (ownername.fieldname).
virtual string getTypeName ()
 Returns a string name for this field type.
virtual X3DTypes::X3DType getX3DType ()
 Returns the X3DType of the field.
virtual void route (Field *, int id=0)
 Set up a route from this field to the field given as argument.
virtual void routeNoEvent (Field *, int id=0)
 Set up a route from this field to the field given as argument.
virtual void unroute (Field *)
 Remove the route from this field to the field given as argument.
virtual FieldreplaceRoute (Field *f, unsigned int i, int id=0)
 Replace the i:th route to f with a route from this field.
virtual FieldreplaceRouteNoEvent (Field *f, unsigned int i, int id=0)
 Replace the i:th route to f with a route from this field.
template<class F >
void route (auto_ptr< F > &f, int id=0)
 Set up a route from this field to the field residing in the auto_ptr given as argument.
template<class F >
void routeNoEvent (auto_ptr< F > &f, int id=0)
 Set up a route from this field to the field residing in the auto_ptr given as argument.
template<class F >
void unroute (auto_ptr< F > &f)
 Remove the route from this field to the field residing in the auto_ptr given as argument.
void unrouteAll ()
 Remove all the routes from this field.
virtual void upToDate ()
 Check that the field is up-to-date, if not update() is called to make it up-to-date.
bool isUpToDate ()
 Returns true if the field is up to date, i.e.
virtual void touch ()
 Generates an event from this field.
NodegetOwner ()
 Get the Node that contains this field.
void setOwner (Node *n)
 Set the Node that contains this field.
void setAccessType (AccessType _access_type)
 Set the access type of the field.
AccessType getAccessType ()
 Get the access type of the field.
bool routesTo (Field *f)
 Returns true of this field is routed to the field given as argument.
bool hasRouteFrom (Field *f)
 Returns true of the field given as argumet is routed to this field.
const FieldVector & getRoutesIn ()
 Get the Fields that are routed to this Field.
const FieldSet & getRoutesOut ()
 Get the Fields this Field is routed to.
const EventgetLatestEvent ()
 Get the latest event.

Static Public Member Functions

static string classTypeName ()
 Returns a string name for this field type.

Protected Member Functions

virtual void startEvent ()
 Start a new event from this field.
virtual void propagateEvent (Event e)
 Propagates an event to all Fields we are routed to.
virtual void routeFrom (Field *, int id)
 Set up a route to this field from the field given as argument.
virtual void unrouteFrom (Field *)
 Remove the route to this field from the field given as argument.
virtual FieldreplaceRouteFrom (Field *f, unsigned int i, int id)
 Replace the i:th route to this field with the field given as argument.
virtual void update ()
 This function will be called to update the field if it has a pending event when the upToDate() function is called.
void checkAccessTypeRoute (Field *f, int id)
 Check the access type is correct for performing a route from this field to f.
void checkAccessTypeRouteFrom (Field *f, int id)
 Check the access type is correct for performing a route from f to this field.
void checkAccessTypeGet (int id)
 Check the access type is valid for getting the value of a field.
void checkAccessTypeSet (int id)
 Check the access type is valid for changing the value of a field.
int ownerId ()
 Gets the id of the owner node, -1 if no owner.

Protected Attributes

string name
 The name of the field.
bool event_lock
 If true, stops events from being propagated.
bool update_lock
 If true, stops the update() function from being called in the upToDate() function.
FieldSet routes_out
 The Fields that this field is routed to.
FieldVector routes_in
 The Field that are routed to this field.
Event event
 The last event that happened.
Nodeowner
 The node that contain this field.
AccessType access_type
 The type of access to the field.


Detailed Description

The Field class.

Member Enumeration Documentation

The different access types that a field can have.

Enumerator:
INITIALIZE_ONLY  The value of the field can only be changed before the Node that is the owner of the field has been initialized.

If no owner exists it works as an INPUT_OUTPUT field.

OUTPUT_ONLY  The value of the field can only read, not set.

Only the Node that is the owner of the field can change its value by providing its id to the setValue() function. Also only the owner can set up routes to the field. If no owner exists it works as an INPUT_OUTPUT field.

INPUT_ONLY  The value of the field can only set, not read.

Only the Node that is the owner of the field can read its value by providing its id to the getValue() function. Also only the owner can set up routes from the field. If no owner exists it works as an INPUT_OUTPUT field.

INPUT_OUTPUT  No restrictions on access to the field values or routes.


Member Function Documentation

void Field::checkAccessTypeGet ( int  id  )  [protected]

Check the access type is valid for getting the value of a field.

Exceptions:
FieldAccessError if the field has the wrong access type.

References access_type, getFullName(), H3D::Node::id, INPUT_ONLY, and owner.

void Field::checkAccessTypeRoute ( Field f,
int  id 
) [protected]

Check the access type is correct for performing a route from this field to f.

Exceptions:
FieldAccessError if the field has the wrong access type.

References access_type, getFullName(), H3D::Node::id, INPUT_ONLY, and owner.

Referenced by replaceRoute(), replaceRouteNoEvent(), route(), and routeNoEvent().

void Field::checkAccessTypeRouteFrom ( Field f,
int  id 
) [protected]

Check the access type is correct for performing a route from f to this field.

Exceptions:
FieldAccessError if the field has the wrong access type.

References access_type, getFullName(), H3D::Node::id, INITIALIZE_ONLY, OUTPUT_ONLY, and owner.

Referenced by replaceRouteFrom(), and routeFrom().

void Field::checkAccessTypeSet ( int  id  )  [protected]

Check the access type is valid for changing the value of a field.

Exceptions:
FieldAccessError if the field has the wrong access type.

References access_type, getFullName(), H3D::Node::id, INITIALIZE_ONLY, H3DUtil::RefCountedClass::isInitialized(), OUTPUT_ONLY, and owner.

virtual void H3D::Field::checkFieldType ( Field f,
int  index 
) [inline, virtual]

Check that a given input field is of the correct type.

Needed for TypedField.

Parameters:
f The field to check the type for
index The index of the field in the routes_in member.

Referenced by replaceRouteFrom(), and routeFrom().

static string H3D::Field::classTypeName (  )  [inline, static]

Returns a string name for this field type.

Must have a static version in order to give relevant error messages in TypedField.

string Field::getFullName (  ) 

bool H3D::Field::hasRouteFrom ( Field f  )  [inline]

Returns true of the field given as argumet is routed to this field.

bool H3D::Field::isUpToDate (  )  [inline]

Returns true if the field is up to date, i.e.

it has not pending events.

void Field::propagateEvent ( Event  e  )  [protected, virtual]

Field * Field::replaceRoute ( Field f,
unsigned int  i,
int  id = 0 
) [virtual]

Replace the i:th route to f with a route from this field.

An event will be generated to that field.

References checkAccessTypeRoute(), event, event_lock, getFullName(), H3DUtil::TimeStamp::now(), propagateEvent(), replaceRouteFrom(), routes_out, and H3D::Field::Event::time_stamp.

Field * Field::replaceRouteNoEvent ( Field f,
unsigned int  i,
int  id = 0 
) [virtual]

Replace the i:th route to f with a route from this field.

No event will be generated to that field.

References checkAccessTypeRoute(), getFullName(), replaceRouteFrom(), and routes_out.

template<class F >
void H3D::Field::route ( auto_ptr< F > &  f,
int  id = 0 
) [inline]

Set up a route from this field to the field residing in the auto_ptr given as argument.

An event will be generated to that field.

void Field::route ( Field f,
int  id = 0 
) [virtual]

template<class F >
void H3D::Field::routeNoEvent ( auto_ptr< F > &  f,
int  id = 0 
) [inline]

Set up a route from this field to the field residing in the auto_ptr given as argument.

No event will be generated to that field.

void Field::routeNoEvent ( Field f,
int  id = 0 
) [virtual]

Set up a route from this field to the field given as argument.

No event will be generated to that field.

References checkAccessTypeRoute(), getFullName(), routeFrom(), and routes_out.

Referenced by H3D::X3D::X3DSAX2Handlers::handleConnectElement(), H3D::X3D::X3DSAX2Handlers::handleRouteElement(), and yy::VrmlParser::parse().

bool H3D::Field::routesTo ( Field f  )  [inline]

Returns true of this field is routed to the field given as argument.

void Field::startEvent (  )  [protected, virtual]

Start a new event from this field.

Any pending events from incoming routes will be removed, so that the current value is the value of the field.

References event, event_lock, getFullName(), H3DUtil::TimeStamp::now(), propagateEvent(), routes_out, and H3D::Field::Event::time_stamp.

Referenced by H3D::H3DDisplayListObject::DisplayList::breakCache().

template<class F >
void H3D::Field::unroute ( auto_ptr< F > &  f  )  [inline]

Remove the route from this field to the field residing in the auto_ptr given as argument.

References unroute().

Referenced by unroute().

virtual void H3D::Field::update (  )  [inline, protected, virtual]

This function will be called to update the field if it has a pending event when the upToDate() function is called.

Reimplemented in H3D::H3DDisplayListObject::DisplayList, and H3D::Scene::EventSink.

Referenced by upToDate().

void Field::upToDate (  )  [virtual]

Check that the field is up-to-date, if not update() is called to make it up-to-date.

References event, getFullName(), H3D::Field::Event::ptr, update(), and update_lock.

Referenced by H3D::H3DDisplayListObject::DisplayList::callList(), and H3D::Scene::EventSink::update().


Member Data Documentation

bool H3D::Field::event_lock [protected]

If true, stops events from being propagated.

This is used to prevent event propagation to go around in circles in an infinite loop.

Referenced by Field(), propagateEvent(), replaceRoute(), route(), startEvent(), and touch().

Node* H3D::Field::owner [protected]

bool H3D::Field::update_lock [protected]

If true, stops the update() function from being called in the upToDate() function.

Referenced by Field(), and upToDate().


The documentation for this class was generated from the following files:

Generated on Fri Nov 7 10:30:02 2008 for H3D API by  doxygen 1.5.7