VR-Forces 4.0.4 Class Documentation
include/vrfutil/rdrWritr.h
Go to the documentation of this file.
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

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)