![]() |
VR-Forces 4.0.4 Class Documentation
|
class DtReaderWriterMember: More...

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. | |
Protected Member Functions | |
| virtual void | putData (FILE *fp, int indentLevel=0) |
| A deriving class can override these to get/put class specific data but normally these will just call through the hooks, if provided. | |
| virtual DtlObjPtr | getData (DtlObjPtr args, const DtFilename &searchPath, const DtVariableBindingsList &variableBindings) |
Protected Attributes | |
| void * | myParent |
| DtRwPutDataHook | myPutDataHook |
| DtRwGetDataHook | myGetDataHook |
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:
An example class:
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.
| DtReaderWriterMember::DtReaderWriterMember | ( | void * | parent = NULL | ) |
Default constructor.
| DtReaderWriterMember::DtReaderWriterMember | ( | void * | parent, |
| DtRwPutDataHook | putHook, | ||
| DtRwGetDataHook | getHook | ||
| ) |
Other constructors.
| DtReaderWriterMember::DtReaderWriterMember | ( | const DtString & | name, |
| DtReaderWriterRegistry * | parentRegistry = NULL |
||
| ) |
| DtReaderWriterMember::DtReaderWriterMember | ( | const DtSymbolString & | name, |
| DtReaderWriterRegistry * | parentRegistry = NULL |
||
| ) |
| DtReaderWriterMember::DtReaderWriterMember | ( | const DtString & | name, |
| void * | parent, | ||
| DtReaderWriterRegistry * | parentRegistry = NULL |
||
| ) |
| DtReaderWriterMember::DtReaderWriterMember | ( | const DtSymbolString & | name, |
| void * | parent, | ||
| DtReaderWriterRegistry * | parentRegistry = NULL |
||
| ) |
| DtReaderWriterMember::DtReaderWriterMember | ( | const DtString & | name, |
| void * | parent, | ||
| DtRwPutDataHook | putHook, | ||
| DtRwGetDataHook | getHook, | ||
| DtReaderWriterRegistry * | parentRegistry = NULL |
||
| ) |
| DtReaderWriterMember::DtReaderWriterMember | ( | const DtSymbolString & | name, |
| void * | parent, | ||
| DtRwPutDataHook | putHook, | ||
| DtRwGetDataHook | getHook, | ||
| DtReaderWriterRegistry * | parentRegistry = NULL |
||
| ) |
| DtReaderWriterMember::DtReaderWriterMember | ( | const DtString & | name, |
| const DtReaderWriterMember & | orig, | ||
| void * | parent = NULL, |
||
| DtReaderWriterRegistry * | parentRegistry = NULL |
||
| ) |
Copy constructor.
| DtReaderWriterMember::DtReaderWriterMember | ( | const DtSymbolString & | name, |
| const DtReaderWriterMember & | orig, | ||
| void * | parent = NULL, |
||
| DtReaderWriterRegistry * | parentRegistry = NULL |
||
| ) |
| virtual DtReaderWriterMember::~DtReaderWriterMember | ( | ) | [virtual] |
Destructor.
| const DtReaderWriterMember& DtReaderWriterMember::operator= | ( | const DtReaderWriterMember & | orig | ) |
Assignment operator.
| virtual void* DtReaderWriterMember::parent | ( | ) | const [virtual] |
these are the top level put/get calls
| virtual void DtReaderWriterMember::setParent | ( | void * | arg | ) | [virtual] |
Collection of child DtReaderWriter nodes owned by this object.
Reimplemented from DtReaderWriter.
| const DtReaderWriterRegistry* DtReaderWriterMember::registry | ( | ) | const |
Collection of child DtReaderWriter nodes owned by this object.
Reimplemented from DtReaderWriter.
| virtual bool DtReaderWriterMember::localData | ( | ) | const [virtual] |
Shortcuts to some common registry functions.
| virtual void DtReaderWriterMember::setLocalData | ( | bool | value = true | ) | [virtual] |
| virtual void DtReaderWriterMember::clearLocalData | ( | ) | [virtual] |
| virtual void DtReaderWriterMember::setPutDataHook | ( | DtRwPutDataHook | hook | ) | [virtual] |
the setPutDataHook function sets the function to call when putData would normally be called by a DtReaderWriter.
| virtual void DtReaderWriterMember::setGetDataHook | ( | DtRwGetDataHook | hook | ) | [virtual] |
| virtual const char* DtReaderWriterMember::readerWriterType | ( | ) | const [virtual] |
Used to supply a string type that this reader writer type is.
This can be used in place of dynamic-casting. Also used by the opd editor to determine which type of control to create
Reimplemented from DtReaderWriter.
| virtual void DtReaderWriterMember::putData | ( | FILE * | fp, |
| int | indentLevel = 0 |
||
| ) | [protected, virtual] |
A deriving class can override these to get/put class specific data but normally these will just call through the hooks, if provided.
When the hooks are called, the first argument will be the myParent pointer.
Reimplemented from DtReaderWriter.
| virtual DtlObjPtr DtReaderWriterMember::getData | ( | DtlObjPtr | args, |
| const DtFilename & | searchPath, | ||
| const DtVariableBindingsList & | variableBindings | ||
| ) | [protected, virtual] |
void* DtReaderWriterMember::myParent [protected] |
DtRwPutDataHook DtReaderWriterMember::myPutDataHook [protected] |
DtRwGetDataHook DtReaderWriterMember::myGetDataHook [protected] |