VR-Link API Documentation for HLA 4
 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-2025 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 #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,
58  DATATYPE_MAX
59  };
60 
62  static DtDatatypeManager* defaultInstance();
63 
66 
68  virtual ~DtDatatypeManager();
69 
72  virtual void initOMTData(DtOMTTree* omtTree);
73 
74  virtual DtOMTTree* omtTree() {return myOMTTree;};
75 
77  virtual void setImplicitPadding(bool enableImplicitPadding);
78  virtual bool isImplicitPaddingEnabled() const;
79 
80 //--- The following functions are used to setup the representation list ---
81 
83  virtual void fillDefaultDatatypeRepList();
84 
85  //Fill in more representations manually. Note that this datatype
86  //now gets owned by this function and takes care of deleting it.
87  virtual void addDatatypeRep(DtDatatypeRep*);
88 
89  //This is a special type of Mapping
90  virtual void addDefinedDatatypeRep(DtDatatypeRep*);
91 
92  //Returns the class representation of a datatype. This only works with simple
93  //Reps since more complicated datatypes build the string out of multiple representations.
94  virtual DtDatatypeRep* getSimpleDatatypeRep(const DtString& datatypeName);
95 
97  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapList();
98  virtual std::map<DtString,DtDatatypeRep*>::iterator getNameRepMapListEnd();
99 
100 
101  //--- The following functions are used to setup the delimiter mappings ---
102 
104  // For example, if the delimiter is :. Then a location(x,y,z) would look
106  virtual void addDelimiterMap(const DtString& datatype, const DtString& delimiter);
107  virtual void removeDelimiterMap(const DtString& datatype);
108 
110  virtual void setDefaultDelimiter(const DtString& str);
111 
114  virtual void setArrayWrapper(const DtString& start, const DtString& end);
115 
117  virtual DtString getDelimiterMap(const DtString& datatypeName, bool* isAvailable = 0);
118  virtual std::map<DtString,DtString>::iterator getDelimiterList();
119  virtual std::map<DtString,DtString>::iterator getDelimiterListEnd();
120 
121  //--- The following functions are used to setup the array bracket mappings ---
122 
126  virtual void addArrayBracketMap(const DtString& datatype, bool valueIsBracketed);
127  virtual void removeArrayBracketMap(const DtString& datatype);
128 
130  virtual void setDefaultArrayBracket(bool valueIsBracketed);
131 
133  virtual bool getArrayBracketMap(const DtString& datatypeName, bool* isAvailable = 0);
134  virtual std::map<DtString,bool>::iterator getArrayBracketList();
135  virtual std::map<DtString,bool>::iterator getArrayBracketListEnd();
136 
137  //--- The following functions are used to setup the representation to datatype mappings ---
138 
139 
141  virtual void readFile(DtString str);
142 
144  virtual void writeFile(DtString str);
145 
146  //Add a mapping between a datatype and a representation
147  virtual void addRepMapping(const DtString& datatype, const DtString& rep);
148  virtual void removeRepMapping(const DtString& datatype);
149 
150  //Add a mapping between an attribute Name and a representation
151  virtual void addAttributeMapping(const DtString& datatype, const DtString& rep);
152  virtual void removeAttributeMapping(const DtString& datatype);
153  virtual const DtString& attributeMapping(const DtString& attributeName) const;
154 
157  virtual bool modifyRepMapping(const DtString& datatype, const DtString& rep);
158 
160  virtual std::map<DtString,DtString>::iterator getRepMapList();
161  virtual std::map<DtString,DtString>::iterator getRepMapListEnd();
162 
163  //--- The following functions are used to convert objects to their representation ---
164 
174  virtual DtString getFedNodeStringRep(const DtDatatypeFedNode* currFedNode,
175  const void* value, int size, int& returnSize);
176  virtual DtString getStringRep(const DtString& datatypeName,
177  const void* value, int size, int& returnSize);
178  virtual DtString getStringRep(const DtOMTDatatypeNode& datatypeNode,
179  const void* value, int size, int& returnSize);
180 
192  virtual DtStringTree* createStringTreeRep(const DtDatatypeFedNode* currFedNode,
193  const void* value, int size, int& returnSize, unsigned int currentOffset = 0,
194  DtObjectHistory* = 0);
195  virtual DtStringTree* createStringTreeRep(const DtString& datatypeName,
196  const void* value, int size, int& returnSize, const DtOMTNode* omtNode = 0,
197  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
198  DtObjectHistory* = 0);
199  virtual DtStringTree* createStringTreeRep(const DtOMTDatatypeNode& datatypeNode,
200  const void* value, int size, int& returnSize,
201  unsigned int currentOffset = 0, DtStringTree* strParentTree = 0,
202  DtObjectHistory* = 0);
203 
208  virtual void getValueFromStringRep(const DtString& datatypeName, const DtString& stringRep,
209  std::vector<char>& result);
210 
214  virtual DtString convertStringTreeToString (DtStringTree*, const DtString& delimiter);
215 
216 
217  //--- The following functions are used to gather extra information about a datatype ---
218 
219  //Find what type of datatype an item is (Simple, Enum, Complex, etc)
220  virtual DtDatatypeEnum getDatatypeEnum(const DtString& datatypeName);
221 
223  // and FOM have been made to mappings
224  virtual bool isDirty();
225 
227  virtual void setIsDirty(bool makeDirty);
228 
229 protected:
230 
233 
235  DtDatatypeManager& operator=(const DtDatatypeManager& rhs);
236 
238  virtual DtDatatypeRep* repNameToDatatypeRep(DtString const& name);
239 
242  virtual bool getRepresentationName(DtString const& datatypeName, DtString& repName);
243 
245 
246  virtual void checkOrphanMappings();
247  virtual void checkObjOrphans(DtObjectClassFedNode* objClass);
248  virtual void checkIntOrphans(DtInteractionClassFedNode* intClass);
250 
252  virtual void getDefaultRep(const void* value, int size, int& returnSize, DtString& returnString);
253  virtual void getDatatypeRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
254  virtual void getAttributeRep(const DtString& attributeName, const void* value, int size, int& returnSize, DtString& returnString);
255  virtual void getEnumRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
256  virtual void getVariantRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
257  virtual void getArrayRepBySize(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
258  virtual void getArrayRepByCount(DtArrayDatatypeNode* arrayNode, const void* value, int size, int& returnSize, DtString& returnString);
259  virtual void getArrayRep(const DtString& datatypeName, const void* value, int size, int& returnSize, DtString& returnString);
260 
262  virtual void getValueFromDatatypeRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
263  virtual void getValueFromArrayRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
264  virtual void getValueFromComplexRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
265  virtual void getValueFromFixedRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
266  virtual void getValueFromEnumRep(const DtString& datatypeName, const DtString& stringRep, std::vector<char>& result);
267 
269  virtual void createComplexTreeRep(
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 createArrayTreeRep(
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  virtual void createDefinedTreeRep(
280  const DtString& datatypeName, const void* value, int size,
281  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
282  unsigned int currentOffset = 0,
283  DtObjectHistory* = 0);
284  virtual void createVariantTreeRep(
285  const DtString& datatypeName, const void* value, int size,
286  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
287  unsigned int currentOffset = 0,
288  DtObjectHistory* = 0);
289  virtual void createFixedTreeRep(
290  const DtString& datatypeName, const void* value, int size,
291  int& returnSize, DtStringTree* strTree, DtStringTree* strParentTree = 0,
292  unsigned int currentOffset = 0,
293  DtObjectHistory* = 0);
294 
296  virtual void processMappings(DtlObjPtr& ptr);
297 
301  virtual int getComplexDatatypeCount(DtComplexComponentNode* compNode, DtComplexDatatypeNode* parentNode,
302  const void* value, int valueSize, int alreadyRead,
303  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
304 
305  virtual int getArrayDatatypeCount(DtArrayDatatypeNode* arrayNode,
306  const void* value, int valueSize,
307  const DtStringTree* strTree = 0, const DtStringTree* parentTree = 0);
308 
310  virtual int byteAlignment(const DtString& datatype);
311  virtual int byteAlignmentFromRep(const DtString& datatype);
312  virtual int byteAlignmentFixed(const DtString& datatype);
313  virtual int byteAlignmentArray(const DtString& datatype);
314  virtual int byteAlignmentVariant(const DtString& datatype);
315  virtual int byteAlignmentComplex(const DtString& datatype);
316  virtual int implicitPadding(unsigned int currentOffset, const DtString& datatypeName);
317 
318 protected:
319 
321  std::map<DtString,DtDatatypeEnum> myDatatypeTypeMap;
322 
323  typedef std::map<DtString,DtString> DatatypeNameRepNameMap;
326  std::set<DtString> myRemappedDatatypes;
327 
328 
329  typedef std::map<DtString,DtDatatypeRep*> RepNamePtrMap;
331 
333  std::map<DtString,DtString> myDelimiterMap;
336 
338  std::map<DtString,bool> myArrayBracketMap;
339 
341 
342  bool myDirty;
343  std::set<DtString> myUnknownDatatypes;
344 
347 
348 
349 };
350 
351 
352 
353 #ifdef DtUSE_UTILITIES_NAMESPACE
354 } // end of namespace DtUSE_UTILITIES_NAMESPACE
355 #endif
DatatypeNameRepNameMap myAttributeToRepMap
Definition: datatypeManager.h:325
An INTERNALLY defined set of different data types.
Definition: datatypeManager.h:57
std::map< DtString, bool > myArrayBracketMap
Definition: datatypeManager.h:338
An Enumeration that maps an integer to a string value.
Definition: datatypeManager.h:52
std::map< DtString, DtDatatypeRep * > RepNamePtrMap
Definition: datatypeManager.h:329
A datatype that could be of a different type at runtime.
Definition: datatypeManager.h:55
A collection of different data types in one.
Definition: datatypeManager.h:53
Contains the DtString class declaration.
DtString myStartWrapper
Definition: datatypeManager.h:334
This class handles the conversion between a byte stream and an English readable view of the data in a...
Definition: datatypeManager.h:45
#define DT_DLL_OMTREADER
Definition: omtReader.h:27
A Datatype Representation is a class that can take a group of bytes and display them in a certain typ...
Definition: datatypeRep.h:24
std::set< DtString > myRemappedDatatypes
Definition: datatypeManager.h:326
Definition: mtl.h:70
A collection of the same datatype in one.
Definition: datatypeManager.h:54
std::map< DtString, DtString > DatatypeNameRepNameMap
Definition: datatypeManager.h:323
DtString myEndWrapper
Definition: datatypeManager.h:335
defines an object class inside our Fed Tree
Definition: interactionClassFedNode.h:31
represents a node in an OMT tree.
Definition: omtNode.h:20
Definition: objectHistory.h:40
DtOMTTree * myOMTTree
Definition: datatypeManager.h:320
DtString myDefaultArrayBracket
Definition: datatypeManager.h:337
bool myUseImplicitPadding
Definition: datatypeManager.h:340
std::map< DtString, DtDatatypeEnum > myDatatypeTypeMap
Definition: datatypeManager.h:321
bool myDirty
Definition: datatypeManager.h:342
Definition: complexComponentNode.h:21
static DtDatatypeManager * theDatatypeManager
Protected member data.
Definition: datatypeManager.h:346
defines an object class inside our Fed Tree
Definition: objectClassFedNode.h:36
A fixed set of a collection of different data types.
Definition: datatypeManager.h:56
virtual DtOMTTree * omtTree()
Definition: datatypeManager.h:74
Basically a struct with a destructor, a string tree is a collection of indexed strings used to hold m...
Definition: stringTree.h:20
represents a node in an OMT tree containing a datatype description.
Definition: omtDatatypeNode.h:18
Represents an attribute inside a object class.
Definition: datatypeFedNode.h:25
DtDatatypeEnum
Definition: datatypeManager.h:49
This file contains common methods for parsing mtl files.
Definition: arrayDatatypeNode.h:19
DtString myDefaultDelimiter
Definition: datatypeManager.h:332
Complex datatypes are a OMT 1.3 construct that merges arrays, variants, and fixed into one monstrous ...
Definition: complexDatatypeNode.h:27
A tree using the an OMT File information.
Definition: omtTree.h:64
std::set< DtString > myUnknownDatatypes
Definition: datatypeManager.h:343
DatatypeNameRepNameMap myDatatypeToRepMap
Definition: datatypeManager.h:324
Instances of DtString are used to represent strings.
Definition: vlString.h:36
RepNamePtrMap myNameToRepMap
Definition: datatypeManager.h:330
std::map< DtString, DtString > myDelimiterMap
Definition: datatypeManager.h:333
A basic datatype such as int or bool.
Definition: datatypeManager.h:51
This file declares DtMtlEnvironment.

Document ID: Generated on Thu Oct 16 00:12:25 EDT 2025 from SVN revision 280738
Copyright © 1992-2025 MAK Technologies. All Rights Reserved (www.mak.com)