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 DtString uuidString() const;
240 
242  virtual const char* string() const;
243 
248  static DtString uuidMarking();
249 
251  virtual void setMarkingText(const DtString&);
252 
255  virtual void setStringUUID(const DtString&);
256 
258  virtual void generateUUID();
259 
261  virtual void clearUUID();
262 
263  bool operator==(const DtUUID&) const;
264  bool operator==(const DtRwUUID&) const;
265 
266  bool operator!=(const DtUUID& rhs) const { return !(*this == rhs); };
267  bool operator!=(const DtString& rhs) const { return !(*this == rhs); };
268  bool operator!=(const DtRwUUID& rhs) const { return !(*this == rhs); };
269 
270  virtual bool isValid() const;
271 
272  size_t hashValue() const;
273 
274 #ifdef _DEBUG
275  void updateDebugMarkingText();
276 #endif
277 
278  bool isVrfUUID() const
279  {
280  return myIsVrfUUID;
281  }
282 
283  boost::uuids::uuid uuid() const
284  {
285  return myBoostUUID;
286  }
287 
288  static DtUUID nullUUID();
289 
291  virtual DtString markingText() const;
292 
293  static DtUUIDMarkingTextResolutionManager& markingTextResolutionManager();
294 
295  //-------------------------------------------
298 
300  DtString objectType() const;
301 
304 
307  bool deserialize(const DtString& data);
308 
310  static DtAsciiSerializable* creator();
312 
313 protected:
314  friend class boost::serialization::access;
315 
319  template<class Archive>
320  void serialize(Archive & ar, const unsigned int version)
321  {
322  if (Archive::is_loading::value)
323  {
324  std::string uuidS;
325 
326  ar & BOOST_SERIALIZATION_NVP(uuidS);
327 
328  setUUID(uuidS.c_str());
329  }
330  else
331  {
332  std::string uuidS = uuidString().c_str();
333 
334  ar & BOOST_SERIALIZATION_NVP(uuidS);
335  }
336  }
337 
338 protected:
339  virtual boost::uuids::uuid convertToVrfUUID(const DtString&);
340  virtual boost::uuids::uuid convertStringToBoostUUID(const DtString&, bool blockMarkingTextLookup = false);
341  virtual const char* convertStringToStringUUID(const char* t) const;
342 
343 protected:
346  mutable boost::uuids::uuid myBoostUUID;
347  mutable std::string myStringUUID;
348 
351 
354 
356 
357 #ifdef _DEBUG
358 
359 
360  DtString myDebugMarkingText;
361 #endif
362 
365 };
366 
372 {
373 public:
375  DtRwUUID();
376  DtRwUUID(const DtString& name, DtReaderWriterRegistry* const parentRegistry);
377  DtRwUUID(const DtSymbolString& name, DtReaderWriterRegistry* const parentRegistry);
378 
380  DtRwUUID(const DtString& name, const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
381  DtRwUUID(const DtSymbolString& name, const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
382  DtRwUUID(const DtSymbolString& name, const DtUUID&, DtReaderWriterRegistry* const parentRegistry);
383  DtRwUUID(const DtString& name, const DtUUID&, DtReaderWriterRegistry* const parentRegistry);
384  DtRwUUID(const DtRwUUID&, DtReaderWriterRegistry* const parentRegistry);
385  DtRwUUID(const DtRwUUID&);
386  DtRwUUID(const DtUUID&);
387 
388  virtual ~DtRwUUID();
389 
393  virtual const char* readerWriterType() const;
394 
395  virtual void setMarkingText(const DtString&);
396  virtual DtString markingText() const;
397 
399  static const char* theXmlType();
400 
401  operator const DtUUID& () const { return myUUID; };
402 
403  DtRwUUID& operator=(const DtRwUUID & orig);
404  DtRwUUID& operator=(const DtUUID & orig);
405 
406  bool operator!=(const DtRwUUID & orig) const { return !(*this == orig); };
407  bool operator==(const DtRwUUID & orig) const;
408 
409  virtual const char* xmlType() const
410  {
411  return theXmlType();
412  }
413 
414  const DtUUID& uuid() const { return myUUID; };
415  DtUUID& uuid() { return myUUID; };
416 
417  virtual void clearUUID();
418  virtual DtString uuidString() const;
419  virtual bool isValid() const;
420  virtual void generateUUID();
421  virtual void setUUID(const DtRwUUID& u);
422  virtual void setUUID(const DtString& uuid);
423  virtual void setStringUUID(const DtString& uuid);
424  virtual bool isVrfUUID() const;
425 
426 #ifdef _DEBUG
427  void updateDebugMarkingText() { myUUID.updateDebugMarkingText(); };
428 #endif
429 
430  virtual DtlObjPtr getData(DtlObjPtr args, const SearchPaths& searchPaths,
431  const DtVariableBindingsList& variableBindings);
432  virtual void getSelf(DtlObjPtr args, const SearchPaths& searchPaths = DtReaderWriter::SearchPaths(),
433  const DtVariableBindingsList& variableBindings = DtVariableBindingsList());
434  virtual void getSelf(const DtEnvironmentSP env, const DtEnvValueSP root,
436  const DtVariableBindingsList& varBindings = DtVariableBindingsList());
437  virtual void getData(const DtEnvironmentSP, const DtEnvValueSP,
438  const SearchPaths& searchPaths = SearchPaths(),
439  const DtVariableBindingsList& bindings = DtVariableBindingsList());
440  virtual void putSelf(FILE* fp, int indentLevel = 0,
441  bool writeUnspecified = false, const DtFilename& path =
442  DtFilename::nullFilename());
443  virtual void putSelf(DtEnvironmentSP env, DtEnvValueSP parent) const;
444  virtual void putData(DtEnvironmentSP, DtEnvValueSP value) const;
445  virtual void putData(FILE* fp, int);
446 
447 protected:
449  virtual void noRwValueSpecified();
450 
453  virtual void uuidChanged();
454 
455 protected:
456  mutable DtUUID myUUID;
457 };
458 
462 {
463 public:
465  DtRwObjectName();
466 
468  DtRwObjectName(const DtString& name, DtReaderWriterRegistry* const parentRegistry = NULL);
469  DtRwObjectName(const DtSymbolString& name, DtReaderWriterRegistry* const parentRegistry = NULL);
470 
472  DtRwObjectName(const DtString& name,
473  const char* fromChars,
474  DtReaderWriterRegistry* const parentRegistry = NULL);
475 
476  DtRwObjectName(const DtSymbolString& name,
477  const char* fromChars,
478  DtReaderWriterRegistry* const parentRegistry = NULL);
479 
480  DtRwObjectName(const DtString& name,
481  const DtString& fromString,
482  DtReaderWriterRegistry* const parentRegistry = NULL);
483 
484  DtRwObjectName(const DtSymbolString& name,
485  const DtString& fromString,
486  DtReaderWriterRegistry* const parentRegistry = NULL);
487 
488  DtRwObjectName(const DtString& name,
489  const DtRwObjectName& fromString,
490  DtReaderWriterRegistry* const parentRegistry = NULL);
491 
492  DtRwObjectName(const DtSymbolString& name,
493  const DtRwObjectName& fromString,
494  DtReaderWriterRegistry* const parentRegistry = NULL);
495 
497  DtRwObjectName(const DtRwObjectName& orig, DtReaderWriterRegistry* const parentRegistry = NULL);
498 
500  DtRwObjectName& operator=(const DtRwObjectName & orig);
501  DtRwObjectName& operator=(const DtUUID & orig);
502 
503  virtual ~DtRwObjectName();
504 
506  static const char* theXmlType();
507 
508  virtual const char* xmlType() const
509  {
510  return theXmlType();
511  }
512 
516  virtual const char* readerWriterType() const;
517 };
518 
519 DT_DLL_vrfutil std::size_t hash_value(DtUUID const& b);
520 DT_DLL_vrfutil std::size_t hash_value(DtString const& b);

Document ID: Generated on Tue Mar 8 22:13:38 EST 2016 from SVN revision 162938
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)