Public Member Functions |
| | DtReaderWriterMember (void *parent=NULL) |
| | Default constructor.
|
| | DtReaderWriterMember (void *parent, DtRwPutDataHook putHook, DtRwGetDataHook getHook) |
| | Other constructors.
|
| | DtReaderWriterMember (const DtString &name, DtReaderWriterRegistry *parentRegistry=NULL) |
| | DtReaderWriterMember (const DtSymbolString &name, DtReaderWriterRegistry *parentRegistry=NULL) |
| | DtReaderWriterMember (const DtString &name, void *parent, DtReaderWriterRegistry *parentRegistry=NULL) |
| | DtReaderWriterMember (const DtSymbolString &name, void *parent, DtReaderWriterRegistry *parentRegistry=NULL) |
| | DtReaderWriterMember (const DtString &name, void *parent, DtRwPutDataHook putHook, DtRwGetDataHook getHook, DtReaderWriterRegistry *parentRegistry=NULL) |
| | DtReaderWriterMember (const DtSymbolString &name, void *parent, DtRwPutDataHook putHook, DtRwGetDataHook getHook, DtReaderWriterRegistry *parentRegistry=NULL) |
| | DtReaderWriterMember (const DtString &name, const DtReaderWriterMember &orig, void *parent=NULL, DtReaderWriterRegistry *parentRegistry=NULL) |
| | Copy constructor.
|
| | DtReaderWriterMember (const DtSymbolString &name, const DtReaderWriterMember &orig, void *parent=NULL, DtReaderWriterRegistry *parentRegistry=NULL) |
| const DtReaderWriterMember & | operator= (const DtReaderWriterMember &orig) |
| | Assignment operator.
|
| virtual | ~DtReaderWriterMember () |
| | Destructor.
|
| virtual void * | parent () const |
| | these are the top level put/get calls
|
| virtual void | setParent (void *arg) |
| DtReaderWriterRegistry * | registry () |
| | Collection of child DtReaderWriter nodes owned by this object.
|
| const DtReaderWriterRegistry * | registry () const |
| | Collection of child DtReaderWriter nodes owned by this object.
|
| virtual bool | localData () const |
| | Shortcuts to some common registry functions.
|
| virtual void | setLocalData (bool value=true) |
| virtual void | clearLocalData () |
| virtual void | setPutDataHook (DtRwPutDataHook hook) |
| | the setPutDataHook function sets the function to call when putData would normally be called by a DtReaderWriter.
|
| virtual void | setGetDataHook (DtRwGetDataHook hook) |
| virtual const char * | readerWriterType () const |
| | Used to supply a string type that this reader writer type is.
|
| bool | operator== (const DtReaderWriterMember &) const |
| | Always returns true.
|
| | DtReaderWriter () |
| | default constructor
|
| | DtReaderWriter (const DtString &name, DtReaderWriterRegistry *parentRegistry=NULL, bool readonly=false) |
| | real constructor Setting the readonly flag prevents object from writing itself to the stream.
|
| | DtReaderWriter (const DtSymbolString &name, DtReaderWriterRegistry *parentRegistry=NULL, bool readonly=false) |
| | DtReaderWriter (const DtString &name, const DtReaderWriter &orig, DtReaderWriterRegistry *parentRegistry=NULL) |
| | copy constructor
|
| | DtReaderWriter (const DtSymbolString &name, const DtReaderWriter &orig, DtReaderWriterRegistry *parentRegistry=NULL) |
| const DtReaderWriter & | operator= (const DtReaderWriter &orig) |
| | assignment operator
|
| bool | operator== (const DtReaderWriter &) const |
| | Equivalence operator.
|
| bool | operator!= (const DtReaderWriter &rhs) |
| virtual | ~DtReaderWriter () |
| | destructor
|
| virtual void | putSelf (FILE *fp, int indentLevel=0, bool writeUnspecified=false, const DtFilename &path=DtFilename::nullFilename()) |
| | Top level call to write itself to file.
|
| virtual void | getSelf (DtlObjPtr args, const DtFilename &searchPath=DtFilename::nullFilename(), const DtVariableBindingsList &variableBindings=nullVariableReference()) |
| | Top level to read itself from an input stream.
|
| virtual void | writeSelf (FILE *fp, int indentLevel=0, bool writeUnspecified=false, const DtFilename &path=DtFilename::nullFilename()) |
| | Called from putSelf, calls myRegistry.putSelf which in turn calls putSelf on each reader/writer in the registry.
|
| virtual DtSymbolString | name () const |
| | Accessor for name of this readable/writable object.
|
| virtual void | addAlias (const DtSymbolString &alias) |
| | Add an alias as an alternative name for this object.
|
| virtual bool | hasAlias (const DtSymbolString &alias) |
| virtual const aliasContainer & | aliases () const |
| virtual void | setReadonly (bool flag) |
| | Set read-only flag.
|
| virtual bool | isReadonly () const |
| virtual bool | variableIsBound () const |
| virtual void | unbindVariable () |
| | Sets the myVariableIsBound flag to false.
|
| virtual void | setName (const DtString &) |
| | Set the name of the object.
|
| virtual DtString | prettyPrint () const |
| | Routine to return a human readable form of the reader/writer variable.
|
| virtual void | bindVariables (DtVariableBindingsList variableBindings) |
| | Runs a variable binding pass on this reader writer and any of its children.
|
virtual std::list
< DtVariableNameType > | unboundVariables () const |
| bool | invalid () const |
| virtual bool | hasChild (const DtReaderWriter *p) const |
| | Returns true if this variable has a child p in it's chain.
|
| virtual void | setValueSpecified (bool specified, bool recurse=false) |
| | The specified flags are used for optional values.
|
| virtual bool | valueSpecified () const |
| | The specified flags are used for optional values.
|
| virtual bool | isVariableReference () const |
| | Specifies whether or not this reader writer is really a variable that is specified elsewhere.
|
| virtual void | setIsVariableReference (bool value) |
| virtual void | clearAllVariableReferenceFlags () |
| | Clears out all variable reference flags from all readerwriter items in registry recursively.
|
| virtual DtSymbolString | variableName () const |
| | The variable name, if this object is a variable reference.
|
| virtual void | setVariableName (const DtSymbolString variableName) |
| | The variable name, if this object is a variable reference.
|
class DtReaderWriterMember:
Instances of DtReaderWriterMember allow objects that are not derived from a DtReaderWriter to act as if they are for reading and writing purposes. This can be useful if you want to avoid the problems associated with multiple inheritance, and are willing to do a little extra work to do so.
This object is provided as a convenience to our customers, however THIS FEATURE IS NOT OFFICIALLY RECOMMENDED, DOCUMENTED OR SUPPORTED.
To use this class, add a DtReaderWriterMember as a normal member of your class, and then:
- In constructors, pass the "this" pointer into the DtReaderWriterMember object (or use setParent).
- In constructors, construct any other RW member data passing the DtReaderWriterMember's registry() as the parentRegistry argument.
- Declare and implement one or two static functions (putDataHook/getDataHook) that match the examples below. (optional if no "localData" is needed)
- Add a name() function that returns myRwMemb->name(). (optional)
- Add putSelf/getSelf functions that just call through to the same functions on the DtReaderWriterMember. (recommended) These should not be virtual functions! NOTE: if you really need to override getSelf/putSelf, then you should derive from DtReaderWriterMember and override them there. Any getSelf/putSelf functions on your container class will not be called by its parent's registry.
An example class:
#include <vlutil/vlString.h> #include "rwMember.h" #include "rwInt.h" #include "someClass.h"
class MyClass : public SomeOtherClass { public: //! Constructors MyClass(const DtString& name, DtReaderWriterRegistry* parentRegistry = NULL); MyClass(const DtString& name, int otherData, DtReaderWriterRegistry* parentRegistry = NULL); MyClass(const DtString& name, const MyClass& orig, DtReaderWriterRegistry* parentRegistry = NULL); const MyClass& operator=(const MyClass& orig);
//! Destructor virtual ~MyClass();
//! A redirector for the name function const DtString& name() const { return myRwMemb->name(); }
//! Redirectors for the putSelf and getSelf functions void putSelf(FILE *fp, int indentLevel = 0, bool writeUnspecified = false, const DtFilename& path = DtReaderWriter::appPath()) { myRwMemb->putSelf(fp, indentLevel); } void getSelf(DtlObjPtr args) { myRwMemb->getSelf(args); }
//! Redirectors for the valueSpecified functions void setValueSpecified(bool specified) { myRwMemb->setValueSpecified(specified); } bool valueSpecified() const { return myRwMemb->valueSpecified(); }
//! The Hook static functions static void putDataHook(void* obj, FILE* fp, int indentLevel); static DtlObjPtr getDataHook(void* obj, DtlObjPtr args);
protected: //! The REAL putData and getData functions virtual void putData(FILE* fp, int indentLevel = 0); virtual DtlObjPtr getData(DtlObjPtr args);
DtReaderWriterMember* myRwMemb; DtRwInt* myOtherData; }; MyClass::MyClass(const DtString & name, DtReaderWriterRegistry* parentRegistry = NULL) { myRwMemb = new DtReaderWriterMember(name, this, parentRegistry); myRwMemb->setPutDataHook(putDataHook); myRwMemb->setGetDataHook(getDataHook); //! NOTE: pass DtReaderWriterMember's registry as if our own myOtherData = new DtRwInt("other-data", myRwMemb->registry()); } MyClass::MyClass(const DtString & name, int otherData, DtReaderWriterRegistry* parentRegistry = NULL) { myRwMemb = new DtReaderWriterMember(name, this, putDataHook, getDataHook, parentRegistry); //! NOTE: pass DtReaderWriterMember's registry as if our own myOtherData = new DtRwInt("other-data", myRwMemb->registry()); myOtherData = otherData; } MyClass::MyClass(const DtString& name, const MyClass& orig, DtReaderWriterRegistry parentRegistry) { myRwMemb = new DtReaderWriterMember(name, orig.myRwMemb, this, parentRegistry); myOtherData = new DtRwInt(*orig.myOtherData); myRwMemb->registry()->addEntry(myOtherData->name(), myOtherData); } const MyClass& MyClass::operator=(const MyClass& orig) { *myRwMemb = *(orig.myRwMemb); *myOtherData = *(orig.myOtherData); } MyClass::~MyClass() { delete myRwMemb; delete myOtherData; } void MyClass::putDataHook(void obj, FILE* fp, int indentLevel) { ((MyClass*) obj)->putData(fp, indentLevel); } DtlObjPtr MyClass::getDataHook(void* obj, DtlObjPtr args) { return ((MyClass*) obj)->getData(args); }
NOTE: this technique makes your class act similar to a class derived from DtReaderWriter in many ways, but NOT ALL. For example, DO NOT ATTEMPT to add classes that are not derived from DtReaderWriter to DtRwLists! Of course, it should be possible to put the myRwMemb variables in the list and then access the REAL objects of the list by using the myRwMemb->parent() function. The actual code for doing this is left as an exercise to the reader.