MAK Data Logger API Documentation for HLA
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties 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 class DtOMTTree;
24 class DtOMTNode;
25 class DtOMTDatatypeNode;
31 class DtDatatypeFedNode;
32 class DtStringTree;
33 class DtObjectHistory;
34 
35 //shortcut
36 #define theOMTDatatypeManager DtDatatypeManager::defaultInstance()
37 
42 {
43 public:
44 
46  SIMPLE = 1,
53  DATATYPE_MAX
54  };
55 
57  static DtDatatypeManager* defaultInstance();
58 
61 
63  virtual ~DtDatatypeManager();
64 
67  virtual void initOMTData(DtOMTTree* omtTree);
68 
69  virtual DtOMTTree* omtTree() {return myOMTTree;};
70 
72  virtual void setImplicitPadding(bool enableImplicitPadding);
73  virtual bool isImplicitPaddingEnabled() const;
74 
75 //--- The following functions are used to setup the representation list ---
76 
78  virtual void fillDefaultDatatypeRepList();
79 
80  //Fill in more representations manually. Note that this datatype
81  //now gets owned by this function and takes care of deleting it.
82  virtual void addDatatypeRep(DtDatatypeRep*);
83 
84  //This is a special type of Mapping
85  virtual void addDefinedDatatypeRep(DtDatatypeRep*);
86 
87  //Returns the class representation of a datatype. This only works with simple
88  //Reps since more complicated datatypes build the string out of multiple representations.
89  virtual DtDatatypeRep* getSimpleDatatypeRep(const DtString& datatypeName);
90 
92  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapList();
93  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapListEnd();
94 
95 
96  //--- The following functions are used to setup the delimiter mappings ---
97 
99  // For example, if the delimiter is :. Then a location(x,y,z) would look
101  virtual void addDelimiterMap(const DtString& datatype, const DtString& delimiter);
102  virtual void removeDelimiterMap(const DtString& datatype);
103 
105  virtual void setDefaultDelimiter(const DtString& str);
106 
109  virtual void setArrayWrapper(const DtString& start, const DtString& end);
110 
112  virtual DtString getDelimiterMap(const DtString& datatypeName, bool* isAvailable = 0);
113  virtual std::map<DtString,DtString>::iterator getDelimiterList();
114  virtual std::map<DtString,DtString>::iterator getDelimiterListEnd();
115 
116  //--- The following functions are used to setup the array bracket mappings ---
117 
121  virtual void addArrayBracketMap(const DtString& datatype, bool valueIsBracketed);
122  virtual void removeArrayBracketMap(const DtString& datatype);
123 
125  virtual void setDefaultArrayBracket(bool valueIsBracketed);
126 
128  virtual bool getArrayBracketMap(const DtString& datatypeName, bool* isAvailable = 0);
129  virtual std::map<DtString,bool>::iterator getArrayBracketList();
130  virtual std::map<DtString,bool>::iterator getArrayBracketListEnd();
131 
132  //--- The following functions are used to setup the representation to datatype mappings ---
133 
134 
136  virtual void readFile(DtString str);
137 
139  virtual void writeFile(DtString str);
140 
141  //Add a mapping between a datatype and a representation
142  virtual void addRepMapping(const DtString& datatype, const DtString& rep);
143  virtual void removeRepMapping(const DtString& datatype);
144 
145  //Add a mapping between an attribute Name and a representation
146  virtual void addAttributeMapping(const DtString& datatype, const DtString& rep);
147  virtual void removeAttributeMapping(const DtString& datatype);
148  virtual const DtString& attributeMapping(const DtString& attributeName) const;
149 
152  virtual bool modifyRepMapping(const DtString& datatype, const DtString& rep);
153 
155  virtual std::map<DtString,DtString>::iterator getRepMapList();
156  virtual std::map<DtString,DtString>::iterator getRepMapListEnd();
157 
158  //--- The following functions are used to convert objects to their representation ---
159 
169  virtual DtString getFedNodeStringRep(const DtDatatypeFedNode* currFedNode,
170  const void* value, int size, int& returnSize);
171  virtual DtString getStringRep(const DtString& datatypeName,
172  const void* value, int size, int& returnSize);
173  virtual DtString getStringRep(const DtOMTDatatypeNode& datatypeNode,
174  const void* value, int size, int& returnSize);
175 
187  virtual DtStringTree* createStringTreeRep(const DtDatatypeFedNode* currFedNode,
188  const void* value, int size, int& returnSize, unsigned int currentOffset = 0,
189  DtObjectHistory* = 0);
190  virtual DtStringTree* createStringTreeRep(const DtString& datatypeName,
191  const void* value, int size, int& returnSize, const DtOMTNode* omtNode = 0,
192  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
193  DtObjectHistory* = 0);
194  virtual DtStringTree* createStringTreeRep(const DtOMTDatatypeNode& datatypeNode,
195  const void* value, int size, int& returnSize,
196  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
197  DtObjectHistory* = 0);
198 
203  virtual void getValueFromStringRep(const DtString& datatypeName, const DtString& stringRep,
204  std::vector<char>& result);
205 
209  virtual DtString convertStringTreeToString (DtStringTree*, const DtString& delimiter);
210 
211 
212  //--- The following functions are used to gather extra information about a datatype ---
213 
214  //Find what type of datatype an item is (Simple, Enum, Complex, etc)
215  virtual DtDatatypeEnum getDatatypeEnum(const DtString& datatypeName);
216 
218  // and FOM have been made to mappings
219  virtual bool isDirty();
220 
222  virtual void setIsDirty(bool makeDirty);
223 
224 protected:
225 
228 
230  DtDatatypeManager& operator=(const DtDatatypeManager& rhs);
231 
232  virtual void checkOrphanMappings();
233  virtual void checkObjOrphans(DtObjectClassFedNode* objClass);
234  virtual void checkIntOrphans(DtInteractionClassFedNode* intClass);
235 
237  virtual void getDefaultRep(const void* value, int size, int& returnSize, DtString& returnString);
238  virtual void getDatatypeRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
239  virtual void getAttributeRep(const DtString& attributeName, const void* value, int size, int& returnSize, DtString& returnString);
240  virtual void getEnumRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
241  virtual void getVariantRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
242  virtual void getArrayRepBySize(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
243  virtual void getArrayRepByCount(DtArrayDatatypeNode* arrayNode, const void* value, int size, int& returnSize, DtString& returnString);
244  virtual void getArrayRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
245 
247  virtual void getValueFromDatatypeRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
248  virtual void getValueFromArrayRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
249  virtual void getValueFromComplexRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
250  virtual void getValueFromFixedRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
251  virtual void getValueFromEnumRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
252 
254  virtual void createComplexTreeRep(
255  const DtString& datatypeName, const void* value, int size,
256  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
257  unsigned int currentOffset = 0,
258  DtObjectHistory* = 0);
259  virtual void createArrayTreeRep(
260  const DtString& datatypeName, const void* value, int size,
261  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
262  unsigned int currentOffset = 0,
263  DtObjectHistory* = 0);
264  virtual void createDefinedTreeRep(
265  const DtString& datatypeName, const void* value, int size,
266  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
267  unsigned int currentOffset = 0,
268  DtObjectHistory* = 0);
269  virtual void createVariantTreeRep(
270  const DtString& datatypeName, const void* value, int size,
271  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
272  unsigned int currentOffset = 0,
273  DtObjectHistory* = 0);
274  virtual void createFixedTreeRep(
275  const DtString& datatypeName, const void* value, int size,
276  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
277  unsigned int currentOffset = 0,
278  DtObjectHistory* = 0);
279 
281  virtual void processMappings(DtlObjPtr& ptr);
282 
286  virtual int getComplexDatatypeCount(DtComplexComponentNode* compNode, DtComplexDatatypeNode* parentNode,
287  const void* value, int valueSize, int alreadyRead,
288  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
289 
290  virtual int getArrayDatatypeCount(DtArrayDatatypeNode* arrayNode,
291  const void* value, int valueSize,
292  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
293 
295  virtual int byteAlignment(const DtString& datatype);
296  virtual int byteAlignmentFromRep(const DtString& datatype);
297  virtual int byteAlignmentFixed(const DtString& datatype);
298  virtual int byteAlignmentArray(const DtString& datatype);
299  virtual int byteAlignmentVariant(const DtString& datatype);
300  virtual int byteAlignmentComplex(const DtString& datatype);
301  virtual int implicitPadding(unsigned int currentOffset, const DtString& datatypeName);
302 
303 protected:
304 
306  std::map<DtString,DtDatatypeEnum> myDatatypeTypeMap;
307 
308  typedef std::map<DtString,DtString> DatatypeNameRepNameMap;
311  std::set<DtString> myRemappedDatatypes;
312 
313 
314  typedef std::map<DtString,DtDatatypeRep*> RepNamePtrMap;
316 
318  std::map<DtString,DtString> myDelimiterMap;
321 
323  std::map<DtString,bool> myArrayBracketMap;
324 
326 
327  bool myDirty;
328 
331 
332 
333 };
334 
335 
336 
337 
338 
DatatypeNameRepNameMap myAttributeToRepMap
Definition: datatypeManager.h:310
std::map< DtString, bool > myArrayBracketMap
Definition: datatypeManager.h:323
An Enumeration that maps an integer to a string value.
Definition: datatypeManager.h:48
std::map< DtString, DtDatatypeRep * > RepNamePtrMap
Definition: datatypeManager.h:314
A datatype that could be of a different type at runtime.
Definition: datatypeManager.h:51
A collection of different data types in one.
Definition: datatypeManager.h:49
DtString myStartWrapper
Definition: datatypeManager.h:319
This class handles the conversion between a byte stream and an English readable view of the data in a...
Definition: datatypeManager.h:41
#define DT_DLL_OMTREADER
Definition: omtReader.h:23
A Datatype Representation is a class that can take a group of bytes and display them in a certain typ...
Definition: datatypeRep.h:20
std::set< DtString > myRemappedDatatypes
Definition: datatypeManager.h:311
A collection of the same datatype in one.
Definition: datatypeManager.h:50
std::map< DtString, DtString > DatatypeNameRepNameMap
Definition: datatypeManager.h:308
DtString myEndWrapper
Definition: datatypeManager.h:320
defines an object class inside our Fed Tree
Definition: interactionClassFedNode.h:25
represents a node in an OMT tree.
Definition: omtNode.h:16
Definition: objectHistory.h:36
DtOMTTree * myOMTTree
Definition: datatypeManager.h:305
DtString myDefaultArrayBracket
Definition: datatypeManager.h:322
bool myUseImplicitPadding
Definition: datatypeManager.h:325
std::map< DtString, DtDatatypeEnum > myDatatypeTypeMap
Definition: datatypeManager.h:306
bool myDirty
Definition: datatypeManager.h:327
Definition: complexComponentNode.h:17
static DtDatatypeManager * theDatatypeManager
Protected member data.
Definition: datatypeManager.h:330
defines an object class inside our Fed Tree
Definition: objectClassFedNode.h:30
A fixed set of a collection of different data types.
Definition: datatypeManager.h:52
virtual DtOMTTree * omtTree()
Definition: datatypeManager.h:69
Basically a struct with a destructor, a string tree is a collection of indexed strings used to hold m...
Definition: stringTree.h:16
represents a node in an OMT tree containing a datatype description.
Definition: omtDatatypeNode.h:14
Represents an attribute inside a object class.
Definition: datatypeFedNode.h:21
DtDatatypeEnum
Definition: datatypeManager.h:45
Definition: arrayDatatypeNode.h:15
DtString myDefaultDelimiter
Definition: datatypeManager.h:317
Complex datatypes are a OMT 1.3 construct that merges arrays, variants, and fixed into one monstrous ...
Definition: complexDatatypeNode.h:23
A tree using the an OMT File information.
Definition: omtTree.h:58
DatatypeNameRepNameMap myDatatypeToRepMap
Definition: datatypeManager.h:309
RepNamePtrMap myNameToRepMap
Definition: datatypeManager.h:315
std::map< DtString, DtString > myDelimiterMap
Definition: datatypeManager.h:318
A basic datatype such as int or bool.
Definition: datatypeManager.h:47

Document ID: Generated on Thu Jul 14 15:45:33 EDT 2022 from SVN revision 244827
Copyright © 2021 MAK Technologies. All Rights Reserved (www.mak.com)