MAK Data Logger API Documentation for DIS
 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-2024 MAK Technologies, Inc
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,
54  DATATYPE_MAX
55  };
56 
58  static DtDatatypeManager* defaultInstance();
59 
62 
64  virtual ~DtDatatypeManager();
65 
68  virtual void initOMTData(DtOMTTree* omtTree);
69 
70  virtual DtOMTTree* omtTree() {return myOMTTree;};
71 
73  virtual void setImplicitPadding(bool enableImplicitPadding);
74  virtual bool isImplicitPaddingEnabled() const;
75 
76 //--- The following functions are used to setup the representation list ---
77 
79  virtual void fillDefaultDatatypeRepList();
80 
81  //Fill in more representations manually. Note that this datatype
82  //now gets owned by this function and takes care of deleting it.
83  virtual void addDatatypeRep(DtDatatypeRep*);
84 
85  //This is a special type of Mapping
86  virtual void addDefinedDatatypeRep(DtDatatypeRep*);
87 
88  //Returns the class representation of a datatype. This only works with simple
89  //Reps since more complicated datatypes build the string out of multiple representations.
90  virtual DtDatatypeRep* getSimpleDatatypeRep(const DtString& datatypeName);
91 
93  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapList();
94  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapListEnd();
95 
96 
97  //--- The following functions are used to setup the delimiter mappings ---
98 
100  // For example, if the delimiter is :. Then a location(x,y,z) would look
102  virtual void addDelimiterMap(const DtString& datatype, const DtString& delimiter);
103  virtual void removeDelimiterMap(const DtString& datatype);
104 
106  virtual void setDefaultDelimiter(const DtString& str);
107 
110  virtual void setArrayWrapper(const DtString& start, const DtString& end);
111 
113  virtual DtString getDelimiterMap(const DtString& datatypeName, bool* isAvailable = 0);
114  virtual std::map<DtString,DtString>::iterator getDelimiterList();
115  virtual std::map<DtString,DtString>::iterator getDelimiterListEnd();
116 
117  //--- The following functions are used to setup the array bracket mappings ---
118 
122  virtual void addArrayBracketMap(const DtString& datatype, bool valueIsBracketed);
123  virtual void removeArrayBracketMap(const DtString& datatype);
124 
126  virtual void setDefaultArrayBracket(bool valueIsBracketed);
127 
129  virtual bool getArrayBracketMap(const DtString& datatypeName, bool* isAvailable = 0);
130  virtual std::map<DtString,bool>::iterator getArrayBracketList();
131  virtual std::map<DtString,bool>::iterator getArrayBracketListEnd();
132 
133  //--- The following functions are used to setup the representation to datatype mappings ---
134 
135 
137  virtual void readFile(DtString str);
138 
140  virtual void writeFile(DtString str);
141 
142  //Add a mapping between a datatype and a representation
143  virtual void addRepMapping(const DtString& datatype, const DtString& rep);
144  virtual void removeRepMapping(const DtString& datatype);
145 
146  //Add a mapping between an attribute Name and a representation
147  virtual void addAttributeMapping(const DtString& datatype, const DtString& rep);
148  virtual void removeAttributeMapping(const DtString& datatype);
149  virtual const DtString& attributeMapping(const DtString& attributeName) const;
150 
153  virtual bool modifyRepMapping(const DtString& datatype, const DtString& rep);
154 
156  virtual std::map<DtString,DtString>::iterator getRepMapList();
157  virtual std::map<DtString,DtString>::iterator getRepMapListEnd();
158 
159  //--- The following functions are used to convert objects to their representation ---
160 
170  virtual DtString getFedNodeStringRep(const DtDatatypeFedNode* currFedNode,
171  const void* value, int size, int& returnSize);
172  virtual DtString getStringRep(const DtString& datatypeName,
173  const void* value, int size, int& returnSize);
174  virtual DtString getStringRep(const DtOMTDatatypeNode& datatypeNode,
175  const void* value, int size, int& returnSize);
176 
188  virtual DtStringTree* createStringTreeRep(const DtDatatypeFedNode* currFedNode,
189  const void* value, int size, int& returnSize, unsigned int currentOffset = 0,
190  DtObjectHistory* = 0);
191  virtual DtStringTree* createStringTreeRep(const DtString& datatypeName,
192  const void* value, int size, int& returnSize, const DtOMTNode* omtNode = 0,
193  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
194  DtObjectHistory* = 0);
195  virtual DtStringTree* createStringTreeRep(const DtOMTDatatypeNode& datatypeNode,
196  const void* value, int size, int& returnSize,
197  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
198  DtObjectHistory* = 0);
199 
204  virtual void getValueFromStringRep(const DtString& datatypeName, const DtString& stringRep,
205  std::vector<char>& result);
206 
210  virtual DtString convertStringTreeToString (DtStringTree*, const DtString& delimiter);
211 
212 
213  //--- The following functions are used to gather extra information about a datatype ---
214 
215  //Find what type of datatype an item is (Simple, Enum, Complex, etc)
216  virtual DtDatatypeEnum getDatatypeEnum(const DtString& datatypeName);
217 
219  // and FOM have been made to mappings
220  virtual bool isDirty();
221 
223  virtual void setIsDirty(bool makeDirty);
224 
225 protected:
226 
229 
231  DtDatatypeManager& operator=(const DtDatatypeManager& rhs);
232 
234  virtual DtDatatypeRep* repNameToDatatypeRep(DtString const& name);
235 
238  virtual bool getRepresentationName(DtString const& datatypeName, DtString& repName);
239 
241 
242  virtual void checkOrphanMappings();
243  virtual void checkObjOrphans(DtObjectClassFedNode* objClass);
244  virtual void checkIntOrphans(DtInteractionClassFedNode* intClass);
246 
248  virtual void getDefaultRep(const void* value, int size, int& returnSize, DtString& returnString);
249  virtual void getDatatypeRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
250  virtual void getAttributeRep(const DtString& attributeName, const void* value, int size, int& returnSize, DtString& returnString);
251  virtual void getEnumRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
252  virtual void getVariantRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
253  virtual void getArrayRepBySize(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
254  virtual void getArrayRepByCount(DtArrayDatatypeNode* arrayNode, const void* value, int size, int& returnSize, DtString& returnString);
255  virtual void getArrayRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
256 
258  virtual void getValueFromDatatypeRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
259  virtual void getValueFromArrayRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
260  virtual void getValueFromComplexRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
261  virtual void getValueFromFixedRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
262  virtual void getValueFromEnumRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
263 
265  virtual void createComplexTreeRep(
266  const DtString& datatypeName, const void* value, int size,
267  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
268  unsigned int currentOffset = 0,
269  DtObjectHistory* = 0);
270  virtual void createArrayTreeRep(
271  const DtString& datatypeName, const void* value, int size,
272  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
273  unsigned int currentOffset = 0,
274  DtObjectHistory* = 0);
275  virtual void createDefinedTreeRep(
276  const DtString& datatypeName, const void* value, int size,
277  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
278  unsigned int currentOffset = 0,
279  DtObjectHistory* = 0);
280  virtual void createVariantTreeRep(
281  const DtString& datatypeName, const void* value, int size,
282  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
283  unsigned int currentOffset = 0,
284  DtObjectHistory* = 0);
285  virtual void createFixedTreeRep(
286  const DtString& datatypeName, const void* value, int size,
287  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
288  unsigned int currentOffset = 0,
289  DtObjectHistory* = 0);
290 
292  virtual void processMappings(DtlObjPtr& ptr);
293 
297  virtual int getComplexDatatypeCount(DtComplexComponentNode* compNode, DtComplexDatatypeNode* parentNode,
298  const void* value, int valueSize, int alreadyRead,
299  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
300 
301  virtual int getArrayDatatypeCount(DtArrayDatatypeNode* arrayNode,
302  const void* value, int valueSize,
303  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
304 
306  virtual int byteAlignment(const DtString& datatype);
307  virtual int byteAlignmentFromRep(const DtString& datatype);
308  virtual int byteAlignmentFixed(const DtString& datatype);
309  virtual int byteAlignmentArray(const DtString& datatype);
310  virtual int byteAlignmentVariant(const DtString& datatype);
311  virtual int byteAlignmentComplex(const DtString& datatype);
312  virtual int implicitPadding(unsigned int currentOffset, const DtString& datatypeName);
313 
314 protected:
315 
317  std::map<DtString,DtDatatypeEnum> myDatatypeTypeMap;
318 
319  typedef std::map<DtString,DtString> DatatypeNameRepNameMap;
322  std::set<DtString> myRemappedDatatypes;
323 
324 
325  typedef std::map<DtString,DtDatatypeRep*> RepNamePtrMap;
327 
329  std::map<DtString,DtString> myDelimiterMap;
330  DtString myStartWrapper;
331  DtString myEndWrapper;
332 
334  std::map<DtString,bool> myArrayBracketMap;
335 
337 
338  bool myDirty;
339  std::set<DtString> myUnknownDatatypes;
340 
343 
344 
345 };
346 
347 
348 
349 
350 
DatatypeNameRepNameMap myAttributeToRepMap
Definition: datatypeManager.h:321
An INTERNALLY defined set of different data types.
Definition: datatypeManager.h:53
std::map< DtString, bool > myArrayBracketMap
Definition: datatypeManager.h:334
An Enumeration that maps an integer to a string value.
Definition: datatypeManager.h:48
std::map< DtString, DtDatatypeRep * > RepNamePtrMap
Definition: datatypeManager.h:325
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:330
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:322
A collection of the same datatype in one.
Definition: datatypeManager.h:50
std::map< DtString, DtString > DatatypeNameRepNameMap
Definition: datatypeManager.h:319
DtString myEndWrapper
Definition: datatypeManager.h:331
defines an object class inside our Fed Tree
Definition: interactionClassFedNode.h:25
represents a node in an OMT tree.
Definition: omtNode.h:16
DtOMTTree * myOMTTree
Definition: datatypeManager.h:316
DtString myDefaultArrayBracket
Definition: datatypeManager.h:333
bool myUseImplicitPadding
Definition: datatypeManager.h:336
std::map< DtString, DtDatatypeEnum > myDatatypeTypeMap
Definition: datatypeManager.h:317
bool myDirty
Definition: datatypeManager.h:338
Definition: complexComponentNode.h:17
static DtDatatypeManager * theDatatypeManager
Protected member data.
Definition: datatypeManager.h:342
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:70
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:328
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
std::set< DtString > myUnknownDatatypes
Definition: datatypeManager.h:339
DatatypeNameRepNameMap myDatatypeToRepMap
Definition: datatypeManager.h:320
RepNamePtrMap myNameToRepMap
Definition: datatypeManager.h:326
std::map< DtString, DtString > myDelimiterMap
Definition: datatypeManager.h:329
A basic datatype such as int or bool.
Definition: datatypeManager.h:47

Document ID: Generated on Thu Oct 3 15:35:11 EDT 2024 from SVN revision 270037
Copyright © 2024 MAK Technologies. All Rights Reserved (www.mak.com)