VR-Link API Documentation for HLA Evolved
datatypeManager.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 1992-2010 VT MAK
00003 ** All rights reserved.
00004 *******************************************************************************/
00007 #pragma once
00008 
00009 #pragma warning(disable : 4100)
00010 
00011 #include "datatypeRep.h"
00012 
00013 #define UNDEFINED_STR "---"
00014 
00015 #include <map>
00016 #include <vlutil/vlString.h>
00017 #include <vector>
00018 #include <list>
00019 #include <mtl/mtl.h>
00020 #include <mtl/lispEnv.h>
00021 
00022 class DtOMTTree;
00023 class DtOMTNode;
00024 class DtObjectClassFedNode;
00025 class DtInteractionClassFedNode;
00026 class DtComplexComponentNode;
00027 class DtComplexDatatypeNode;
00028 class DtArrayDatatypeNode;
00029 class DtDatatypeFedNode;
00030 class DtStringTree;
00031 class DtObjectHistory;
00032 
00033 //shortcut
00034 #define theOMTDatatypeManager DtDatatypeManager::defaultInstance()
00035 
00039 class DT_DLL_OMTREADER DtDatatypeManager
00040 {
00041 public:
00042 
00043    enum DtDatatypeEnum { 
00044       SIMPLE = 1,          
00045       ENUMERATED,          
00046       COMPLEX,             
00047       ARRAY,               
00048       VARIANT,             
00049       FIXED,               
00050       DEFINED,             
00051       DATATYPE_MAX 
00052    };
00053 
00055    static DtDatatypeManager* defaultInstance();
00056    
00058    virtual ~DtDatatypeManager();
00059 
00062    virtual void initOMTData(DtOMTTree* omtTree);
00063 
00064    virtual DtOMTTree* omtTree() {return myOMTTree;};
00065 
00066 //--- The following functions are used to setup the representation list ---
00067 
00069    virtual void fillDefaultDatatypeRepList();
00070 
00071    //Fill in more representations manually. Note that this datatype
00072    //now gets owned by this function and takes care of deleting it.
00073    virtual void addDatatypeRep(DtDatatypeRep*);
00074 
00075    //This is a special type of Mapping
00076    virtual void addDefinedDatatypeRep(DtDatatypeRep*);
00077 
00078    //Returns the class representation of a datatype. This only works with simple
00079    //Reps since more complicated datatypes build the string out of multiple representations.
00080    virtual DtDatatypeRep* getSimpleDatatypeRep(const DtString& datatypeName);
00081 
00083    virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapList();
00084    virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapListEnd();
00085 
00086 
00087    //--- The following functions are used to setup the delimiter mappings ---
00088 
00092    virtual void addDelimiterMap(const DtString& datatype, const DtString& delimiter);
00093    virtual void removeDelimiterMap(const DtString& datatype);
00094 
00096    virtual void setDefaultDelimiter(const DtString& str);
00097 
00099    virtual DtString getDelimiterMap(const DtString& datatypeName, bool* isAvailable = 0);
00100    virtual std::map<DtString,DtString>::iterator getDelimiterList();
00101    virtual std::map<DtString,DtString>::iterator getDelimiterListEnd();
00102 
00103    //--- The following functions are used to setup the representation to datatype mappings ---
00104 
00105 
00107    virtual void readFile(DtString str);
00108 
00110    virtual void writeFile(DtString str);
00111 
00112    //Add a mapping between a datatype and a representation
00113    virtual void addRepMapping(const DtString& datatype, const DtString& rep);
00114    virtual void removeRepMapping(const DtString& datatype);
00115 
00116 
00119    virtual bool modifyRepMapping(const DtString& datatype, const DtString& rep);
00120 
00122    virtual std::map<DtString,DtString>::iterator getRepMapList();
00123    virtual std::map<DtString,DtString>::iterator getRepMapListEnd();
00124 
00125    //--- The following functions are used to convert objects to their representation ---
00126 
00136    virtual DtString getStringRep(const DtDatatypeFedNode* currFedNode, 
00137       const void* value, int size, int& returnSize);
00138    virtual DtString getStringRep(const DtString& datatypeName, 
00139       const void* value, int size, int& returnSize);
00140    
00152    virtual DtStringTree* createStringTreeRep(const DtDatatypeFedNode* currFedNode,
00153       const void* value, int size, int& returnSize, unsigned int currentOffset = 0,
00154       DtObjectHistory* = 0);
00155    virtual DtStringTree* createStringTreeRep(const DtString& datatypeName, 
00156       const void* value, int size, int& returnSize, const DtOMTNode* omtNode = 0,
00157       unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
00158       DtObjectHistory* = 0);
00159       
00162    virtual DtString convertStringTreeToString (DtStringTree*);
00163 
00164 
00165    //--- The following functions are used to gather extra information about a datatype ---
00166 
00167    //Find what type of datatype an item is (Simple, Enum, Complex, etc)
00168    virtual DtDatatypeEnum getDatatypeEnum(const DtString& datatypeName);
00169 
00170    
00171 protected:
00172    virtual void checkOrphanMappings();
00173    virtual void checkObjOrphans(DtObjectClassFedNode* objClass);
00174    virtual void checkIntOrphans(DtInteractionClassFedNode* intClass);
00175 
00177    virtual void getDefaultRep(const void* value, int size, int& returnSize, DtString& returnString);
00178    virtual void getDatatypeRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
00179    virtual void getEnumRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
00180    virtual void getVariantRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
00181    virtual void getArrayRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
00182 
00184    virtual void createComplexTreeRep(const DtOMTNode* omtNode,
00185       const DtString& datatypeName,  const void* value, int size, 
00186       int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
00187       unsigned int currentOffset = 0,
00188       DtObjectHistory* = 0);
00189    virtual void createArrayTreeRep(const DtOMTNode* omtNode,
00190       const DtString& datatypeName,  const void* value, int size, 
00191       int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
00192       unsigned int currentOffset = 0,
00193       DtObjectHistory* = 0);
00194 
00195 
00197    virtual void processMappings(DtlObjPtr& ptr);
00198 
00202    virtual int getComplexDatatypeCount(DtComplexComponentNode* compNode, DtComplexDatatypeNode* parentNode,
00203       const void* value, int valueSize, int alreadyRead,
00204       const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
00205 
00206    virtual int getArrayDatatypeCount(DtArrayDatatypeNode* arrayNode,
00207       const void* value, int valueSize, 
00208       const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
00209  
00210 protected:
00211 
00212    DtOMTTree* myOMTTree;
00213    std::map<DtString,DtDatatypeEnum> myDatatypeTypeMap;
00214 
00215    typedef std::map<DtString,DtString> DatatypeNameRepNameMap;
00216    DatatypeNameRepNameMap myDatatypeToRepMap;
00217 
00218    typedef std::map<DtString,DtDatatypeRep*> RepNamePtrMap; 
00219    RepNamePtrMap myNameToRepMap;
00220 
00221    DtString myDefaultDelimiter;
00222    std::map<DtString,DtString> myDelimiterMap;
00223 
00225    static DtDatatypeManager* theDatatypeManager;
00226 
00227 private:
00228    
00230    DtDatatypeManager();
00231 
00233    DtDatatypeManager(const DtDatatypeManager& orig);
00234    
00236    DtDatatypeManager& operator=(const DtDatatypeManager& rhs);
00237 };
00238 
00239 
00240 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)