00001
00002
00003
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
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
00067
00069 virtual void fillDefaultDatatypeRepList();
00070
00071
00072
00073 virtual void addDatatypeRep(DtDatatypeRep*);
00074
00075
00076 virtual void addDefinedDatatypeRep(DtDatatypeRep*);
00077
00078
00079
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
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
00104
00105
00107 virtual void readFile(DtString str);
00108
00110 virtual void writeFile(DtString str);
00111
00112
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
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
00166
00167
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