VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
rwUUID.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
11 #include "vrfutil/vrfutilDefines.h"
13 #include "readerWriter/rwString.h"
15 #include <boost/uuid/uuid.hpp>
16 #include <boost/unordered_map.hpp>
17 #include <boost/unordered_set.hpp>
18 
19 #include <boost/archive/xml_iarchive.hpp>
20 #include <boost/archive/xml_oarchive.hpp>
21 #include <boost/serialization/access.hpp>
22 #include <boost/uuid/uuid_io.hpp>
23 #include <boost/uuid/uuid_serialize.hpp>
24 #include <tbb/recursive_mutex.h>
25 
26 class DtRwUUID;
27 class DtUUID;
28 
31 {
32 public:
33  virtual void uuidChanged() = 0;
34 };
35 
39 {
40 public:
42  virtual DtString markingText() = 0;
43  virtual DtUUIDMarkingTextProvider* clone() const = 0;
44 
45  operator DtString () { return markingText(); };
46 };
47 
50 {
51 public:
54 
55  virtual ~DtMarkingTextStringProvider();
56 
57  virtual void setMarkingText(const DtString& s) { myMarkingText = s; };
58  virtual DtString markingText() { return myMarkingText; };
59 
60  virtual DtUUIDMarkingTextProvider* clone() const;
61 
62 protected:
64 };
65 
71 {
72 public:
73  typedef boost::unordered_map<DtUUID, DtUUIDMarkingTextProvider*> UUIDToMarkingTextMap;
74  typedef boost::unordered_map<DtString, DtUUID> EntityIdentifierToUUIDMap;
75  typedef boost::unordered_map<DtUUID, DtString> UUIDToEntityIdentifierMap;
76  typedef boost::unordered_map<DtString, DtUUID> MarkingTextToUUIDMap;
77  typedef boost::unordered_map<DtUUID, DtUUID> UUIDToUUIDMap;
78  typedef boost::unordered_map<DtString, DtString> MarkingTextToMarkingTextMap;
79  typedef boost::unordered_set<DtUUID*> UUIDsForUpgrade;
80 
82 
84 
86  virtual void clear();
87 
90  virtual void setResolveMarkingTextToUUIDMapping(bool);
91  virtual bool resolveMarkingTextToUUIDMapping() const;
92 
93  virtual void setResolveUUIDToUUIDMapping(bool);
94 
95  virtual bool resolveUUIDToUUIDMapping() const;
96 
98  virtual void resolveUUIDMapping(bool clearWhenDone = false);
99 
102  virtual void addUUIDForUpgrade(DtUUID*);
103  virtual void removeUUIDForUpgrade(DtUUID*);
104 
107  virtual void objectUUIDChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
108 
111  virtual DtUUIDMarkingTextProvider* addMarkingTextToUUIDMapping(const DtUUIDMarkingTextProvider&, const DtUUID&);
112  virtual DtUUIDMarkingTextProvider* uuidToMarkingTextProvider(const DtUUID&) const;
113 
114  virtual void removeUUIDToMarkingTextMapping(const DtUUID&);
115 
117  virtual void addUUIDToUUIDMapping(const DtUUID& old, const DtUUID& newUUID);
118 
120  virtual void addEntityIdentifierToUUIDMapping(const DtString& eid, const DtUUID&);
121  virtual void removeEntityIdentifierMapping(const DtString& eid);
122  virtual const DtUUID& entityIdentifierToUUIDMapping(const DtString& eid) const;
123  virtual const DtString& uuidToEntityIdentifierMapping(const DtUUID& uuid) const;
124 
125  virtual bool hasUUID(const DtUUID&) const;
126 
128  virtual void addMarkingTextToMarkingTextMapping(const DtString& oldMarkingText, const DtString& newMarkingText);
129 
131  virtual DtUUID mapMarkingTextToUUID(const DtString&) const;
132 
134  virtual DtString mapUUIDToMarkingText(const DtUUID&) const;
135 
137  virtual void pushMappingContext();
138 
141  virtual void popMappingContext(bool merge = false);
142 
147  virtual DtString markingText(const DtUUID&, bool* found = 0) const;
148 
149  MarkingTextToUUIDMap& markingTextToUUIDMapForImport(int context = -1);
150  const MarkingTextToUUIDMap& markingTextToUUIDMapForImport(int context = -1) const;
151 
154  MarkingTextToUUIDMap& liveMarkingTextToUUIDMap(int context = -1);
155  const MarkingTextToUUIDMap& liveMarkingTextToUUIDMap(int context = -1) const;
156  virtual void markingTextUpdated(const DtString& oldText, const DtString& newText);
157 
158  UUIDsForUpgrade& uuidsForMarkingTextUpgrade(int context = -1);
159  const UUIDsForUpgrade& uuidsForMarkingTextUpgrade(int context = -1) const;
160 
161  UUIDsForUpgrade& uuidsForUUIDUpgrade(int context = -1);
162  const UUIDsForUpgrade& uuidsForUUIDUpgrade(int context = -1) const;
163 
164  UUIDToMarkingTextMap& uuidToMarkingTextMap(int context = -1);
165  const UUIDToMarkingTextMap& uuidToMarkingTextMap(int context = -1) const;
166 
167  UUIDToUUIDMap& uuidToUUIDMap(int context = -1);
168  const UUIDToUUIDMap& uuidToUUIDMap(int context = -1) const;
169 
170  MarkingTextToMarkingTextMap& markingTextToMarkingTextMap(int context = -1);
171  const MarkingTextToMarkingTextMap& markingTextToMarkingTextMap(int context = -1) const;
172 
173  EntityIdentifierToUUIDMap& entityIdentifierToUUIDMap(int context = -1);
174  const EntityIdentifierToUUIDMap& entityIdentifierToUUIDMap(int context = -1) const;
175 
176  UUIDToEntityIdentifierMap& uuidToEntityIdentifierMap(int context = -1);
177  const UUIDToEntityIdentifierMap& uuidToEntityIdentifierMap(int context = -1) const;
178 
180  MarkingTextToUUIDMap markingTextToUUIDMap() const;
181 
182  virtual void resolveToMarkingTextMapping();
183 
185  virtual void resolveToUUIDMapping(bool clearWhenDone = false);
186 
188  virtual DtUUID upgradeUUID(const DtUUID&) const;
189 
192  virtual bool hasMarkingTextToUUIDMapForImport(const DtString&) const;
193 
194 protected:
196  {
204 
207  };
208 
209  mutable tbb::recursive_mutex myMutex;
210 
211  typedef std::vector<MappingContext> MappingContexts;
214 
217  mutable bool myPushingContext;
218  mutable bool myPoppingContext;
219 };
220 
223 {
224 public:
226  DtUUID(DtUUIDOwner* = 0);
227  DtUUID(const DtUUID&, DtUUIDOwner* = 0);
228  DtUUID(const boost::uuids::uuid&, DtUUIDOwner* = 0);
229 
235  explicit DtUUID(const DtString&, DtUUIDOwner* = 0, bool blockMarkingTextLookup = false);
236  explicit DtUUID(const std::string&, DtUUIDOwner* = 0, bool blockMarkingTextLookup = false);
237  explicit DtUUID(const char*, DtUUIDOwner* = 0, bool blockMarkingTextLookup = false);
238 
239  DtUUID& operator=(const DtUUID & orig);
240  DtUUID& operator=(const boost::uuids::uuid & orig);
241  bool operator<(const DtUUID & rhs) const;
242  bool operator>(const DtUUID & rhs) const;
243 
244  virtual ~DtUUID();
245 
247  static bool isVrfUUID(const DtString&);
248 
250  virtual void setUUID(const DtString&, bool blockMarkingTextLookup = false);
251  virtual const DtString& uuidString() const;
252 
254  virtual const char* string() const;
255 
260  static DtString uuidMarking();
261 
263  static DtUUID makeStringUUID(const DtString&);
264 
266  virtual void setMarkingText(const DtString&);
267 
270  virtual void setStringUUID(const DtString&);
271 
273  virtual void generateUUID();
274 
276  virtual void clearUUID();
277 
278  bool operator==(const DtString&) const;
279  bool operator==(const std::string&) const;
280  bool operator==(const char*) const;
281  bool operator==(const DtUUID&) const;
282  bool operator==(const DtRwUUID&) const;
283 
284  bool operator!=(const DtUUID& rhs) const { return !(*this == rhs); };
285  bool operator!=(const DtString& rhs) const { return !(*this == rhs); };
286  bool operator!=(const DtRwUUID& rhs) const { return !(*this == rhs); };
287 
288  virtual bool isValid() const;
289 
290  size_t hashValue() const;
291 
292 #ifdef _DEBUG
293  void updateDebugMarkingText();
294 #endif
295 
296  bool isVrfUUID() const
297  {
298  return myIsVrfUUID;
299  }
300 
301  boost::uuids::uuid uuid() const
302  {
303  return myBoostUUID;
304  }
305 
306  static const DtUUID& nullUUID();
307 
309  virtual DtString markingText() const;
310 
312  static DtObjectIdentificationResolver& objectIdentificationResolver();
313 
314  //-------------------------------------------
317 
319  DtString objectType() const;
320 
323 
326  bool deserialize(const DtString& data);
327 
329  static DtAsciiSerializable* creator();
331 
332 protected:
333  friend class boost::serialization::access;
334 
338  template<class Archive>
339  void serialize(Archive & ar, const unsigned int version)
340  {
341  if (Archive::is_loading::value)
342  {
343  std::string uuidS;
344 
345  ar & BOOST_SERIALIZATION_NVP(uuidS);
346 
347  setUUID(uuidS.c_str());
348  }
349  else
350  {
351  std::string uuidS = uuidString().c_str();
352 
353  ar & BOOST_SERIALIZATION_NVP(uuidS);
354  }
355  }
356 
357 protected:
358  virtual boost::uuids::uuid convertToVrfUUID(const DtString&);
359  virtual boost::uuids::uuid convertStringToBoostUUID(const DtString&, bool blockMarkingTextLookup = false);
360  virtual const char* convertStringToStringUUID(const char* t) const;
361 
362 protected:
365  mutable boost::uuids::uuid myBoostUUID;
366  mutable std::string myStringUUID;
367 
370 
373 
375 
376 #ifdef _DEBUG
377 
378 
379  DtString myDebugMarkingText;
380 #endif
381 
384 };
385 
391 {
392 public:
394  DtRwUUID();
395  DtRwUUID(const char* name, DtReaderWriterRegistry* const parentRegistry = 0);
396  DtRwUUID(const DtString& name, DtReaderWriterRegistry* const parentRegistry);
397  DtRwUUID(const DtSymbolString& name, DtReaderWriterRegistry* const parentRegistry);
398 
400  DtRwUUID(const DtString& name, const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
401  DtRwUUID(const DtSymbolString& name, const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
402  DtRwUUID(const DtSymbolString& name, const DtUUID&, DtReaderWriterRegistry* const parentRegistry);
403  DtRwUUID(const DtString& name, const DtUUID&, DtReaderWriterRegistry* const parentRegistry);
404  DtRwUUID(const DtString& name, const char*, DtReaderWriterRegistry* const parentRegistry);
405  DtRwUUID(const DtSymbolString& name, const char*, DtReaderWriterRegistry* const parentRegistry);
406  DtRwUUID(const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
407  DtRwUUID(const DtRwUUID&);
408  DtRwUUID(const DtUUID&);
409 
410  virtual ~DtRwUUID();
411 
415  virtual const char* readerWriterType() const;
416 
417  virtual void setMarkingText(const DtString&);
418  virtual DtString markingText() const;
419 
421  static const char* theXmlType();
422 
423  operator const DtUUID& () const { return myUUID; };
424 
425  DtRwUUID& operator=(const DtRwUUID & orig);
426  DtRwUUID& operator=(const DtUUID & orig);
427 
428  bool operator!=(const DtRwUUID & orig) const { return !(*this == orig); };
429  bool operator==(const DtRwUUID & orig) const;
430 
431  bool operator<(const DtRwUUID & rhs) const { return myUUID < rhs; };
432  bool operator>(const DtRwUUID & rhs) const { return myUUID > rhs; };
433 
434  virtual const char* xmlType() const
435  {
436  return theXmlType();
437  }
438 
439  const DtUUID& uuid() const { return myUUID; };
440  DtUUID& uuid() { return myUUID; };
441 
442  virtual void clearUUID();
443  virtual DtString uuidString() const;
444  virtual bool isValid() const;
445  virtual void generateUUID();
446  virtual void setUUID(const DtRwUUID& u);
447  virtual void setUUID(const DtString& uuid);
448  virtual void setStringUUID(const DtString& uuid);
449  virtual bool isVrfUUID() const;
450 
451 #ifdef _DEBUG
452  void updateDebugMarkingText() { myUUID.updateDebugMarkingText(); };
453 #endif
454 
455  virtual DtlObjPtr getData(DtlObjPtr args, const SearchPaths& searchPaths,
456  const DtVariableBindingsList& variableBindings);
457  virtual void getSelf(DtlObjPtr args, const SearchPaths& searchPaths = DtReaderWriter::SearchPaths(),
458  const DtVariableBindingsList& variableBindings = DtVariableBindingsList());
459  virtual void getSelf(const DtEnvironmentSP env, const DtEnvValueSP root,
461  const DtVariableBindingsList& varBindings = DtVariableBindingsList());
462  virtual void getData(const DtEnvironmentSP, const DtEnvValueSP,
463  const SearchPaths& searchPaths = SearchPaths(),
464  const DtVariableBindingsList& bindings = DtVariableBindingsList());
465  virtual void putSelf(std::string& fp, int indentLevel = 0,
466  bool writeUnspecified = false, const DtFilename& path =
467  DtFilename::nullFilename());
468  virtual void putSelf(DtEnvironmentSP env, DtEnvValueSP parent) const;
469  virtual void putData(DtEnvironmentSP, DtEnvValueSP value) const;
470  virtual void putData(std::string& fp, int);
471 
472 protected:
474  virtual void noRwValueSpecified();
475 
478  virtual void uuidChanged();
479 
480 protected:
481  mutable DtUUID myUUID;
482 };
483 
487 {
488 public:
490  DtRwObjectName();
491 
493  DtRwObjectName(const DtString& name, DtReaderWriterRegistry* const parentRegistry = NULL);
494  DtRwObjectName(const DtSymbolString& name, DtReaderWriterRegistry* const parentRegistry = NULL);
495 
497  DtRwObjectName(const DtString& name,
498  const char* fromChars,
499  DtReaderWriterRegistry* const parentRegistry = NULL);
500 
501  DtRwObjectName(const DtSymbolString& name,
502  const char* fromChars,
503  DtReaderWriterRegistry* const parentRegistry = NULL);
504 
505  DtRwObjectName(const DtString& name,
506  const DtString& fromString,
507  DtReaderWriterRegistry* const parentRegistry = NULL);
508 
509  DtRwObjectName(const DtSymbolString& name,
510  const DtString& fromString,
511  DtReaderWriterRegistry* const parentRegistry = NULL);
512 
513  DtRwObjectName(const DtString& name,
514  const DtRwObjectName& fromString,
515  DtReaderWriterRegistry* const parentRegistry = NULL);
516 
517  DtRwObjectName(const DtSymbolString& name,
518  const DtRwObjectName& fromString,
519  DtReaderWriterRegistry* const parentRegistry = NULL);
520 
522  DtRwObjectName(const DtRwObjectName& orig, DtReaderWriterRegistry* const parentRegistry = NULL);
523 
525  DtRwObjectName& operator=(const DtRwObjectName & orig);
526  DtRwObjectName& operator=(const DtUUID & orig);
527 
528  virtual ~DtRwObjectName();
529 
531  static const char* theXmlType();
532 
533  virtual const char* xmlType() const
534  {
535  return theXmlType();
536  }
537 
541  virtual const char* readerWriterType() const;
542 };
543 
544 DT_DLL_vrfutil std::size_t hash_value(DtUUID const& b);
545 DT_DLL_vrfutil std::size_t hash_value(DtString const& b);

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)