VR-Link API Documentation for DIS
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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/mtlEnvironment.h>
21 
22 class DtOMTTree;
23 class DtOMTNode;
24 class DtOMTDatatypeNode;
30 class DtDatatypeFedNode;
31 class DtStringTree;
32 class DtObjectHistory;
33 
34 //shortcut
35 #define theOMTDatatypeManager DtDatatypeManager::defaultInstance()
36 
41 {
42 public:
43 
45  SIMPLE = 1,
52  DATATYPE_MAX
53  };
54 
56  static DtDatatypeManager* defaultInstance();
57 
60 
62  virtual ~DtDatatypeManager();
63 
66  virtual void initOMTData(DtOMTTree* omtTree);
67 
68  virtual DtOMTTree* omtTree() {return myOMTTree;};
69 
71  virtual void setImplicitPadding(bool enableImplicitPadding);
72  virtual bool isImplicitPaddingEnabled() const;
73 
74 //--- The following functions are used to setup the representation list ---
75 
77  virtual void fillDefaultDatatypeRepList();
78 
79  //Fill in more representations manually. Note that this datatype
80  //now gets owned by this function and takes care of deleting it.
81  virtual void addDatatypeRep(DtDatatypeRep*);
82 
83  //This is a special type of Mapping
84  virtual void addDefinedDatatypeRep(DtDatatypeRep*);
85 
86  //Returns the class representation of a datatype. This only works with simple
87  //Reps since more complicated datatypes build the string out of multiple representations.
88  virtual DtDatatypeRep* getSimpleDatatypeRep(const DtString& datatypeName);
89 
91  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapList();
92  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapListEnd();
93 
94 
95  //--- The following functions are used to setup the delimiter mappings ---
96 
98  // For example, if the delimiter is :. Then a location(x,y,z) would look
100  virtual void addDelimiterMap(const DtString& datatype, const DtString& delimiter);
101  virtual void removeDelimiterMap(const DtString& datatype);
102 
104  virtual void setDefaultDelimiter(const DtString& str);
105 
108  virtual void setArrayWrapper(const DtString& start, const DtString& end);
109 
111  virtual DtString getDelimiterMap(const DtString& datatypeName, bool* isAvailable = 0);
112  virtual std::map<DtString,DtString>::iterator getDelimiterList();
113  virtual std::map<DtString,DtString>::iterator getDelimiterListEnd();
114 
115  //--- The following functions are used to setup the array bracket mappings ---
116 
120  virtual void addArrayBracketMap(const DtString& datatype, bool valueIsBracketed);
121  virtual void removeArrayBracketMap(const DtString& datatype);
122 
124  virtual void setDefaultArrayBracket(bool valueIsBracketed);
125 
127  virtual bool getArrayBracketMap(const DtString& datatypeName, bool* isAvailable = 0);
128  virtual std::map<DtString,bool>::iterator getArrayBracketList();
129  virtual std::map<DtString,bool>::iterator getArrayBracketListEnd();
130 
131  //--- The following functions are used to setup the representation to datatype mappings ---
132 
133 
135  virtual void readFile(DtString str);
136 
138  virtual void writeFile(DtString str);
139 
140  //Add a mapping between a datatype and a representation
141  virtual void addRepMapping(const DtString& datatype, const DtString& rep);
142  virtual void removeRepMapping(const DtString& datatype);
143 
144  //Add a mapping between an attribute Name and a representation
145  virtual void addAttributeMapping(const DtString& datatype, const DtString& rep);
146  virtual void removeAttributeMapping(const DtString& datatype);
147 
150  virtual bool modifyRepMapping(const DtString& datatype, const DtString& rep);
151 
153  virtual std::map<DtString,DtString>::iterator getRepMapList();
154  virtual std::map<DtString,DtString>::iterator getRepMapListEnd();
155 
156  //--- The following functions are used to convert objects to their representation ---
157 
167  virtual DtString getFedNodeStringRep(const DtDatatypeFedNode* currFedNode,
168  const void* value, int size, int& returnSize);
169  virtual DtString getStringRep(const DtString& datatypeName,
170  const void* value, int size, int& returnSize);
171  virtual DtString getStringRep(const DtOMTDatatypeNode& datatypeNode,
172  const void* value, int size, int& returnSize);
173 
185  virtual DtStringTree* createStringTreeRep(const DtDatatypeFedNode* currFedNode,
186  const void* value, int size, int& returnSize, unsigned int currentOffset = 0,
187  DtObjectHistory* = 0);
188  virtual DtStringTree* createStringTreeRep(const DtString& datatypeName,
189  const void* value, int size, int& returnSize, const DtOMTNode* omtNode = 0,
190  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
191  DtObjectHistory* = 0);
192  virtual DtStringTree* createStringTreeRep(const DtOMTDatatypeNode& datatypeNode,
193  const void* value, int size, int& returnSize,
194  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
195  DtObjectHistory* = 0);
196 
201  virtual void getValueFromStringRep(const DtString& datatypeName, const DtString& stringRep,
202  std::vector<char>& result);
203 
207  virtual DtString convertStringTreeToString (DtStringTree*, const DtString& delimiter);
208 
209 
210  //--- The following functions are used to gather extra information about a datatype ---
211 
212  //Find what type of datatype an item is (Simple, Enum, Complex, etc)
213  virtual DtDatatypeEnum getDatatypeEnum(const DtString& datatypeName);
214 
215 
216 protected:
217 
220 
222  DtDatatypeManager& operator=(const DtDatatypeManager& rhs);
223 
224  virtual void checkOrphanMappings();
225  virtual void checkObjOrphans(DtObjectClassFedNode* objClass);
226  virtual void checkIntOrphans(DtInteractionClassFedNode* intClass);
227 
229  virtual void getDefaultRep(const void* value, int size, int& returnSize, DtString& returnString);
230  virtual void getDatatypeRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
231  virtual void getAttributeRep(const DtString& attributeName, const void* value, int size, int& returnSize, DtString& returnString);
232  virtual void getEnumRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
233  virtual void getVariantRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
234  virtual void getArrayRepBySize(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
235  virtual void getArrayRepByCount(DtArrayDatatypeNode* arrayNode, const void* value, int size, int& returnSize, DtString& returnString);
236  virtual void getArrayRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
237 
239  virtual void getValueFromDatatypeRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
240  virtual void getValueFromArrayRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
241  virtual void getValueFromComplexRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
242  virtual void getValueFromFixedRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
243  virtual void getValueFromEnumRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
244 
246  virtual void createComplexTreeRep(
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 createArrayTreeRep(
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  virtual void createDefinedTreeRep(
257  const DtString& datatypeName, const void* value, int size,
258  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
259  unsigned int currentOffset = 0,
260  DtObjectHistory* = 0);
261  virtual void createVariantTreeRep(
262  const DtString& datatypeName, const void* value, int size,
263  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
264  unsigned int currentOffset = 0,
265  DtObjectHistory* = 0);
266  virtual void createFixedTreeRep(
267  const DtString& datatypeName, const void* value, int size,
268  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
269  unsigned int currentOffset = 0,
270  DtObjectHistory* = 0);
271 
273  virtual void processMappings(DtlObjPtr& ptr);
274 
278  virtual int getComplexDatatypeCount(DtComplexComponentNode* compNode, DtComplexDatatypeNode* parentNode,
279  const void* value, int valueSize, int alreadyRead,
280  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
281 
282  virtual int getArrayDatatypeCount(DtArrayDatatypeNode* arrayNode,
283  const void* value, int valueSize,
284  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
285 
286 protected:
287 
289  std::map<DtString,DtDatatypeEnum> myDatatypeTypeMap;
290 
291  typedef std::map<DtString,DtString> DatatypeNameRepNameMap;
294  std::set<DtString> myRemappedDatatypes;
295 
296  typedef std::map<DtString,DtDatatypeRep*> RepNamePtrMap;
298 
300  std::map<DtString,DtString> myDelimiterMap;
303 
305  std::map<DtString,bool> myArrayBracketMap;
306 
308 
311 
312 };
313 
314 
315 

Document ID: Generated on Wed Jan 7 13:31:29 EST 2015 from SVN revision 149162
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)