VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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"
12 #include "vrfutil/readerWriter.h"
13 #include "vrfutil/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 
70 {
71 public:
72  typedef boost::unordered_map<DtUUID, DtUUIDMarkingTextProvider*> UUIDToMarkingTextMap;
73  typedef boost::unordered_map<DtString, DtUUID> EntityIdentifierToUUIDMap;
74  typedef boost::unordered_map<DtUUID, DtString> UUIDToEntityIdentifierMap;
75  typedef boost::unordered_map<DtString, DtUUID> MarkingTextToUUIDMap;
76  typedef boost::unordered_map<DtUUID, DtUUID> UUIDToUUIDMap;
77  typedef boost::unordered_map<DtString, DtString> MarkingTextToMarkingTextMap;
78  typedef boost::unordered_set<DtUUID*> UUIDsForUpgrade;
79 
81 
83 
85  virtual void clear();
86 
89  virtual void setResolveMarkingTextToUUIDMapping(bool);
90  virtual bool resolveMarkingTextToUUIDMapping() const;
91 
92  virtual void setResolveUUIDToUUIDMapping(bool);
93 
94  virtual bool resolveUUIDToUUIDMapping() const;
95 
97  virtual void resolveUUIDMapping(bool clearWhenDone = false);
98 
101  virtual void addUUIDForUpgrade(DtUUID*);
102  virtual void removeUUIDForUpgrade(DtUUID*);
103 
106  virtual void objectUUIDChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
107 
110  virtual DtUUIDMarkingTextProvider* addMarkingTextToUUIDMapping(const DtUUIDMarkingTextProvider&, const DtUUID&);
111  virtual DtUUIDMarkingTextProvider* uuidToMarkingTextProvider(const DtUUID&) const;
112 
113  virtual void removeUUIDToMarkingTextMapping(const DtUUID&);
114 
116  virtual void addUUIDToUUIDMapping(const DtUUID& old, const DtUUID& newUUID);
117 
119  virtual void addEntityIdentifierToUUIDMapping(const DtString& eid, const DtUUID&);
120  virtual void removeEntityIdentifierMapping(const DtString& eid);
121  virtual const DtUUID& entityIdentifierToUUIDMapping(const DtString& eid) const;
122  virtual const DtString& uuidToEntityIdentifierMapping(const DtUUID& uuid) const;
123 
124  virtual bool hasUUID(const DtUUID&) const;
125 
127  virtual void addMarkingTextToMarkingTextMapping(const DtString& oldMarkingText, const DtString& newMarkingText);
128 
130  virtual DtUUID mapMarkingTextToUUID(const DtString&) const;
131 
133  virtual DtString mapUUIDToMarkingText(const DtUUID&) const;
134 
136  virtual void pushMappingContext();
137 
140  virtual void popMappingContext(bool merge = false);
141 
146  virtual DtString markingText(const DtUUID&, bool* found = 0) const;
147 
148  MarkingTextToUUIDMap& markingTextToUUIDMapForImport(int context = -1);
149  const MarkingTextToUUIDMap& markingTextToUUIDMapForImport(int context = -1) const;
150 
153  MarkingTextToUUIDMap& liveMarkingTextToUUIDMap(int context = -1);
154  const MarkingTextToUUIDMap& liveMarkingTextToUUIDMap(int context = -1) const;
155  virtual void markingTextUpdated(const DtString& oldText, const DtString& newText);
156 
157  UUIDsForUpgrade& uuidsForMarkingTextUpgrade(int context = -1);
158  const UUIDsForUpgrade& uuidsForMarkingTextUpgrade(int context = -1) const;
159 
160  UUIDsForUpgrade& uuidsForUUIDUpgrade(int context = -1);
161  const UUIDsForUpgrade& uuidsForUUIDUpgrade(int context = -1) const;
162 
163  UUIDToMarkingTextMap& uuidToMarkingTextMap(int context = -1);
164  const UUIDToMarkingTextMap& uuidToMarkingTextMap(int context = -1) const;
165 
166  UUIDToUUIDMap& uuidToUUIDMap(int context = -1);
167  const UUIDToUUIDMap& uuidToUUIDMap(int context = -1) const;
168 
169  MarkingTextToMarkingTextMap& markingTextToMarkingTextMap(int context = -1);
170  const MarkingTextToMarkingTextMap& markingTextToMarkingTextMap(int context = -1) const;
171 
172  EntityIdentifierToUUIDMap& entityIdentifierToUUIDMap(int context = -1);
173  const EntityIdentifierToUUIDMap& entityIdentifierToUUIDMap(int context = -1) const;
174 
175  UUIDToEntityIdentifierMap& uuidToEntityIdentifierMap(int context = -1);
176  const UUIDToEntityIdentifierMap& uuidToEntityIdentifierMap(int context = -1) const;
177 
179  MarkingTextToUUIDMap markingTextToUUIDMap() const;
180 
181  virtual void resolveToMarkingTextMapping();
182 
184  virtual void resolveToUUIDMapping(bool clearWhenDone = false);
185 
187  virtual DtUUID upgradeUUID(const DtUUID&) const;
188 
191  virtual bool hasMarkingTextToUUIDMapForImport(const DtString&) const;
192 
193 protected:
195  {
203 
206  };
207 
208  mutable tbb::recursive_mutex myMutex;
209 
210  typedef std::vector<MappingContext> MappingContexts;
213 
216  mutable bool myPushingContext;
217  mutable bool myPoppingContext;
218 };
219 
222 {
223 public:
225  DtUUID(DtUUIDOwner* = 0);
226  DtUUID(const DtUUID&, DtUUIDOwner* = 0);
227  DtUUID(const boost::uuids::uuid&, DtUUIDOwner* = 0);
228 
234  explicit DtUUID(const DtString&, DtUUIDOwner* = 0, bool blockMarkingTextLookup = false);
235  explicit DtUUID(const std::string&, DtUUIDOwner* = 0, bool blockMarkingTextLookup = false);
236  explicit DtUUID(const char*, DtUUIDOwner* = 0, bool blockMarkingTextLookup = false);
237 
238  DtUUID& operator=(const DtUUID & orig);
239  DtUUID& operator=(const boost::uuids::uuid & orig);
240  bool operator<(const DtUUID & rhs) const;
241  bool operator>(const DtUUID & rhs) const;
242 
243  virtual ~DtUUID();
244 
246  static bool isVrfUUID(const DtString&);
247 
249  virtual void setUUID(const DtString&, bool blockMarkingTextLookup = false);
250  virtual const DtString& uuidString() const;
251 
253  virtual const char* string() const;
254 
259  static DtString uuidMarking();
260 
262  static DtUUID makeStringUUID(const DtString&);
263 
265  virtual void setMarkingText(const DtString&);
266 
269  virtual void setStringUUID(const DtString&);
270 
272  virtual void generateUUID();
273 
275  virtual void clearUUID();
276 
277  bool operator==(const DtString&) const;
278  bool operator==(const std::string&) const;
279  bool operator==(const char*) const;
280  bool operator==(const DtUUID&) const;
281  bool operator==(const DtRwUUID&) const;
282 
283  bool operator!=(const DtUUID& rhs) const { return !(*this == rhs); };
284  bool operator!=(const DtString& rhs) const { return !(*this == rhs); };
285  bool operator!=(const DtRwUUID& rhs) const { return !(*this == rhs); };
286 
287  virtual bool isValid() const;
288 
289  size_t hashValue() const;
290 
291 #ifdef _DEBUG
292  void updateDebugMarkingText();
293 #endif
294 
295  bool isVrfUUID() const
296  {
297  return myIsVrfUUID;
298  }
299 
300  boost::uuids::uuid uuid() const
301  {
302  return myBoostUUID;
303  }
304 
305  static const DtUUID& nullUUID();
306 
308  virtual DtString markingText() const;
309 
311  static DtObjectIdentificationResolver& objectIdentificationResolver();
312 
313  //-------------------------------------------
316 
318  DtString objectType() const;
319 
322 
325  bool deserialize(const DtString& data);
326 
328  static DtAsciiSerializable* creator();
330 
331 protected:
332  friend class boost::serialization::access;
333 
337  template<class Archive>
338  void serialize(Archive & ar, const unsigned int version)
339  {
340  if (Archive::is_loading::value)
341  {
342  std::string uuidS;
343 
344  ar & BOOST_SERIALIZATION_NVP(uuidS);
345 
346  setUUID(uuidS.c_str());
347  }
348  else
349  {
350  std::string uuidS = uuidString().c_str();
351 
352  ar & BOOST_SERIALIZATION_NVP(uuidS);
353  }
354  }
355 
356 protected:
357  virtual boost::uuids::uuid convertToVrfUUID(const DtString&);
358  virtual boost::uuids::uuid convertStringToBoostUUID(const DtString&, bool blockMarkingTextLookup = false);
359  virtual const char* convertStringToStringUUID(const char* t) const;
360 
361 protected:
364  mutable boost::uuids::uuid myBoostUUID;
365  mutable std::string myStringUUID;
366 
369 
372 
374 
375 #ifdef _DEBUG
376 
377 
378  DtString myDebugMarkingText;
379 #endif
380 
383 };
384 
390 {
391 public:
393  DtRwUUID();
394  DtRwUUID(const char* name, DtReaderWriterRegistry* const parentRegistry = 0);
395  DtRwUUID(const DtString& name, DtReaderWriterRegistry* const parentRegistry);
396  DtRwUUID(const DtSymbolString& name, DtReaderWriterRegistry* const parentRegistry);
397 
399  DtRwUUID(const DtString& name, const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
400  DtRwUUID(const DtSymbolString& name, const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
401  DtRwUUID(const DtSymbolString& name, const DtUUID&, DtReaderWriterRegistry* const parentRegistry);
402  DtRwUUID(const DtString& name, const DtUUID&, DtReaderWriterRegistry* const parentRegistry);
403  DtRwUUID(const DtString& name, const char*, DtReaderWriterRegistry* const parentRegistry);
404  DtRwUUID(const DtSymbolString& name, const char*, DtReaderWriterRegistry* const parentRegistry);
405  DtRwUUID(const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
406  DtRwUUID(const DtRwUUID&);
407  DtRwUUID(const DtUUID&);
408 
409  virtual ~DtRwUUID();
410 
414  virtual const char* readerWriterType() const;
415 
416  virtual void setMarkingText(const DtString&);
417  virtual DtString markingText() const;
418 
420  static const char* theXmlType();
421 
422  operator const DtUUID& () const { return myUUID; };
423 
424  DtRwUUID& operator=(const DtRwUUID & orig);
425  DtRwUUID& operator=(const DtUUID & orig);
426 
427  bool operator!=(const DtRwUUID & orig) const { return !(*this == orig); };
428  bool operator==(const DtRwUUID & orig) const;
429 
430  virtual const char* xmlType() const
431  {
432  return theXmlType();
433  }
434 
435  const DtUUID& uuid() const { return myUUID; };
436  DtUUID& uuid() { return myUUID; };
437 
438  virtual void clearUUID();
439  virtual DtString uuidString() const;
440  virtual bool isValid() const;
441  virtual void generateUUID();
442  virtual void setUUID(const DtRwUUID& u);
443  virtual void setUUID(const DtString& uuid);
444  virtual void setStringUUID(const DtString& uuid);
445  virtual bool isVrfUUID() const;
446 
447 #ifdef _DEBUG
448  void updateDebugMarkingText() { myUUID.updateDebugMarkingText(); };
449 #endif
450 
451  virtual DtlObjPtr getData(DtlObjPtr args, const SearchPaths& searchPaths,
452  const DtVariableBindingsList& variableBindings);
453  virtual void getSelf(DtlObjPtr args, const SearchPaths& searchPaths = DtReaderWriter::SearchPaths(),
454  const DtVariableBindingsList& variableBindings = DtVariableBindingsList());
455  virtual void getSelf(const DtEnvironmentSP env, const DtEnvValueSP root,
457  const DtVariableBindingsList& varBindings = DtVariableBindingsList());
458  virtual void getData(const DtEnvironmentSP, const DtEnvValueSP,
459  const SearchPaths& searchPaths = SearchPaths(),
460  const DtVariableBindingsList& bindings = DtVariableBindingsList());
461  virtual void putSelf(std::string& fp, int indentLevel = 0,
462  bool writeUnspecified = false, const DtFilename& path =
463  DtFilename::nullFilename());
464  virtual void putSelf(DtEnvironmentSP env, DtEnvValueSP parent) const;
465  virtual void putData(DtEnvironmentSP, DtEnvValueSP value) const;
466  virtual void putData(std::string& fp, int);
467 
468 protected:
470  virtual void noRwValueSpecified();
471 
474  virtual void uuidChanged();
475 
476 protected:
477  mutable DtUUID myUUID;
478 };
479 
483 {
484 public:
486  DtRwObjectName();
487 
489  DtRwObjectName(const DtString& name, DtReaderWriterRegistry* const parentRegistry = NULL);
490  DtRwObjectName(const DtSymbolString& name, DtReaderWriterRegistry* const parentRegistry = NULL);
491 
493  DtRwObjectName(const DtString& name,
494  const char* fromChars,
495  DtReaderWriterRegistry* const parentRegistry = NULL);
496 
497  DtRwObjectName(const DtSymbolString& name,
498  const char* fromChars,
499  DtReaderWriterRegistry* const parentRegistry = NULL);
500 
501  DtRwObjectName(const DtString& name,
502  const DtString& fromString,
503  DtReaderWriterRegistry* const parentRegistry = NULL);
504 
505  DtRwObjectName(const DtSymbolString& name,
506  const DtString& fromString,
507  DtReaderWriterRegistry* const parentRegistry = NULL);
508 
509  DtRwObjectName(const DtString& name,
510  const DtRwObjectName& fromString,
511  DtReaderWriterRegistry* const parentRegistry = NULL);
512 
513  DtRwObjectName(const DtSymbolString& name,
514  const DtRwObjectName& fromString,
515  DtReaderWriterRegistry* const parentRegistry = NULL);
516 
518  DtRwObjectName(const DtRwObjectName& orig, DtReaderWriterRegistry* const parentRegistry = NULL);
519 
521  DtRwObjectName& operator=(const DtRwObjectName & orig);
522  DtRwObjectName& operator=(const DtUUID & orig);
523 
524  virtual ~DtRwObjectName();
525 
527  static const char* theXmlType();
528 
529  virtual const char* xmlType() const
530  {
531  return theXmlType();
532  }
533 
537  virtual const char* readerWriterType() const;
538 };
539 
540 DT_DLL_vrfutil std::size_t hash_value(DtUUID const& b);
541 DT_DLL_vrfutil std::size_t hash_value(DtString const& b);

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)