VR-Forces 5.0.1 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
rwProperties.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
12 #include <vlutil/vlString.h>
15 
16 namespace tbb
17 {
18  class spin_mutex;
19 }
20 
21 class DtRwProperties;
22 
26 {
27 public:
28 
32 
34 
35  bool operator==(const DtPropertiesIterator& other) const;
36  bool operator!=(const DtPropertiesIterator& other) const;
37 
38  DtPropertiesIterator& operator=(const DtPropertiesIterator& other);
39 
40  DtPropertiesIterator& operator++();
41  DtPropertiesIterator operator++(int);
42  DtPropertiesIterator& operator--();
43  DtPropertiesIterator operator--(int);
44 
45  DtPropertyInterface& operator*();
46  DtPropertyInterface* operator->();
47 
48  DtPropertyInterface* property();
49  const DtPropertyInterface* property() const;
50 
51  template <typename KeyType>
52  KeyType key() const;
53 
54  const DtRwProperties* properties() const;
55 
57  void setRegistryIterator(std::vector<DtReaderWriterRegistryData*>::iterator iter);
58 
59  std::vector<DtReaderWriterRegistryData*>::iterator registryIterator() const;
60 
61 protected:
62 
64  std::vector<DtReaderWriterRegistryData*>::iterator myRegIter;
65 };
66 
70 {
71 public:
72 
77 
79 
80  bool operator==(const DtPropertiesConstIterator& other) const;
81  bool operator!=(const DtPropertiesConstIterator& other) const;
82 
84  DtPropertiesConstIterator& operator=(const DtPropertiesIterator& other);
85 
86  DtPropertiesConstIterator& operator++();
87  DtPropertiesConstIterator operator++(int);
88  DtPropertiesConstIterator& operator--();
89  DtPropertiesConstIterator operator--(int);
90 
91  const DtPropertyInterface& operator*() const;
92  const DtPropertyInterface* operator->() const;
93 
94  const DtPropertyInterface* property() const;
95 
96  template <typename KeyType>
97  KeyType key() const;
98 
99  const DtRwProperties* properties() const;
100 
102  void setRegistryIterator(std::vector<DtReaderWriterRegistryData*>::const_iterator iter);
103 
104  std::vector<DtReaderWriterRegistryData*>::const_iterator registryIterator() const;
105 
106 protected:
107 
109  std::vector<DtReaderWriterRegistryData*>::const_iterator myRegIter;
110 };
111 
127 {
128 private:
130  DtRwProperties();
131 
132 public:
133 
136 
139  DtRwProperties(const DtString& name, DtReaderWriterRegistry* parentRegistry = 0);
140  DtRwProperties(const DtString& name, const DtRwProperties& orig,
141  DtReaderWriterRegistry* parentRegistry = 0);
142  DtRwProperties(const DtRwProperties& orig,
143  DtReaderWriterRegistry* parentRegistry = 0);
145 
147  virtual ~DtRwProperties();
148 
152  virtual const_iterator begin() const;
153  virtual iterator begin();
155 
159  virtual const_iterator end() const;
160  virtual iterator end();
162 
164  virtual unsigned size() const;
165 
169  virtual const DtPropertyInterface* findPropertyInterface(const DtString& propertyName) const;
170  virtual DtPropertyInterface* findPropertyInterface(const DtString& propertyName);
172 
174  virtual bool addProperty(DtPropertyInterface*);
175 
177  virtual bool addPropertyAtIndex(DtPropertyInterface*, unsigned index);
178 
182  virtual bool removeProperty(const DtString& propertyName);
183  virtual bool removeProperty(const DtPropertyInterface* property);
185 
190  virtual void copy(const DtPropertyInterface& rhs);
191 
193  virtual void getSelf(DtlObjPtr args,
194  const DtReaderWriter::SearchPaths& searchPaths = SearchPaths(),
195  const DtVariableBindingsList& variableBindings = nullVariableReference());
196  virtual DtlObjPtr getData(DtlObjPtr args,
197  const DtReaderWriter::SearchPaths& searchPaths = SearchPaths(),
198  const DtVariableBindingsList& variableBindings = nullVariableReference());
199 
203  virtual const char* readerWriterType() const;
204 
206  virtual bool isValidProperty(const DtPropertyInterface*) const;
207 
209  virtual DtPropertyInterface* createProperty(DtlObjPtr args, DtReaderWriterRegistry* parentRegistry);
210 
213  virtual char* encode(char*) const;
214 
217  virtual const char* decode(const char*);
218 
222  virtual void getSize(int& size) const;
223 
225  static DtReaderWriterPropertyFactory* propertyFactory();
226  static void cleanupPropertyFactory();
227 
229  virtual void copyVariables(const DtRwVariableBindings& other);
230 
231  virtual bool isReadonly() const;
232 
234  virtual int hlaAlignment() const;
235 
238  virtual int requiredPadding(const char* buf, const DtPropertyInterface* field) const;
239 
241  virtual const char* propertyType() const;
242 
244  virtual int count() const;
245 
249  virtual const DtReaderWriter* findPropertyRw(const DtString& propName) const;
250  virtual DtReaderWriter* findPropertyRw(const DtString& propName);
252 
253  virtual DtString stringRep(const DtString& root = "") const;
254 
266  virtual bool merge(const DtPropertyInterface& target, MergeFlags, const DtMergePath& path = DtMergePath(),
267  const std::set<DtString>& ignore = std::set<DtString>());
268 
273  virtual DtRwProperties createFromPercentages(const DtRwProperties& percentages, const DtRwProperties& baseValues,
274  const DtString& base = "Base-");
275 
278  virtual bool findRootAndVariable(const DtString& varName, DtReaderWriter*& root, DtReaderWriter*& variable) const;
281  virtual DtReaderWriter* readerWriter();
282  virtual const DtReaderWriter* readerWriter() const;
284 
287  virtual DtPropertyInterface* property();
288  virtual const DtPropertyInterface* property() const;
290 
292  virtual DtSymbolString propertyName() const { return name(); };
293 
295  virtual void setPropertyName(const DtString& propertyName) { setName(propertyName); };
296 
298  virtual bool wasUpdatedSince(DtTime t) const;
299 
302  virtual bool isPublished() const;
303  virtual void setIsPublished(bool isPub);
305 
309  virtual unsigned disRecordType() const;
310  virtual void setDisRecordType(unsigned recType);
312 
314  virtual void clearVariables();
315 
317  virtual void reset();
318 
321  virtual void removeVariable(DtReaderWriter*);
322  virtual void removeVariable(const DtReaderWriter*);
324 
326  virtual void invalidateCache();
327 
329  virtual void invalidateCacheForProperty(const DtString& propName);
330 
331  static const DtRwProperties& emptyProperties();
332 
335 
337  static bool rollUpInteger(const DtReaderWriter* source, DtReaderWriter* destination, const DtMergePath& path);
338 
340  static bool rollUpReal(const DtReaderWriter* source, DtReaderWriter* destination, const DtMergePath& path);
341 
343  static bool rollUpString(const DtReaderWriter* source, DtReaderWriter* destination, const DtMergePath& path);
344 
346  static bool rollUpBoolean(const DtReaderWriter* source, DtReaderWriter* destination, const DtMergePath& path);
348 
349  virtual bool setWritePrototypeHeader(bool);
350  virtual bool writePrototypeHeader() const;
351 
353  virtual void cloneAndAddProperty(const DtReaderWriter& rw);
354 
355 protected:
357  virtual void filterIgnoredProperties(DtReaderWriter* rw, const std::set<DtString>& ignore);
358 
360  virtual void getInterface(DtPropertyInterface* pFace, DtlObjPtr args,
361  const DtReaderWriter::SearchPaths& searchPaths = SearchPaths(),
362  const DtVariableBindingsList& variableBindings = nullVariableReference());
363 
364  virtual void writeSelf(std::string& fp, int indentLevel, bool writeUnspecified, const DtFilename& path);
365  virtual void writeData(std::string& fp, int indentLevel, bool writeUnspecified, const DtFilename& path);
366 
367  virtual void putData(std::string&, int indentLevel = 0);
368 
369  virtual int hlaAlignment(const DtPropertyInterface* field) const;
370 
372  virtual void getSize(const DtPropertyInterface*, int& size) const;
373 
374  virtual char* encode(const DtPropertyInterface*, char* buf) const;
375  virtual const char* decode(DtPropertyInterface* iFace, const char* buf);
376 
378  virtual void unrecognizedItem(const DtEnvironmentSP env, const DtEnvValueSP root,
379  const DtReaderWriter::SearchPaths& searchPaths, const DtVariableBindingsList& varBindings);
380 
382  virtual bool traverseAndModifyPercentage(DtRwProperties& results, const DtRwProperties& baseValues,
383  const DtReaderWriter* percentage, const DtString& base) const;
384 
385  virtual void writePrototypeHeader(std::string& fp, const DtReaderWriter* rw, int indentLevel) const;
386 
388  virtual void writePropertyData(DtReaderWriter* rw, std::string& fp, int indentLevel, bool writeUnspecified, const DtFilename& path);
389 
392  virtual void getSortedProperties(const DtRwVariableBindings& varBindings, std::vector<const DtReaderWriter*>& propertyList) const;
393  virtual void getSortedProperties(DtRwVariableBindings& varBindings, std::vector<DtReaderWriter*>& propertyList);
395 
398  virtual bool isDebugEnabled() const;
399  virtual void setDebugEnabled(bool en);
401 
402 protected:
404 
405  mutable std::multimap<DtString, DtReaderWriter*> myRwPropertyCache;
406  mutable tbb::spin_mutex* myCacheMutex;
407 
409 
413 
416  mutable int mySizeAtLastCheck;
417 
418  unsigned myDisRecordType;
419 
421 
423 
425 
428 };
429 
430 template <typename KeyType>
432 {
433  DtWarn << "Could not convert key, \"" << property()->propertyName()
434  << "\", to the specified type." << std::endl;
435 
436  return KeyType();
437 }
438 
439 template <>
440 inline int DtPropertiesIterator::key<int>() const
441 {
442  bool ok = false;
443  DtString keyStr(property()->propertyName().string());
444  int result = keyStr.toInt(&ok);
445 
446  if (!ok)
447  {
448  DtWarn << "Could not convert key, \"" << property()->propertyName()
449  << "\", to an int." << std::endl;
450  }
451 
452  return result;
453 }
454 
455 template <>
456 inline double DtPropertiesIterator::key<double>() const
457 {
458  bool ok = false;
459  DtString keyStr(property()->propertyName().string());
460  int result = keyStr.toDouble(&ok);
461 
462  if (!ok)
463  {
464  DtWarn << "Could not convert key, \"" << property()->propertyName()
465  << "\", to an double." << std::endl;
466  }
467 
468  return result;
469 }
470 
471 template <>
472 inline DtString DtPropertiesIterator::key<DtString>() const
473 {
474  return property()->propertyName().string();
475 }
476 
477 template <typename KeyType>
479 {
480  DtWarn << "Could not convert key, \"" << property()->propertyName()
481  << "\", to the specified type." << std::endl;
482 }
483 
484 template <>
485 inline int DtPropertiesConstIterator::key<int>() const
486 {
487  bool ok = false;
488  DtString keyStr(property()->propertyName().string());
489  int result = keyStr.toInt(&ok);
490 
491  if (!ok)
492  {
493  DtWarn << "Could not convert key, \"" << property()->propertyName()
494  << "\", to an int." << std::endl;
495  }
496 
497  return result;
498 }
499 
500 template <>
501 inline double DtPropertiesConstIterator::key<double>() const
502 {
503  bool ok = false;
504  DtString keyStr(property()->propertyName().string());
505  int result = keyStr.toDouble(&ok);
506 
507  if (!ok)
508  {
509  DtWarn << "Could not convert key, \"" << property()->propertyName()
510  << "\", to an double." << std::endl;
511  }
512 
513  return result;
514 }
515 
516 template <>
517 inline DtString DtPropertiesConstIterator::key<DtString>() const
518 {
519  return property()->propertyName().string();
520 }
DtString myPreviousParentPropFullName
Definition: rwProperties.h:427
virtual void setName(const DtString &)
Set the name of the object. Uses the myName variable. Only set if you understand that this could have...
tbb::spin_mutex * myCacheMutex
Definition: rwProperties.h:406
int mySizeAtLastCheck
Stores the number of items in the last at the last time it was discovered the size changed...
Definition: rwProperties.h:416
#define DT_DLL_readerWriter
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: readerWriterDefines.h:34
Definition: symbolString.h:20
DtPropertiesConstIterator const_iterator
Definition: rwProperties.h:135
virtual DtString stringRep(const DtString &root="") const =0
virtual void unrecognizedItem(const DtEnvironmentSP env, const DtEnvValueSP root, const SearchPaths &searchPaths, const DtVariableBindingsList &varBindings)
Called when the xml reader tries to parse an unknown reader/writer item. Default is a no-op...
virtual void copy(const DtPropertyInterface &rhs)=0
Copies the given property into the current one as long as the types are the same. The details of how ...
const DtPropertyInterface * property() const
DtRwVariableBindings & operator=(const DtRwVariableBindings &orig)
std::vector< DtReaderWriterRegistryData * >::iterator myRegIter
Definition: rwProperties.h:64
virtual const char * decode(const char *)=0
Decodes the property from the specified buffer. Assumes buffer is the start of the property and prece...
DtClock myClock
Definition: rwProperties.h:408
virtual void setIsPublished(bool isPub)=0
Whether this property should be published.
DT_DLL_readerWriter DtBoost::shared_ptr< DtEnvironment > DtEnvironmentSP
Definition: readerWriter.h:30
virtual DtSymbolString propertyName() const
The name of this property.
Definition: rwProperties.h:292
virtual bool wasUpdatedSince(DtTime t) const
Can be implemented in subclasses to return true if an update occurred after the specified time...
bool myIsPublished
Definition: rwProperties.h:420
voidpf void uLong size
Definition: ioapi.h:39
virtual void setDebugEnabled(bool en)=0
Enables debug output. Generally this should be left off.
DT_DLL_terrainCS bool operator==(const DtDegMinSec &lhs, const DtDegMinSec &rhs)
Definition: readerWriter.h:85
virtual void removeVariable(DtReaderWriter *)
bool myWritePrototypeHeader
Definition: rwProperties.h:422
virtual bool isDebugEnabled() const =0
Enables debug output. Generally this should be left off.
Definition: readerWriterRegistry.h:39
std::multimap< DtString, DtReaderWriter * > myRwPropertyCache
Definition: rwProperties.h:405
DtPropertiesIterator iterator
Definition: rwProperties.h:134
virtual bool removeProperty(const DtString &propertyName)
Definition: propertyInterface.h:232
DtTime myLastTimeSizeChanged
Stores the last time at which it was discovered that the size of the list changed.
Definition: rwProperties.h:412
voidpf void * buf
Definition: ioapi.h:39
virtual int hlaAlignment() const =0
Returns alignment necessary to encode this item in HLA.
Iterator for traversing DtRwProperties or its subclasses.
Definition: rwProperties.h:69
virtual DtlObjPtr getData(DtlObjPtr args, const DtReaderWriter::SearchPaths &searchPaths, const DtVariableBindingsList &variableBindings)=0
Override to allow a variable to be assigned to a property of derived type.
Interface class used to define minimal interface for a property. The DtPropertyInterface class provid...
Definition: propertyInterface.h:48
virtual char * encode(char *) const =0
Decodes the property from the specified buffer. Assumes buffer is the start of the property and prece...
ReaderWriter object that maintains a list of reader-writer variable bindings. It keeps a list of name...
Definition: rwVariableBindings.h:27
static DtReaderWriterPropertyFactory * thePropertyFactory
Definition: rwProperties.h:403
bool myDebugEnabled
Definition: rwProperties.h:424
virtual bool addProperty(DtPropertyInterface *property)
Adds a new property of the specified type and returns pointer to the new item. Returns a null pointer...
Definition: propertyInterface.h:211
virtual void clearVariables()
Removes and deletes all variable items.
unsigned myDisRecordType
Definition: rwProperties.h:418
virtual void getSelf(DtlObjPtr args, const std::vector< DtFilename > &searchPaths=std::vector< DtFilename >(), const DtVariableBindingsList &variableBindings=nullVariableReference())
Reads in items, using the factory to read the correct types.
virtual void copyVariables(const DtRwVariableBindings &other)
Copies all variable items from another bindings list and adds them to the local one.
virtual bool merge(const DtPropertyInterface &target, MergeFlags, const DtMergePath &path=DtMergePath(), const std::set< DtString > &ignore=std::set< DtString >())=0
Takes the contents of the supplied properties and merges with the following rules if replace is false...
const DtRwProperties * myProperties
Definition: rwProperties.h:108
Specialized type of reader/writer factory that supports properties.
Definition: readerWriterFactory.h:187
std::list< const DtRwVariableBindings * > DtVariableBindingsList
Definition: readerWriterRegistry.h:29
DtRwProperties * myProperties
Definition: rwProperties.h:63
bool isReadonly() const
Definition: readerWriter.h:214
const DtReaderWriter * findPropertyRw(const DtReaderWriter &properties, const DtString &propertyName)
Contains utility functions to make it easier to find and extract data from a set of extended properti...
std::vector< DtFilename > SearchPaths
Definition: readerWriter.h:92
KeyType key() const
Definition: rwProperties.h:431
int getSize() const
Returns the network size of this item in bytes. This does not include any upfront padding for alignme...
std::vector< DtMergePathStruct > DtMergePath
Definition: readerWriterFactory.h:181
virtual const char * readerWriterType() const
Used to supply a string type that this reader writer type is. This can be used in place of dynamic-ca...
virtual DtPropertyInterface * property()
Returns a PropertyInterface pointer of the ReaderWriter. Returns 0 by default, must by overridden by ...
const char * source
Definition: lz4.h:442
virtual DtReaderWriter * readerWriter()=0
Returns a ReaderWriter pointer of the property. If property is not a ReaderWriter, this should be overridden to return 0.
virtual bool isPublished() const =0
Whether this property should be published.
static const DtVariableBindingsList & nullVariableReference()
virtual void setDisRecordType(unsigned recType)=0
If this property is published, which DIS record type should it use. Default is 0, which indicates tha...
DtPropertyInterface * property()
Defines the DtPropertyInterface class, the interface for all property classes.
virtual unsigned disRecordType() const =0
If this property is published, which DIS record type should it use. Default is 0, which indicates tha...
virtual void putData(std::string &fp, int indentLevel=0)
Deriving class overrides these to get/put class specific data.
KeyType key() const
Definition: rwProperties.h:478
virtual DtSymbolString propertyName() const =0
The name of this property.
std::vector< DtReaderWriterRegistryData * >::const_iterator myRegIter
Definition: rwProperties.h:109
DtPropertyInterface * myPreviousParentProp
Definition: rwProperties.h:426
Definition: rwProperties.h:25
virtual const DtPropertyInterface * findPropertyInterface(const DtString &propertyName) const
Definition: propertyInterface.h:115
A list of properties. A DtPropertyInterface object that is a specialized version of DtRwVariableBindi...
Definition: rwProperties.h:126
virtual void writeSelf(std::string &fp, int indentLevel=0, bool writeUnspecified=false, const DtFilename &path=DtFilename::nullFilename())
Writes out registry data, but includes the type strings when writing.
DT_DLL_terrainCS bool operator!=(const DtDegMinSec &lhs, const DtDegMinSec &rhs)
virtual const char * propertyType() const =0
Typically returns reader/writer type.
virtual DtSymbolString name() const
Accessor for name of this readable/writable object.
virtual void setPropertyName(const DtString &propertyName)
Sets name of this property. Should generally only be called when initially created.
Definition: rwProperties.h:295
virtual void reset()=0
Override to clear out variable value.
MergeFlags
Determines how two lists of properties will be merged by the merge function.
Definition: propertyInterface.h:53

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)