MAK Data Logger API Documentation for HLA
datatypeManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 1992-2010 VT MAK
3 ** All rights reserved.
4 *******************************************************************************/
7 #pragma once
8 
9 #pragma warning(disable : 4100)
10 
11 #include "datatypeRep.h"
12 
13 #define UNDEFINED_STR "---"
14 
15 #include <map>
16 #include <vlutil/vlString.h>
17 #include <vector>
18 #include <list>
19 #include <mtl/mtl.h>
20 #include <mtl/lispEnv.h>
21 
22 class DtOMTTree;
23 class DtOMTNode;
29 class DtDatatypeFedNode;
30 class DtStringTree;
31 class DtObjectHistory;
32 
33 //shortcut
34 #define theOMTDatatypeManager DtDatatypeManager::defaultInstance()
35 
40 {
41 public:
42 
44  SIMPLE = 1,
51  DATATYPE_MAX
52  };
53 
55  static DtDatatypeManager* defaultInstance();
56 
59 
61  virtual ~DtDatatypeManager();
62 
65  virtual void initOMTData(DtOMTTree* omtTree);
66 
67  virtual DtOMTTree* omtTree() {return myOMTTree;};
68 
69 //--- The following functions are used to setup the representation list ---
70 
72  virtual void fillDefaultDatatypeRepList();
73 
74  //Fill in more representations manually. Note that this datatype
75  //now gets owned by this function and takes care of deleting it.
76  virtual void addDatatypeRep(DtDatatypeRep*);
77 
78  //This is a special type of Mapping
79  virtual void addDefinedDatatypeRep(DtDatatypeRep*);
80 
81  //Returns the class representation of a datatype. This only works with simple
82  //Reps since more complicated datatypes build the string out of multiple representations.
83  virtual DtDatatypeRep* getSimpleDatatypeRep(const DtString& datatypeName);
84 
86  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapList();
87  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapListEnd();
88 
89 
90  //--- The following functions are used to setup the delimiter mappings ---
91 
93  // For example, if the delimiter is :. Then a location(x,y,z) would look
95  virtual void addDelimiterMap(const DtString& datatype, const DtString& delimiter);
96  virtual void removeDelimiterMap(const DtString& datatype);
97 
99  virtual void setDefaultDelimiter(const DtString& str);
100 
103  virtual void setArrayWrapper(const DtString& start, const DtString& end);
104 
106  virtual DtString getDelimiterMap(const DtString& datatypeName, bool* isAvailable = 0);
107  virtual std::map<DtString,DtString>::iterator getDelimiterList();
108  virtual std::map<DtString,DtString>::iterator getDelimiterListEnd();
109 
110  //--- The following functions are used to setup the array bracket mappings ---
111 
115  virtual void addArrayBracketMap(const DtString& datatype, bool valueIsBracketed);
116  virtual void removeArrayBracketMap(const DtString& datatype);
117 
119  virtual void setDefaultArrayBracket(bool valueIsBracketed);
120 
122  virtual bool getArrayBracketMap(const DtString& datatypeName, bool* isAvailable = 0);
123  virtual std::map<DtString,bool>::iterator getArrayBracketList();
124  virtual std::map<DtString,bool>::iterator getArrayBracketListEnd();
125 
126  //--- The following functions are used to setup the representation to datatype mappings ---
127 
128 
130  virtual void readFile(DtString str);
131 
133  virtual void writeFile(DtString str);
134 
135  //Add a mapping between a datatype and a representation
136  virtual void addRepMapping(const DtString& datatype, const DtString& rep);
137  virtual void removeRepMapping(const DtString& datatype);
138 
139 
142  virtual bool modifyRepMapping(const DtString& datatype, const DtString& rep);
143 
145  virtual std::map<DtString,DtString>::iterator getRepMapList();
146  virtual std::map<DtString,DtString>::iterator getRepMapListEnd();
147 
148  //--- The following functions are used to convert objects to their representation ---
149 
159  virtual DtString getFedNodeStringRep(const DtDatatypeFedNode* currFedNode,
160  const void* value, int size, int& returnSize);
161  virtual DtString getStringRep(const DtString& datatypeName,
162  const void* value, int size, int& returnSize);
163 
175  virtual DtStringTree* createStringTreeRep(const DtDatatypeFedNode* currFedNode,
176  const void* value, int size, int& returnSize, unsigned int currentOffset = 0,
177  DtObjectHistory* = 0);
178  virtual DtStringTree* createStringTreeRep(const DtString& datatypeName,
179  const void* value, int size, int& returnSize, const DtOMTNode* omtNode = 0,
180  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
181  DtObjectHistory* = 0);
182 
187  virtual void getValueFromStringRep(const DtString& datatypeName, const DtString& stringRep,
188  std::vector<char>& result);
189 
193  virtual DtString convertStringTreeToString (DtStringTree*, const DtString& delimiter);
194 
195 
196  //--- The following functions are used to gather extra information about a datatype ---
197 
198  //Find what type of datatype an item is (Simple, Enum, Complex, etc)
199  virtual DtDatatypeEnum getDatatypeEnum(const DtString& datatypeName);
200 
201 
202 protected:
203 
206 
208  DtDatatypeManager& operator=(const DtDatatypeManager& rhs);
209 
210  virtual void checkOrphanMappings();
211  virtual void checkObjOrphans(DtObjectClassFedNode* objClass);
212  virtual void checkIntOrphans(DtInteractionClassFedNode* intClass);
213 
215  virtual void getDefaultRep(const void* value, int size, int& returnSize, DtString& returnString);
216  virtual void getDatatypeRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
217  virtual void getEnumRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
218  virtual void getVariantRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
219  virtual void getArrayRepBySize(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
220  virtual void getArrayRepByCount(DtArrayDatatypeNode* arrayNode, const void* value, int size, int& returnSize, DtString& returnString);
221  virtual void getArrayRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
222 
224  virtual void getValueFromDatatypeRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
225  virtual void getValueFromArrayRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
226  virtual void getValueFromComplexRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
227  virtual void getValueFromFixedRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
228  virtual void getValueFromEnumRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
229 
231  virtual void createComplexTreeRep(
232  const DtString& datatypeName, const void* value, int size,
233  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
234  unsigned int currentOffset = 0,
235  DtObjectHistory* = 0);
236  virtual void createArrayTreeRep(
237  const DtString& datatypeName, const void* value, int size,
238  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
239  unsigned int currentOffset = 0,
240  DtObjectHistory* = 0);
241  virtual void createDefinedTreeRep(
242  const DtString& datatypeName, const void* value, int size,
243  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
244  unsigned int currentOffset = 0,
245  DtObjectHistory* = 0);
246  virtual void createVariantTreeRep(
247  const DtString& datatypeName, const void* value, int size,
248  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
249  unsigned int currentOffset = 0,
250  DtObjectHistory* = 0);
251  virtual void createFixedTreeRep(
252  const DtString& datatypeName, const void* value, int size,
253  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
254  unsigned int currentOffset = 0,
255  DtObjectHistory* = 0);
256 
257 
259  virtual void processMappings(DtlObjPtr& ptr);
260 
264  virtual int getComplexDatatypeCount(DtComplexComponentNode* compNode, DtComplexDatatypeNode* parentNode,
265  const void* value, int valueSize, int alreadyRead,
266  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
267 
268  virtual int getArrayDatatypeCount(DtArrayDatatypeNode* arrayNode,
269  const void* value, int valueSize,
270  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
271 
272 protected:
273 
275  std::map<DtString,DtDatatypeEnum> myDatatypeTypeMap;
276 
277  typedef std::map<DtString,DtString> DatatypeNameRepNameMap;
279 
280  typedef std::map<DtString,DtDatatypeRep*> RepNamePtrMap;
282 
284  std::map<DtString,DtString> myDelimiterMap;
287 
289  std::map<DtString,bool> myArrayBracketMap;
290 
293 
294 };
295 
296 
297 

Document ID: Generated on Mon Jan 19 08:20:14 EST 2015 from SVN revision 149581
Copyright © 2005-2012 VT MÄK. All Rights Reserved (www.mak.com)