VR-Forces Development_Version 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/spin_rw_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 DtString markingText();
58  virtual DtUUIDMarkingTextProvider* clone() const;
59 
60 protected:
62 };
63 
68 {
69 public:
70  typedef boost::unordered_map<DtUUID, DtUUIDMarkingTextProvider*> UUIDToMarkingTextMap;
71  typedef boost::unordered_map<DtString, DtUUID> EntityIdentifierToUUIDMap;
72  typedef boost::unordered_map<DtString, DtUUID> MarkingTextToUUIDMap;
73  typedef boost::unordered_map<DtUUID, DtUUID> UUIDToUUIDMap;
74  typedef boost::unordered_map<DtString, DtString> MarkingTextToMarkingTextMap;
75  typedef boost::unordered_set<DtUUID*> UUIDsForUpgrade;
76 
78 
80 
82  virtual void clear();
83 
86  virtual void setResolveMarkingTextToUUIDMapping(bool);
87  virtual bool resolveMarkingTextToUUIDMapping() const;
88 
89  virtual void setResolveUUIDToUUIDMapping(bool);
90 
91  virtual bool resolveUUIDToUUIDMapping() const;
92 
94  virtual void resolveUUIDMapping(bool clearWhenDone = false);
95 
98  virtual void addUUIDForUpgrade(DtUUID*);
99  virtual void removeUUIDForUpgrade(DtUUID*);
100 
106  virtual void setMultiThreaded(bool);
107  virtual bool multiThreaded() const;
108  virtual void objectUUIDChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
109 
112  virtual void addMarkingTextToUUIDMapping(const DtUUIDMarkingTextProvider&, const DtUUID&);
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 DtUUID entityIdentifierToUUIDMapping(const DtString& eid) const;
122 
123  virtual bool hasUUID(const DtUUID&) const;
124 
126  virtual void addMarkingTextToMarkingTextMapping(const DtString& oldMarkingText, const DtString& newMarkingText);
127 
129  virtual DtUUID mapMarkingTextToUUID(const DtString&) const;
130 
132  virtual DtString mapUUIDToMarkingText(const DtUUID&) const;
133 
135  virtual void pushMappingContext();
136 
139  virtual void popMappingContext(bool merge = false);
140 
145  virtual DtString markingText(const DtUUID&, bool* found = 0) const;
146 
147  MarkingTextToUUIDMap& markingTextToUUIDMapForImport(int context = -1);
148  const MarkingTextToUUIDMap& markingTextToUUIDMapForImport(int context = -1) const;
149 
150  UUIDsForUpgrade& uuidsForMarkingTextUpgrade(int context = -1);
151  const UUIDsForUpgrade& uuidsForMarkingTextUpgrade(int context = -1) const;
152 
153  UUIDsForUpgrade& uuidsForUUIDUpgrade(int context = -1);
154  const UUIDsForUpgrade& uuidsForUUIDUpgrade(int context = -1) const;
155 
156  UUIDToMarkingTextMap& uuidToMarkingTextMap(int context = -1);
157  const UUIDToMarkingTextMap& uuidToMarkingTextMap(int context = -1) const;
158 
159  UUIDToUUIDMap& uuidToUUIDMap(int context = -1);
160  const UUIDToUUIDMap& uuidToUUIDMap(int context = -1) const;
161 
162  MarkingTextToMarkingTextMap&markingTextToMarkingTextMap(int context = -1);
163  const MarkingTextToMarkingTextMap& markingTextToMarkingTextMap(int context = -1) const;
164 
165  EntityIdentifierToUUIDMap& entityIdentifierToUUIDMap(int context = -1);
166  const EntityIdentifierToUUIDMap& entityIdentifierToUUIDMap(int context = -1) const;
167 
169  MarkingTextToUUIDMap markingTextToUUIDMap() const;
170 
171  virtual void resolveToMarkingTextMapping();
172 
174  virtual void resolveToUUIDMapping(bool clearWhenDone = false);
175 
177  virtual DtUUID upgradeUUID(const DtUUID&) const;
178 
181  virtual bool hasMarkingTextToUUIDMapForImport(const DtString&) const;
182 
183 protected:
185  {
191 
194  };
195 
196  typedef std::vector<MappingContext> MappingContexts;
199 
200  tbb::spin_rw_mutex* myMarkingTextMutex;
201  tbb::spin_rw_mutex* myResolutionMutex;
202 
205  mutable bool myPushingContext;
206  mutable bool myPoppingContext;
207 };
208 
211 {
212 public:
214  DtUUID(DtUUIDOwner* = 0);
215  DtUUID(const DtUUID&, DtUUIDOwner* = 0);
216  DtUUID(const boost::uuids::uuid&, DtUUIDOwner* = 0);
217 
223  DtUUID(const DtString&, DtUUIDOwner* = 0, bool blockMarkingTextLookup = false);
224  DtUUID(const std::string&, DtUUIDOwner* = 0, bool blockMarkingTextLookup = false);
225  DtUUID(const char*, DtUUIDOwner* = 0, bool blockMarkingTextLookup = false);
226 
227  DtUUID& operator=(const DtUUID & orig);
228  DtUUID& operator=(const boost::uuids::uuid & orig);
229  bool operator<(const DtUUID & rhs) const;
230  bool operator>(const DtUUID & rhs) const;
231 
232  virtual ~DtUUID();
233 
235  static bool isVrfUUID(const DtString&);
236 
238  virtual void setUUID(const DtString&, bool blockMarkingTextLookup = false);
239  virtual const DtString& uuidString() const;
240 
242  virtual const char* string() const;
243 
248  static DtString uuidMarking();
249 
251  static DtUUID makeStringUUID(const DtString&);
252 
254  virtual void setMarkingText(const DtString&);
255 
258  virtual void setStringUUID(const DtString&);
259 
261  virtual void generateUUID();
262 
264  virtual void clearUUID();
265 
266  bool operator==(const DtUUID&) const;
267  bool operator==(const DtRwUUID&) const;
268 
269  bool operator!=(const DtUUID& rhs) const { return !(*this == rhs); };
270  bool operator!=(const DtString& rhs) const { return !(*this == rhs); };
271  bool operator!=(const DtRwUUID& rhs) const { return !(*this == rhs); };
272 
273  virtual bool isValid() const;
274 
275  size_t hashValue() const;
276 
277 #ifdef _DEBUG
278  void updateDebugMarkingText();
279 #endif
280 
281  bool isVrfUUID() const
282  {
283  return myIsVrfUUID;
284  }
285 
286  boost::uuids::uuid uuid() const
287  {
288  return myBoostUUID;
289  }
290 
291  static DtUUID nullUUID();
292 
294  virtual DtString markingText() const;
295 
296  static DtUUIDMarkingTextResolutionManager& markingTextResolutionManager();
297 
298  //-------------------------------------------
301 
303  DtString objectType() const;
304 
307 
310  bool deserialize(const DtString& data);
311 
313  static DtAsciiSerializable* creator();
315 
316 protected:
317  friend class boost::serialization::access;
318 
322  template<class Archive>
323  void serialize(Archive & ar, const unsigned int version)
324  {
325  if (Archive::is_loading::value)
326  {
327  std::string uuidS;
328 
329  ar & BOOST_SERIALIZATION_NVP(uuidS);
330 
331  setUUID(uuidS.c_str());
332  }
333  else
334  {
335  std::string uuidS = uuidString().c_str();
336 
337  ar & BOOST_SERIALIZATION_NVP(uuidS);
338  }
339  }
340 
341 protected:
342  virtual boost::uuids::uuid convertToVrfUUID(const DtString&);
343  virtual boost::uuids::uuid convertStringToBoostUUID(const DtString&, bool blockMarkingTextLookup = false);
344  virtual const char* convertStringToStringUUID(const char* t) const;
345 
346 protected:
349  mutable boost::uuids::uuid myBoostUUID;
350  mutable std::string myStringUUID;
351 
354 
357 
359 
360 #ifdef _DEBUG
361 
362 
363  DtString myDebugMarkingText;
364 #endif
365 
368 };
369 
375 {
376 public:
378  DtRwUUID();
379  DtRwUUID(const DtString& name, DtReaderWriterRegistry* const parentRegistry);
380  DtRwUUID(const DtSymbolString& name, DtReaderWriterRegistry* const parentRegistry);
381 
383  DtRwUUID(const DtString& name, const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
384  DtRwUUID(const DtSymbolString& name, const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
385  DtRwUUID(const DtSymbolString& name, const DtUUID&, DtReaderWriterRegistry* const parentRegistry);
386  DtRwUUID(const DtString& name, const DtUUID&, DtReaderWriterRegistry* const parentRegistry);
387  DtRwUUID(const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
388  DtRwUUID(const DtRwUUID&);
389  DtRwUUID(const DtUUID&);
390 
391  virtual ~DtRwUUID();
392 
396  virtual const char* readerWriterType() const;
397 
398  virtual void setMarkingText(const DtString&);
399  virtual DtString markingText() const;
400 
402  static const char* theXmlType();
403 
404  operator const DtUUID& () const { return myUUID; };
405 
406  DtRwUUID& operator=(const DtRwUUID & orig);
407  DtRwUUID& operator=(const DtUUID & orig);
408 
409  bool operator!=(const DtRwUUID & orig) const { return !(*this == orig); };
410  bool operator==(const DtRwUUID & orig) const;
411 
412  virtual const char* xmlType() const
413  {
414  return theXmlType();
415  }
416 
417  const DtUUID& uuid() const { return myUUID; };
418  DtUUID& uuid() { return myUUID; };
419 
420  virtual void clearUUID();
421  virtual DtString uuidString() const;
422  virtual bool isValid() const;
423  virtual void generateUUID();
424  virtual void setUUID(const DtRwUUID& u);
425  virtual void setUUID(const DtString& uuid);
426  virtual void setStringUUID(const DtString& uuid);
427  virtual bool isVrfUUID() const;
428 
429 #ifdef _DEBUG
430  void updateDebugMarkingText() { myUUID.updateDebugMarkingText(); };
431 #endif
432 
433  virtual DtlObjPtr getData(DtlObjPtr args, const SearchPaths& searchPaths,
434  const DtVariableBindingsList& variableBindings);
435  virtual void getSelf(DtlObjPtr args, const SearchPaths& searchPaths = DtReaderWriter::SearchPaths(),
436  const DtVariableBindingsList& variableBindings = DtVariableBindingsList());
437  virtual void getSelf(const DtEnvironmentSP env, const DtEnvValueSP root,
439  const DtVariableBindingsList& varBindings = DtVariableBindingsList());
440  virtual void getData(const DtEnvironmentSP, const DtEnvValueSP,
441  const SearchPaths& searchPaths = SearchPaths(),
442  const DtVariableBindingsList& bindings = DtVariableBindingsList());
443  virtual void putSelf(std::string& fp, int indentLevel = 0,
444  bool writeUnspecified = false, const DtFilename& path =
445  DtFilename::nullFilename());
446  virtual void putSelf(DtEnvironmentSP env, DtEnvValueSP parent) const;
447  virtual void putData(DtEnvironmentSP, DtEnvValueSP value) const;
448  virtual void putData(std::string& fp, int);
449 
450 protected:
452  virtual void noRwValueSpecified();
453 
456  virtual void uuidChanged();
457 
458 protected:
459  mutable DtUUID myUUID;
460 };
461 
465 {
466 public:
468  DtRwObjectName();
469 
471  DtRwObjectName(const DtString& name, DtReaderWriterRegistry* const parentRegistry = NULL);
472  DtRwObjectName(const DtSymbolString& name, DtReaderWriterRegistry* const parentRegistry = NULL);
473 
475  DtRwObjectName(const DtString& name,
476  const char* fromChars,
477  DtReaderWriterRegistry* const parentRegistry = NULL);
478 
479  DtRwObjectName(const DtSymbolString& name,
480  const char* fromChars,
481  DtReaderWriterRegistry* const parentRegistry = NULL);
482 
483  DtRwObjectName(const DtString& name,
484  const DtString& fromString,
485  DtReaderWriterRegistry* const parentRegistry = NULL);
486 
487  DtRwObjectName(const DtSymbolString& name,
488  const DtString& fromString,
489  DtReaderWriterRegistry* const parentRegistry = NULL);
490 
491  DtRwObjectName(const DtString& name,
492  const DtRwObjectName& fromString,
493  DtReaderWriterRegistry* const parentRegistry = NULL);
494 
495  DtRwObjectName(const DtSymbolString& name,
496  const DtRwObjectName& fromString,
497  DtReaderWriterRegistry* const parentRegistry = NULL);
498 
500  DtRwObjectName(const DtRwObjectName& orig, DtReaderWriterRegistry* const parentRegistry = NULL);
501 
503  DtRwObjectName& operator=(const DtRwObjectName & orig);
504  DtRwObjectName& operator=(const DtUUID & orig);
505 
506  virtual ~DtRwObjectName();
507 
509  static const char* theXmlType();
510 
511  virtual const char* xmlType() const
512  {
513  return theXmlType();
514  }
515 
519  virtual const char* readerWriterType() const;
520 };
521 
522 DT_DLL_vrfutil std::size_t hash_value(DtUUID const& b);
523 DT_DLL_vrfutil std::size_t hash_value(DtString const& b);

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)