VR-Link API Documentation for DIS
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 
70  virtual void setImplicitPadding(bool enableImplicitPadding);
71  virtual bool isImplicitPaddingEnabled() const;
72 
73 //--- The following functions are used to setup the representation list ---
74 
76  virtual void fillDefaultDatatypeRepList();
77 
78  //Fill in more representations manually. Note that this datatype
79  //now gets owned by this function and takes care of deleting it.
80  virtual void addDatatypeRep(DtDatatypeRep*);
81 
82  //This is a special type of Mapping
83  virtual void addDefinedDatatypeRep(DtDatatypeRep*);
84 
85  //Returns the class representation of a datatype. This only works with simple
86  //Reps since more complicated datatypes build the string out of multiple representations.
87  virtual DtDatatypeRep* getSimpleDatatypeRep(const DtString& datatypeName);
88 
90  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapList();
91  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapListEnd();
92 
93 
94  //--- The following functions are used to setup the delimiter mappings ---
95 
97  // For example, if the delimiter is :. Then a location(x,y,z) would look
99  virtual void addDelimiterMap(const DtString& datatype, const DtString& delimiter);
100  virtual void removeDelimiterMap(const DtString& datatype);
101 
103  virtual void setDefaultDelimiter(const DtString& str);
104 
107  virtual void setArrayWrapper(const DtString& start, const DtString& end);
108 
110  virtual DtString getDelimiterMap(const DtString& datatypeName, bool* isAvailable = 0);
111  virtual std::map<DtString,DtString>::iterator getDelimiterList();
112  virtual std::map<DtString,DtString>::iterator getDelimiterListEnd();
113 
114  //--- The following functions are used to setup the array bracket mappings ---
115 
119  virtual void addArrayBracketMap(const DtString& datatype, bool valueIsBracketed);
120  virtual void removeArrayBracketMap(const DtString& datatype);
121 
123  virtual void setDefaultArrayBracket(bool valueIsBracketed);
124 
126  virtual bool getArrayBracketMap(const DtString& datatypeName, bool* isAvailable = 0);
127  virtual std::map<DtString,bool>::iterator getArrayBracketList();
128  virtual std::map<DtString,bool>::iterator getArrayBracketListEnd();
129 
130  //--- The following functions are used to setup the representation to datatype mappings ---
131 
132 
134  virtual void readFile(DtString str);
135 
137  virtual void writeFile(DtString str);
138 
139  //Add a mapping between a datatype and a representation
140  virtual void addRepMapping(const DtString& datatype, const DtString& rep);
141  virtual void removeRepMapping(const DtString& datatype);
142 
143 
146  virtual bool modifyRepMapping(const DtString& datatype, const DtString& rep);
147 
149  virtual std::map<DtString,DtString>::iterator getRepMapList();
150  virtual std::map<DtString,DtString>::iterator getRepMapListEnd();
151 
152  //--- The following functions are used to convert objects to their representation ---
153 
163  virtual DtString getFedNodeStringRep(const DtDatatypeFedNode* currFedNode,
164  const void* value, int size, int& returnSize);
165  virtual DtString getStringRep(const DtString& datatypeName,
166  const void* value, int size, int& returnSize);
167 
179  virtual DtStringTree* createStringTreeRep(const DtDatatypeFedNode* currFedNode,
180  const void* value, int size, int& returnSize, unsigned int currentOffset = 0,
181  DtObjectHistory* = 0);
182  virtual DtStringTree* createStringTreeRep(const DtString& datatypeName,
183  const void* value, int size, int& returnSize, const DtOMTNode* omtNode = 0,
184  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
185  DtObjectHistory* = 0);
186 
191  virtual void getValueFromStringRep(const DtString& datatypeName, const DtString& stringRep,
192  std::vector<char>& result);
193 
197  virtual DtString convertStringTreeToString (DtStringTree*, const DtString& delimiter);
198 
199 
200  //--- The following functions are used to gather extra information about a datatype ---
201 
202  //Find what type of datatype an item is (Simple, Enum, Complex, etc)
203  virtual DtDatatypeEnum getDatatypeEnum(const DtString& datatypeName);
204 
205 
206 protected:
207 
210 
212  DtDatatypeManager& operator=(const DtDatatypeManager& rhs);
213 
214  virtual void checkOrphanMappings();
215  virtual void checkObjOrphans(DtObjectClassFedNode* objClass);
216  virtual void checkIntOrphans(DtInteractionClassFedNode* intClass);
217 
219  virtual void getDefaultRep(const void* value, int size, int& returnSize, DtString& returnString);
220  virtual void getDatatypeRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
221  virtual void getEnumRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
222  virtual void getVariantRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
223  virtual void getArrayRepBySize(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
224  virtual void getArrayRepByCount(DtArrayDatatypeNode* arrayNode, const void* value, int size, int& returnSize, DtString& returnString);
225  virtual void getArrayRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
226 
228  virtual void getValueFromDatatypeRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
229  virtual void getValueFromArrayRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
230  virtual void getValueFromComplexRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
231  virtual void getValueFromFixedRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
232  virtual void getValueFromEnumRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
233 
235  virtual void createComplexTreeRep(
236  const DtString& datatypeName, const void* value, int size,
237  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
238  unsigned int currentOffset = 0,
239  DtObjectHistory* = 0);
240  virtual void createArrayTreeRep(
241  const DtString& datatypeName, const void* value, int size,
242  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
243  unsigned int currentOffset = 0,
244  DtObjectHistory* = 0);
245  virtual void createDefinedTreeRep(
246  const DtString& datatypeName, const void* value, int size,
247  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
248  unsigned int currentOffset = 0,
249  DtObjectHistory* = 0);
250  virtual void createVariantTreeRep(
251  const DtString& datatypeName, const void* value, int size,
252  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
253  unsigned int currentOffset = 0,
254  DtObjectHistory* = 0);
255  virtual void createFixedTreeRep(
256  const DtString& datatypeName, const void* value, int size,
257  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
258  unsigned int currentOffset = 0,
259  DtObjectHistory* = 0);
260 
262  virtual void processMappings(DtlObjPtr& ptr);
263 
267  virtual int getComplexDatatypeCount(DtComplexComponentNode* compNode, DtComplexDatatypeNode* parentNode,
268  const void* value, int valueSize, int alreadyRead,
269  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
270 
271  virtual int getArrayDatatypeCount(DtArrayDatatypeNode* arrayNode,
272  const void* value, int valueSize,
273  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
274 
275 protected:
276 
278  std::map<DtString,DtDatatypeEnum> myDatatypeTypeMap;
279 
280  typedef std::map<DtString,DtString> DatatypeNameRepNameMap;
282  std::set<DtString> myRemappedDatatypes;
283 
284  typedef std::map<DtString,DtDatatypeRep*> RepNamePtrMap;
286 
288  std::map<DtString,DtString> myDelimiterMap;
291 
293  std::map<DtString,bool> myArrayBracketMap;
294 
296 
299 
300 };
301 
302 
303 

Document ID: Generated on Wed Aug 14 15:35:11 EDT 2013 from SVN revision 130445
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)