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 
10 
11 #pragma warning(disable : 4100)
12 
13 #include "datatypeRep.h"
14 
15 #define UNDEFINED_STR "---"
16 
17 #include <map>
18 #include <vlutil/vlString.h>
19 #include <vector>
20 #include <list>
21 #include <mtl/mtl.h>
22 #include <mtl/mtlEnvironment.h>
23 #ifdef DtUSE_UTILITIES_NAMESPACE
24 namespace DtUSE_UTILITIES_NAMESPACE
25 {
26 #endif
27 class DtOMTTree;
28 class DtOMTNode;
29 class DtOMTDatatypeNode;
35 class DtDatatypeFedNode;
36 class DtStringTree;
37 class DtObjectHistory;
38 
39 //shortcut
40 #define theOMTDatatypeManager DtDatatypeManager::defaultInstance()
41 
46 {
47 public:
48 
50  SIMPLE = 1,
57  DATATYPE_MAX
58  };
59 
61  static DtDatatypeManager* defaultInstance();
62 
65 
67  virtual ~DtDatatypeManager();
68 
71  virtual void initOMTData(DtOMTTree* omtTree);
72 
73  virtual DtOMTTree* omtTree() {return myOMTTree;};
74 
76  virtual void setImplicitPadding(bool enableImplicitPadding);
77  virtual bool isImplicitPaddingEnabled() const;
78 
79 //--- The following functions are used to setup the representation list ---
80 
82  virtual void fillDefaultDatatypeRepList();
83 
84  //Fill in more representations manually. Note that this datatype
85  //now gets owned by this function and takes care of deleting it.
86  virtual void addDatatypeRep(DtDatatypeRep*);
87 
88  //This is a special type of Mapping
89  virtual void addDefinedDatatypeRep(DtDatatypeRep*);
90 
91  //Returns the class representation of a datatype. This only works with simple
92  //Reps since more complicated datatypes build the string out of multiple representations.
93  virtual DtDatatypeRep* getSimpleDatatypeRep(const DtString& datatypeName);
94 
96  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapList();
97  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapListEnd();
98 
99 
100  //--- The following functions are used to setup the delimiter mappings ---
101 
103  // For example, if the delimiter is :. Then a location(x,y,z) would look
105  virtual void addDelimiterMap(const DtString& datatype, const DtString& delimiter);
106  virtual void removeDelimiterMap(const DtString& datatype);
107 
109  virtual void setDefaultDelimiter(const DtString& str);
110 
113  virtual void setArrayWrapper(const DtString& start, const DtString& end);
114 
116  virtual DtString getDelimiterMap(const DtString& datatypeName, bool* isAvailable = 0);
117  virtual std::map<DtString,DtString>::iterator getDelimiterList();
118  virtual std::map<DtString,DtString>::iterator getDelimiterListEnd();
119 
120  //--- The following functions are used to setup the array bracket mappings ---
121 
125  virtual void addArrayBracketMap(const DtString& datatype, bool valueIsBracketed);
126  virtual void removeArrayBracketMap(const DtString& datatype);
127 
129  virtual void setDefaultArrayBracket(bool valueIsBracketed);
130 
132  virtual bool getArrayBracketMap(const DtString& datatypeName, bool* isAvailable = 0);
133  virtual std::map<DtString,bool>::iterator getArrayBracketList();
134  virtual std::map<DtString,bool>::iterator getArrayBracketListEnd();
135 
136  //--- The following functions are used to setup the representation to datatype mappings ---
137 
138 
140  virtual void readFile(DtString str);
141 
143  virtual void writeFile(DtString str);
144 
145  //Add a mapping between a datatype and a representation
146  virtual void addRepMapping(const DtString& datatype, const DtString& rep);
147  virtual void removeRepMapping(const DtString& datatype);
148 
149  //Add a mapping between an attribute Name and a representation
150  virtual void addAttributeMapping(const DtString& datatype, const DtString& rep);
151  virtual void removeAttributeMapping(const DtString& datatype);
152 
155  virtual bool modifyRepMapping(const DtString& datatype, const DtString& rep);
156 
158  virtual std::map<DtString,DtString>::iterator getRepMapList();
159  virtual std::map<DtString,DtString>::iterator getRepMapListEnd();
160 
161  //--- The following functions are used to convert objects to their representation ---
162 
172  virtual DtString getFedNodeStringRep(const DtDatatypeFedNode* currFedNode,
173  const void* value, int size, int& returnSize);
174  virtual DtString getStringRep(const DtString& datatypeName,
175  const void* value, int size, int& returnSize);
176  virtual DtString getStringRep(const DtOMTDatatypeNode& datatypeNode,
177  const void* value, int size, int& returnSize);
178 
190  virtual DtStringTree* createStringTreeRep(const DtDatatypeFedNode* currFedNode,
191  const void* value, int size, int& returnSize, unsigned int currentOffset = 0,
192  DtObjectHistory* = 0);
193  virtual DtStringTree* createStringTreeRep(const DtString& datatypeName,
194  const void* value, int size, int& returnSize, const DtOMTNode* omtNode = 0,
195  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
196  DtObjectHistory* = 0);
197  virtual DtStringTree* createStringTreeRep(const DtOMTDatatypeNode& datatypeNode,
198  const void* value, int size, int& returnSize,
199  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
200  DtObjectHistory* = 0);
201 
206  virtual void getValueFromStringRep(const DtString& datatypeName, const DtString& stringRep,
207  std::vector<char>& result);
208 
212  virtual DtString convertStringTreeToString (DtStringTree*, const DtString& delimiter);
213 
214 
215  //--- The following functions are used to gather extra information about a datatype ---
216 
217  //Find what type of datatype an item is (Simple, Enum, Complex, etc)
218  virtual DtDatatypeEnum getDatatypeEnum(const DtString& datatypeName);
219 
221  // and FOM have been made to mappings
222  virtual bool isDirty();
223 
225  virtual void setIsDirty(bool makeDirty);
226 
227 protected:
228 
231 
233  DtDatatypeManager& operator=(const DtDatatypeManager& rhs);
234 
235  virtual void checkOrphanMappings();
236  virtual void checkObjOrphans(DtObjectClassFedNode* objClass);
237  virtual void checkIntOrphans(DtInteractionClassFedNode* intClass);
238 
240  virtual void getDefaultRep(const void* value, int size, int& returnSize, DtString& returnString);
241  virtual void getDatatypeRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
242  virtual void getAttributeRep(const DtString& attributeName, const void* value, int size, int& returnSize, DtString& returnString);
243  virtual void getEnumRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
244  virtual void getVariantRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
245  virtual void getArrayRepBySize(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
246  virtual void getArrayRepByCount(DtArrayDatatypeNode* arrayNode, const void* value, int size, int& returnSize, DtString& returnString);
247  virtual void getArrayRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
248 
250  virtual void getValueFromDatatypeRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
251  virtual void getValueFromArrayRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
252  virtual void getValueFromComplexRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
253  virtual void getValueFromFixedRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
254  virtual void getValueFromEnumRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
255 
257  virtual void createComplexTreeRep(
258  const DtString& datatypeName, const void* value, int size,
259  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
260  unsigned int currentOffset = 0,
261  DtObjectHistory* = 0);
262  virtual void createArrayTreeRep(
263  const DtString& datatypeName, const void* value, int size,
264  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
265  unsigned int currentOffset = 0,
266  DtObjectHistory* = 0);
267  virtual void createDefinedTreeRep(
268  const DtString& datatypeName, const void* value, int size,
269  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
270  unsigned int currentOffset = 0,
271  DtObjectHistory* = 0);
272  virtual void createVariantTreeRep(
273  const DtString& datatypeName, const void* value, int size,
274  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
275  unsigned int currentOffset = 0,
276  DtObjectHistory* = 0);
277  virtual void createFixedTreeRep(
278  const DtString& datatypeName, const void* value, int size,
279  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
280  unsigned int currentOffset = 0,
281  DtObjectHistory* = 0);
282 
284  virtual void processMappings(DtlObjPtr& ptr);
285 
289  virtual int getComplexDatatypeCount(DtComplexComponentNode* compNode, DtComplexDatatypeNode* parentNode,
290  const void* value, int valueSize, int alreadyRead,
291  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
292 
293  virtual int getArrayDatatypeCount(DtArrayDatatypeNode* arrayNode,
294  const void* value, int valueSize,
295  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
296 
298  virtual int byteAlignment(const DtString& datatype);
299  virtual int byteAlignmentFromRep(const DtString& datatype);
300  virtual int byteAlignmentFixed(const DtString& datatype);
301  virtual int byteAlignmentArray(const DtString& datatype);
302  virtual int byteAlignmentVariant(const DtString& datatype);
303  virtual int byteAlignmentComplex(const DtString& datatype);
304  virtual int implicitPadding(unsigned int currentOffset, const DtString& datatypeName);
305 
306 protected:
307 
309  std::map<DtString,DtDatatypeEnum> myDatatypeTypeMap;
310 
311  typedef std::map<DtString,DtString> DatatypeNameRepNameMap;
314  std::set<DtString> myRemappedDatatypes;
315 
316 
317  typedef std::map<DtString,DtDatatypeRep*> RepNamePtrMap;
319 
321  std::map<DtString,DtString> myDelimiterMap;
324 
326  std::map<DtString,bool> myArrayBracketMap;
327 
329 
330  bool myDirty;
331 
334 
335 
336 };
337 
338 
339 
340 #ifdef DtUSE_UTILITIES_NAMESPACE
341 } // end of namespace DtUSE_UTILITIES_NAMESPACE
342 #endif

Document ID: Generated on Mon Feb 6 18:36:34 EST 2017 from SVN revision 173107
Copyright © 2005-2016 VT MÄK. All Rights Reserved (www.mak.com)