VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfXmlUtils.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2013 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 
6 #pragma once
7 
10 #include "mtl/environment.h"
11 #include "mtl/envXmlWriter.h"
18 #include "extMtl/extDtcRead.h"
19 #include "vlpi/entityType.h"
26 #include "vrfutil/formationTable.h"
28 #include "vrfutil/soilList.h"
29 #include "vrfutil/soilFactors.h"
30 
31 #include "vlutil/vlStringUtil.h"
32 #include "vlutil/vlFilename.h"
33 
34 #include <boost/function.hpp>
35 #include <boost/lexical_cast.hpp>
36 
37 #include <iostream>
40 
42 {
43 public:
44  typedef std::list<DtEnvValueSP> DtEnvValueSPList;
45 
49 
52  static void getObjectElements(DtEnvironmentSP env, DtEnvValueSPList& objectNodes);
53 
54  static DtEnvValueSP addObjectElement(DtEnvironmentSP env, DtEntityType objType, DtEntityType matchType,
55  DtString platform, DtString parentFile = "");
56 
58  static DtEnvValueSP findObjectElementByMatchType(DtEnvironmentSP env, const DtEntityType& objType);
59  static DtEnvValueSP findObjectElementByObjectType(DtEnvironmentSP env, const DtEntityType& objType);
60 
64  static DtString getAttribute(DtEnvironmentSP env, const DtString& name,
65  DtEnvValueSP root);
66 
68  static bool hasAttribute(DtEnvironmentSP env, const DtString& name,
69  DtEnvValueSP root);
70 
71  static bool FindAndRemove(DtEnvironmentSP env, const DtString& nodeType, const DtString& paramName, DtEnvValueSP root);
72 
74  static void remove(DtEnvironmentSP, DtEnvValueSP);
75 
76 
77  //get a specific element in the hierarchy based on its first param name, e.g. "articulated-parts". Argument is a pointer to the simObject tag
78  static DtEnvValueSP getTagByAttribute(DtEnvironmentSP env, DtEnvValueSP simObjectNode, DtString attr);
79 
80  //get a specific system element in the hierarchy based on its systemName, e.g. "other-10". Argument is a pointer to the simObject tag
81  static DtEnvValueSP getSystemByAttribute(DtEnvironmentSP env, DtEnvValueSP simObjectNode, DtString sysName);
82 
84  static DtString getPlatform(DtEnvironmentSP env, DtEnvValueSP root)
85  {
87  }
88 
90  static DtString getParentFile(DtEnvironmentSP env, DtEnvValueSP root)
91  {
93  }
94 
95  static DtString GetObjectValue(DtEnvValueSP root)
96  {
97  return XmlBindingCharToMtl(root->value());
98  }
99 
100  static DtEnvValueSP AddElement(DtEnvironmentSP env, const DtString& type,
101  DtEnvValueSP root, const DtString& paramName = DtString::nullString())
102  {
103  FindAndRemove(env, type, paramName, root);
104  DtEnvValueSP newElement = env->addObject(type, type, root);
105  if (paramName != DtString::nullString())
106  {
107  env->addAttribute(vrfXml::ParamName, paramName, newElement);
108  }
109  return newElement;
110  }
111 
113  static DtEnvValueSP addbooleanElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, bool value)
114  {
115  DtEnvValueSP newElement = AddElement(env, DtXMLBooleanType, root, name);
116  newElement->setValue(value ? "True" : "False");
117  return newElement;
118  }
119 
121  static DtEnvValueSP addRealElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, double value)
122  {
123  DtEnvValueSP newElement = AddElement(env, DtXMLRealType, root, name);
124  newElement->setValue(DtString(value));
125  return newElement;
126  }
127 
129  static DtEnvValueSP addIntegerElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, double value)
130  {
131  DtEnvValueSP newElement = AddElement(env, DtXMLIntType, root, name);
132  newElement->setValue(DtString(value));
133  return newElement;
134  }
135 
136  static DtEnvValueSP addBooleanAttribute(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, bool value)
137  {
138  return env->addAttribute(name, value ? "True" : "False", root);
139  }
140 
142 
144  static DtEnvValueSP addStringElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, const DtString& value)
145  {
146  DtEnvValueSP newElement = AddElement(env, DtXMLStringType, root, name);
147  newElement->setValue(MtlBindingCharToXml(value));
148  return newElement;
149  }
150 
151  static DtEnvValueSP addStringAttribute(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, const DtString& value)
152  {
153  DtEnvValueSP attr = env->getAttribute(name, root);
154  if (attr.get())
155  {
156  attr->setValue(DtMtlBindingCharToXml(value));
157  return attr;
158  }
159 
160  return attr = env->addAttribute(name, DtMtlBindingCharToXml(value), root);
161  }
162 
163  static void setObjectType(DtEnvironmentSP env, DtEnvValueSP root, const DtEntityType& t)
164  {
165  addStringAttribute(env, root, DtXMLObjectTypeType, t.string());
166  }
167 
168  static void setMatchType(DtEnvironmentSP env, DtEnvValueSP root, const DtEntityType& t)
169  {
170  addStringAttribute(env, root, vrfXml::MatchType, t.string());
171  }
172 
173  static std::list<DtEntityType> additionalMatchTypes(DtEnvironmentSP env, DtEnvValueSP root);
174  static void setAdditionalMatchTypes(DtEnvironmentSP env, DtEnvValueSP root, const std::list<DtEntityType>& types);
175 
176  static void setPlatform(DtEnvironmentSP env, DtEnvValueSP root, const DtString& t)
177  {
178  addStringAttribute(env, root, vrfXml::Platform, t);
179  }
180 
181  static double getDoubleAttribute(DtEnvironmentSP env, DtString attributeName, DtEnvValueSP root)
182  {
183  return DtRwReal::getDouble(env, attributeName, root);
184  }
185 
188  static void ExtractBindings(DtVariableBindingsList& list,
189  const DtReaderWriter::SearchPaths& searchPaths, DtEnvironmentSP env, DtEnvValueSP node);
190 
192  static DtReaderWriter* CreateRwObject(const DtString& rwType)
193  {
194  return DtReaderWriter::factory()->createItem(rwType, DtString::nullString(), NULL);
195  }
196 
197  static void getOrientation(DtEnvironmentSP env,
198  const DtEnvValueSP parentNode, DtTaitBryan& orientation)
199  {
200  orientation.setPsi(getDoubleAttribute(env, DtXMLYaw, parentNode));
201  orientation.setTheta(getDoubleAttribute(env, DtXMLPitch, parentNode));
202  orientation.setPhi(getDoubleAttribute(env, DtXMLRoll, parentNode));
203  }
204 
205 
208  static void CreateVariableBinding(const DtString& bindingType,
209  const DtReaderWriter::SearchPaths& searchPaths, const DtVariableBindingsList& systemBindings,
210  DtRwVariableBindings& newBindings,
211  DtEnvironmentSP env, DtEnvValueSP binding);
212 
214  static void AddSystems(DtComponentSystemDescriptorList& list,
215  const DtVariableBindingsList& variableBindings, DtEnvironmentSP env,
216  DtEnvValueSP* root, const DtReaderWriter::SearchPaths& searchPaths);
217 
219  static void AddSystem(DtComponentSystemDescriptorList& list,
220  DtEnvironmentSP env, const DtVariableBindingsList& variableBindings,
221  DtEnvValueSP root, const DtReaderWriter::SearchPaths& searchPaths,
222  DtEnvironmentSP parentEnt = DtEnvironmentSP(), DtString systemName = "");
223 
224  static DtEnvironmentSP CreateVrfXmlEnvironment();
225 
228  static void ClearCache();
229 
231  static DtEnvironmentSP CreateDtXMLEnvironment(
232  const DtString& dataSourceFilename, bool showConsoleOutput = true);
233 
234  static DtEnvValueSP GetElementByType(DtEnvironmentSP env,
235  const DtString& type, DtEnvValueSP root);
236 
237  static DtEnvValueSPList GetElementsByType(DtEnvironmentSP env, const DtString& type,
238  DtEnvValueSP root);
239 
243 
245  {
246  return DtXmlBindingCharToMtl(str);
247  }
248 
250  {
251  return DtMtlBindingCharToXml(str);
252  }
253 
255 
257  static std::set<DtString> getVariableTypesFromEnvironment(DtEnvValueSP);
258 
259 
260  static DtEnvValueSP FindElementByParamName(DtEnvironmentSP env,
261  const DtString& nodeType, const DtString& attributeValue,
262  DtEnvValueSP envValue, bool traverseElements = true)
263  {
264  return FindElementByAttrValue(env, nodeType, DtXMLParamName,
265  attributeValue, envValue, traverseElements);
266  }
267 
268  static DtEnvValueSP FindElementBySystemName(DtEnvironmentSP env,
269  const DtString& nodeType, const DtString& attributeValue,
270  DtEnvValueSP envValue, bool traverseElements = true)
271  {
272  return FindElementByAttrValue(env, nodeType, vrfXml::SystemName,
273  attributeValue, envValue, traverseElements);
274 
275  }
276 
277  static DtEnvValueSP FindElementByAttrValue(DtEnvironmentSP env,
278  const DtString& nodeType, const DtString& attributeName,
279  const DtString& attributeValue, DtEnvValueSP envValue,
280  bool traverseElements = true);
281 
282  typedef std::list<DtString> StringVector;
283  typedef std::vector<DtReaderWriterRegistryData*> RegDataVector;
284 
285  typedef std::map<DtString, DtString> GroupMappings;
286 
287  static DtReaderWriterRegistryData* DeepFindRw(const DtString& keyword,
288  DtReaderWriterRegistry& registry, StringVector& path);
289 
290  static bool IsGroupedElement(const DtString& rwName,
291  const DtVrfXmlUtils::GroupMappings& groupedElements, DtString& groupName);
292 
293  static DtEnvValueSP FindGroupElement(DtEnvironmentSP env,
294  DtEnvValueSP parentNode, const DtString& groupName,
295  bool createIfMissing = true);
296 
297  static void FindAndRemoveGroupElement(DtEnvironmentSP env,
298  DtEnvValueSP parentNode, const DtString& groupName);
299 
300  static void IterateOverChildren(DtReaderWriterRegistry& oldRegistry,
301  DtReaderWriterRegistry& newRegistry, DtEnvironmentSP env,
302  DtEnvValueSP root, const GroupMappings& groupedElements, StringVector& path);
303 
306  static DtEnvironmentSP sortEnvironment(DtEnvironmentSP);
307 
308  static DtEnvValueSP CreateEnvNode(DtEnvironmentSP env, const DtString& name,
309  DtEnvValueSP parent, DtString bindingName = "")
310  {
311  //pass in name twice to prevent a "name" attribute from being added
312  DtEnvValueSP newObject = env->addObject(name, name, parent);
313  if (bindingName != "")
314  {
315  env->addAttribute(DtXMLParamName, bindingName, newObject);
316  }
317  return newObject;
318  }
319 
320  static void ExtractVariableBindings(DtRwVariableBindings* variableBindings,
321  DtEnvironmentSP env, DtEnvValueSP parentNode);
322 
323  static void ExtractSystem(DtReaderWriter* systemObject, DtEnvironmentSP env,
324  DtEnvValueSP simObjectNode);
325 
326  static void ExtractSystems(DtReaderWriterRegistry& oldRegistry,
327  DtEnvironmentSP env, DtEnvValueSP simObjectNode);
328 
330  static DtEnvironmentSP CreateVrfXmlEnvironment(
331  const DtString& dataSourceFilename, bool showConsoleOutput = true);
333 
335  static void addParentToXmlEnvironment(DtEnvironmentSP env, const DtString& dataSourceFilename,
336  const DtReaderWriter::SearchPaths, bool showConsoleOutput = true, std::vector<DtEnvValueSP>* tagsNotCopied = nullptr);
338 
339  //called internally to track the state across recursive calls. Use this version to ignore an explicit list of tags
340  static void addParentToXmlEnvironment(DtEnvironmentSP env, const DtString& dataSourceFilename,
341  const DtReaderWriter::SearchPaths, std::vector<DtString>& tagsAlreadySeen, bool showConsoleOutput = true, std::vector<DtEnvValueSP>* tagsNotCopied = nullptr);
342 
344  {
345  DtEnvXMLWriter writer(vrfXml::SimObject);
346 
347  writer.setIndentation(" ");
348  writer.writeFile(*env, filename);
349  }
350 
351  static DtString removeQuotes(const DtString& str)
352  {
353  return DtRemoveQuotes(str);
354  }
355 
357  static DtEntityType getObjectTypeAttr(DtEnvironmentSP env, const DtString& attributeName, DtEnvValueSP root)
358  {
359  DtString objType = getAttribute(env, attributeName, root);
360  DtRwEntityType ot;
361 
362  ot = objType.c_str();
363 
364  return ot;
365  }
366 
367  static DtEntityType getMatchType(DtEnvironmentSP env, DtEnvValueSP root,
368  bool fallbackOnObjectType = true)
369  {
370  DtEntityType matchType = getObjectTypeAttr(env, vrfXml::MatchType, root);
371  if (matchType == DtEntityType::nullType() && fallbackOnObjectType)
372  {
373  return DtRwEntityType::getFromObjectType(env, root);
374  }
375 
376  return matchType;
377  }
378 
379  static std::list<DtEntityType> getMatchTypes(DtEnvironmentSP env, DtEnvValueSP root,
380  bool fallbackOnObjectType = true);
381 
382  static DtEntityType getObjectType(DtEnvironmentSP env, DtEnvValueSP root,
383  bool fallbackOnMatchType = true)
384  {
385  DtEntityType objectType = getObjectTypeAttr(env, DtXMLObjectType, root);
386  if (objectType == DtEntityType::nullType() && fallbackOnMatchType)
387  {
388  return getMatchType(env, root, false);
389  }
390 
391  return objectType;
392  }
393 
394  static void getXYZAttrs(DtEnvironmentSP env, const DtEnvValueSP root,
395  double& x, double& y, double& z)
396  {
397  //attributes will either be named "x", "y", "z" or "right", "forward", "up"
398  if (hasAttribute(env, DtXMLBodyForward, root))
399  {
400  x = getDoubleAttribute(env, DtXMLBodyForward, root);
401  y = getDoubleAttribute(env, DtXMLBodyRight, root);
402  z = getDoubleAttribute(env, DtXMLBodyDown, root);
403  }
404  else
405  {
406  x = getDoubleAttribute(env, DtXMLVectorX, root);
407  y = getDoubleAttribute(env, DtXMLVectorY, root);
408  z = getDoubleAttribute(env, DtXMLVectorZ, root);
409  }
410  }
411 
412  typedef std::list<DtString> NameList;
413 
414  static void WriteVector(DtEnvironmentSP env, DtEnvValueSP root,
415  const DtRwVector* vec, bool writeAsBodyPosition)
416  {
417  if (writeAsBodyPosition)
418  {
419  env->addAttribute(DtXMLBodyForward, (*vec)[1], root);
420  env->addAttribute(DtXMLBodyRight, (*vec)[0], root);
421  env->addAttribute(DtXMLBodyDown, (*vec)[2], root);
422  }
423  else
424  {
425  env->addAttribute(DtXMLVectorX, (*vec)[0], root);
426  env->addAttribute(DtXMLVectorY, (*vec)[1], root);
427  env->addAttribute(DtXMLVectorZ, (*vec)[2], root);
428  }
429  }
430 
431  static DtString IntToHexString(const int& number)
432  {
433  char buff[8];
434  sprintf(buff, "%X", number);
435  DtString app("0X");
436  app += buff;
437  return app;
438  }
439 };
static DtEnvValueSP CreateEnvNode(DtEnvironmentSP env, const DtString &name, DtEnvValueSP parent, DtString bindingName="")
Definition: vrfXmlUtils.h:308
DT_DLL_readerWriter DtString DtXmlBindingCharToMtl(const DtString &str)
Can&#39;t use &#39;$&#39; for variables. so where we would use it, as in filenames with variables, it will be replaced with &#39;@&#39;.
const char DtXMLVectorZ[]
Definition: rwTypes.h:78
static DtString getParentFile(DtEnvironmentSP env, DtEnvValueSP root)
Gets parent file attribute from current Node.
Definition: vrfXmlUtils.h:90
static void WriteXML(DtEnvironmentSP env, DtString filename)
Definition: vrfXmlUtils.h:343
Definition: vrfXmlUtils.h:41
static DtEntityType getObjectTypeAttr(DtEnvironmentSP env, const DtString &attributeName, DtEnvValueSP root)
Gets objecttype attribute from current Node.
Definition: vrfXmlUtils.h:357
static const char * Platform
Definition: vrfXmlTypes.h:44
const char DtXMLStringType[]
Definition: rwTypes.h:50
static DtString getPlatform(DtEnvironmentSP env, DtEnvValueSP root)
Gets platform attribute from current Node.
Definition: vrfXmlUtils.h:84
static double getDoubleAttribute(DtEnvironmentSP env, DtString attributeName, DtEnvValueSP root)
Definition: vrfXmlUtils.h:181
Definition: readerWriterRegistryData.h:25
#define DT_DLL_vrfobjparam
This file is used to determine how to build.
Definition: vrfobjparamDefines.h:28
const char DtXMLRoll[]
Definition: vrfRwTypes.h:320
static void getOrientation(DtEnvironmentSP env, const DtEnvValueSP parentNode, DtTaitBryan &orientation)
Definition: vrfXmlUtils.h:197
static DtEntityType getMatchType(DtEnvironmentSP env, DtEnvValueSP root, bool fallbackOnObjectType=true)
Definition: vrfXmlUtils.h:367
const char DtXMLIntType[]
Definition: rwTypes.h:23
DT_DLL_readerWriter DtString DtRemoveQuotes(const DtString &str)
List of DtComponentSystemDescriptor instances.
Definition: componentSystemDescriptorList.h:20
std::list< DtString > NameList
Definition: vrfXmlUtils.h:412
std::list< DtString > StringVector
Definition: vrfXmlUtils.h:282
static const char * SimObject
Definition: vrfXmlTypes.h:52
Definition: readerWriter.h:85
static DtEnvValueSP addRealElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, double value)
Adds a new real type to the given root and returns the new value.
Definition: vrfXmlUtils.h:121
const char DtXMLRealType[]
Definition: rwTypes.h:36
Definition: readerWriterRegistry.h:39
static void getXYZAttrs(DtEnvironmentSP env, const DtEnvValueSP root, double &x, double &y, double &z)
Definition: vrfXmlUtils.h:394
static const char * MatchType
Definition: vrfXmlTypes.h:68
static DtEnvValueSP addBooleanAttribute(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, bool value)
Definition: vrfXmlUtils.h:136
static DtReaderWriter * CreateRwObject(const DtString &rwType)
Creates an RW object given the type.
Definition: vrfXmlUtils.h:192
const char DtXMLBodyForward[]
Definition: rwTypes.h:79
static DtEnvValueSP addStringElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, const DtString &value)
Convenience function.
Definition: vrfXmlUtils.h:144
static DtString GetObjectValue(DtEnvValueSP root)
Definition: vrfXmlUtils.h:95
static DtString IntToHexString(const int &number)
Definition: vrfXmlUtils.h:431
static DtString MtlBindingCharToXml(const DtString &str)
Can&#39;t use &#39;$&#39; for variables. so where we would use it, as in filenames with variables, it will be replaced with &#39;@&#39;.
Definition: vrfXmlUtils.h:249
ReaderWriter object that maintains a list of reader-writer variable bindings. It keeps a list of name...
Definition: rwVariableBindings.h:27
Definition: rwVector.h:23
static DtReaderWriterFactory * factory()
static const char * ParentFile
Definition: vrfXmlTypes.h:48
const char DtXMLBooleanType[]
Definition: rwTypes.h:18
static void setObjectType(DtEnvironmentSP env, DtEnvValueSP root, const DtEntityType &t)
Definition: vrfXmlUtils.h:163
std::list< const DtRwVariableBindings * > DtVariableBindingsList
Definition: readerWriterRegistry.h:29
const char DtXMLPitch[]
Definition: vrfRwTypes.h:319
std::vector< DtFilename > SearchPaths
Definition: readerWriter.h:92
static DtEnvValueSP addIntegerElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, double value)
Adds a new integer type to the given root and returns the new value.
Definition: vrfXmlUtils.h:129
static DtEnvValueSP addbooleanElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, bool value)
Adds a new boolean type to the given root and returns the new value.
Definition: vrfXmlUtils.h:113
static const char * ParamName
Definition: vrfXmlTypes.h:45
const char DtXMLParamName[]
XML types.
Definition: rwTypes.h:68
const char DtXMLVectorX[]
Definition: rwTypes.h:76
std::list< DtEnvValueSP > DtEnvValueSPList
Definition: vrfXmlUtils.h:44
DT_DLL_readerWriter DtString DtMtlBindingCharToXml(const DtString &str)
std::vector< DtReaderWriterRegistryData * > RegDataVector
Definition: vrfXmlUtils.h:283
const char DtXMLObjectTypeType[]
Definition: vrfRwTypes.h:366
static DtEnvValueSP AddElement(DtEnvironmentSP env, const DtString &type, DtEnvValueSP root, const DtString &paramName=DtString::nullString())
Definition: vrfXmlUtils.h:100
static DtEnvValueSP FindElementBySystemName(DtEnvironmentSP env, const DtString &nodeType, const DtString &attributeValue, DtEnvValueSP envValue, bool traverseElements=true)
Definition: vrfXmlUtils.h:268
File: rwEntType.h.
Definition: rwEntityType.h:26
static const char * SystemName
Definition: vrfXmlTypes.h:46
static DtEntityType getFromObjectType(DtEnvironmentSP env, DtEnvValueSP root)
If this is an object type string, ignore super type and convert to entity type.
static void WriteVector(DtEnvironmentSP env, DtEnvValueSP root, const DtRwVector *vec, bool writeAsBodyPosition)
Definition: vrfXmlUtils.h:414
static DtString removeQuotes(const DtString &str)
Definition: vrfXmlUtils.h:351
const char DtXMLObjectType[]
Definition: vrfRwTypes.h:347
virtual DtReaderWriter * createItem(const DtString &type, const DtString &name, DtReaderWriterRegistry *parentRegistry) const
Creates a new RW type based on the type string provided, with the specified name and parent registry...
const char DtXMLBodyDown[]
Definition: rwTypes.h:81
const char DtXMLYaw[]
Definition: vrfRwTypes.h:318
static DtEnvValueSP FindElementByParamName(DtEnvironmentSP env, const DtString &nodeType, const DtString &attributeValue, DtEnvValueSP envValue, bool traverseElements=true)
Definition: vrfXmlUtils.h:260
static double getDouble(DtEnvironmentSP env, DtString attributeName, DtEnvValueSP root)
const char DtXMLBodyRight[]
Definition: rwTypes.h:80
static DtEnvValueSP addStringAttribute(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, const DtString &value)
Definition: vrfXmlUtils.h:151
DT_DLL_readerWriter std::shared_ptr< DtEnvironment > DtEnvironmentSP
Definition: readerWriter.h:30
std::map< DtString, DtString > GroupMappings
Definition: vrfXmlUtils.h:285
static DtString getAttribute(DtEnvironmentSP env, const DtString &name, DtEnvValueSP root)
Gets the named attribute from a DtEnvValueSP. Returns &quot;&quot; if the attribute is not found. Note that some attribute names are reserved, and will not work, for example &quot;name&quot; and &quot;type&quot;.
static void setMatchType(DtEnvironmentSP env, DtEnvValueSP root, const DtEntityType &t)
Definition: vrfXmlUtils.h:168
static void setPlatform(DtEnvironmentSP env, DtEnvValueSP root, const DtString &t)
Definition: vrfXmlUtils.h:176
static DtString XmlBindingCharToMtl(const DtString &str)
Can&#39;t use &#39;$&#39; for variables. so where we would use it, as in filenames with variables, it will be replaced with &#39;@&#39;.
Definition: vrfXmlUtils.h:244
static DtEntityType getObjectType(DtEnvironmentSP env, DtEnvValueSP root, bool fallbackOnMatchType=true)
Definition: vrfXmlUtils.h:382
const char DtXMLVectorY[]
Definition: rwTypes.h:77

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)