![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2003 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: rdrWritr.h,v $ $Revision: 1.24 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef DtReaderWriter_H_ 00013 #define DtReaderWriter_H_ 00014 00015 #include "stdio.h" 00016 #include <mtl/mtl.h> 00017 #include <vlutil/vlString.h> 00018 #include "vrfutil/rwRegistry.h" 00019 #include "vrfutil/putSelfCbInfo.h" 00020 #include "vrfutil/getSelfCbInfo.h" 00021 #include <vlutil/vlMachineTypes.h> 00022 #include "tdbutil/symStr.h" 00023 #include <vlutil/vlFilename.h> 00024 #include <list> 00025 #include "vrfutil/readerWriterFactory.h" 00026 #include "vrfutil/vrfutilDefines.h" 00027 00028 class DtRwVariableBindings; 00029 00079 class DT_DLL_vrfutil DtReaderWriter 00080 { 00081 public: 00082 00083 typedef std::vector<DtSymbolString> aliasContainer; 00084 typedef std::vector<DtSymbolString>::iterator aliasIter; 00085 typedef std::vector<DtSymbolString>::const_iterator aliasConstIter; 00086 00088 DtReaderWriter(); 00089 00093 DtReaderWriter(const DtString& name, DtReaderWriterRegistry* 00094 parentRegistry = NULL, bool readonly = false); 00095 DtReaderWriter(const DtSymbolString& name, DtReaderWriterRegistry* 00096 parentRegistry = NULL, bool readonly = false); 00097 00099 DtReaderWriter(const DtString& name, const DtReaderWriter& orig, 00100 DtReaderWriterRegistry* parentRegistry = NULL); 00101 DtReaderWriter(const DtSymbolString& name, const DtReaderWriter& orig, 00102 DtReaderWriterRegistry* parentRegistry = NULL); 00103 00105 const DtReaderWriter& operator=(const DtReaderWriter& orig); 00106 00108 virtual ~DtReaderWriter(); 00109 00117 virtual void putSelf(FILE* fp, int indentLevel = 0, 00118 bool writeUnspecified = false, const DtFilename& path = 00119 DtFilename::nullFilename()); 00120 00126 virtual void getSelf(DtlObjPtr args, 00127 const DtFilename& searchPath = DtFilename::nullFilename(), 00128 const DtVariableBindingsList& variableBindings = nullVariableReference()); 00129 00132 virtual void writeSelf(FILE* fp, int indentLevel = 0, 00133 bool writeUnspecified = false, 00134 const DtFilename& path = DtFilename::nullFilename()); 00135 00137 virtual DtSymbolString name() const; 00138 00139 static void putIndent(FILE* fp, int indentLevel); 00140 00143 static const DtVariableBindingsList& nullVariableReference(); 00144 00160 00161 virtual void setValueSpecified(bool specified, bool recurse = false); 00162 virtual bool valueSpecified() const; 00164 00166 virtual void addAlias(const DtSymbolString& alias); 00167 00169 virtual bool hasAlias(const DtSymbolString& alias); 00170 00172 virtual void setReadonly(bool flag); 00173 00175 virtual bool isReadonly() const; 00176 00179 00180 virtual bool isVariableReference() const; 00183 virtual void setIsVariableReference(bool value); 00185 00190 00191 virtual DtSymbolString variableName() const; 00192 virtual void setVariableName(const DtSymbolString variableName); 00194 00199 virtual bool variableIsBound() const; 00203 virtual void unbindVariable(); 00204 00205 static void setPostGetSelfCallback(DtGetSelfCallbackFcn fcn, void* usrData); 00206 00207 static void setPrePutSelfCallback(DtPutSelfCallbackFcn fcn, void* usrData); 00208 00210 00211 const DtReaderWriterRegistry& registry() const; 00212 DtReaderWriterRegistry& registry(); 00214 00223 virtual void setName(const DtString&); 00224 00228 virtual const char* readerWriterType() const; 00229 00230 00231 00241 virtual void bindVariables(DtVariableBindingsList variableBindings); 00242 00243 typedef std::pair<DtSymbolString, DtString> DtVariableNameType; 00247 virtual std::list<DtVariableNameType> unboundVariables() const; 00248 00253 static const DtFilename& appPath(); 00254 00255 bool invalid() const; 00256 00258 virtual bool hasChild(const DtReaderWriter* p) const; 00259 00263 static DtReaderWriterFactory* factory(); 00264 00265 protected: 00269 virtual void bindToRwAsVariable(const DtReaderWriter* rw); 00270 00274 virtual void bindLocalVariables(const DtVariableBindingsList& variableBindings); 00275 00277 00278 virtual void putData(FILE *fp, int indentLevel = 0); 00279 virtual DtlObjPtr getData(DtlObjPtr args, const DtFilename& searchPath, 00280 const DtVariableBindingsList& variableBindings); 00282 00283 protected: 00284 00285 const DtSymbolString myName; 00286 DtReaderWriterRegistry myRegistry; 00287 bool myValueSpecified; 00288 bool myReadOnlyFlag; 00289 bool myIsVariableReference; 00290 DtSymbolString myVariableName; 00291 bool myVariableIsBound; 00292 00294 aliasContainer myAliases; 00295 00296 static DtString theUnspecifiedValue; 00297 00298 static DtGetSelfCallbackInfo thePostGetSelfCallback; 00299 static DtPutSelfCallbackInfo thePrePutSelfCallback; 00300 static const DtVariableBindingsList theEmptyVariableBindingsList; 00301 00302 static DtReaderWriterFactory theFactory; 00303 00305 bool myInvalid; 00306 }; 00307 00308 inline const DtReaderWriterRegistry& DtReaderWriter::registry() const 00309 { 00310 return myRegistry; 00311 } 00312 00313 inline DtReaderWriterRegistry& DtReaderWriter::registry() 00314 { 00315 return myRegistry; 00316 } 00317 00318 inline bool DtReaderWriter::invalid() const 00319 { 00320 return myInvalid; 00321 } 00322 00323 #endif