00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00027
00029 #ifndef __H3DDYNAMICFIELDSOBJECT_H__
00030 #define __H3DDYNAMICFIELDSOBJECT_H__
00031
00032 #include "H3DNodeDatabase.h"
00033 #include "AutoPtrVector.h"
00034 #include "Node.h"
00035
00036 namespace H3D {
00043 class H3DAPI_API H3DDynamicFieldsObject {
00044 public:
00046 H3DDynamicFieldsObject( H3DNodeDatabase *_database ):
00047 database( _database ) {}
00048
00050 virtual ~H3DDynamicFieldsObject() {}
00051
00059 inline virtual bool addField( const string &name,
00060 const Field::AccessType &access,
00061 Field *field ) {
00062 Node *n = dynamic_cast< Node * >( this );
00063 if( n && !database->getField( n, name.c_str() ) ) {
00064 field->setOwner( n );
00065 field->setName( name );
00066 database->addField( new DynamicFieldDBElement( database,
00067 name.c_str(),
00068 access,
00069 field ) );
00070 dynamic_fields.push_back( field );
00071 return true;
00072 }
00073 return false;
00074 }
00075
00076 typedef AutoPtrVector< Field >::const_iterator field_iterator;
00077
00079 inline field_iterator firstField() {
00080 return dynamic_fields.begin();
00081 }
00082
00084 inline field_iterator endField() {
00085 return dynamic_fields.end();
00086 }
00087
00091
00092
00093 protected:
00094 H3DNodeDatabase *database;
00095 AutoPtrVector< Field > dynamic_fields;
00096 };
00097 }
00098
00099 #endif