![]() |
VR-Link API Documentation for HLA 1.3
|
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