15 #include <boost/uuid/uuid.hpp>
16 #include <boost/unordered_map.hpp>
17 #include <boost/unordered_set.hpp>
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>
33 virtual void uuidChanged() = 0;
45 operator DtString () {
return markingText(); };
89 virtual void setResolveMarkingTextToUUIDMapping(
bool);
90 virtual bool resolveMarkingTextToUUIDMapping()
const;
92 virtual void setResolveUUIDToUUIDMapping(
bool);
94 virtual bool resolveUUIDToUUIDMapping()
const;
97 virtual void resolveUUIDMapping(
bool clearWhenDone =
false);
101 virtual void addUUIDForUpgrade(
DtUUID*);
102 virtual void removeUUIDForUpgrade(
DtUUID*);
106 virtual void objectUUIDChanged(
const DtUUID& oldUUID,
const DtUUID& newUUID);
113 virtual void removeUUIDToMarkingTextMapping(
const DtUUID&);
116 virtual void addUUIDToUUIDMapping(
const DtUUID& old,
const DtUUID& newUUID);
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;
124 virtual bool hasUUID(
const DtUUID&)
const;
127 virtual void addMarkingTextToMarkingTextMapping(
const DtString& oldMarkingText,
const DtString& newMarkingText);
136 virtual void pushMappingContext();
140 virtual void popMappingContext(
bool merge =
false);
146 virtual DtString markingText(
const DtUUID&,
bool* found = 0)
const;
155 virtual void markingTextUpdated(
const DtString& oldText,
const DtString& newText);
158 const UUIDsForUpgrade& uuidsForMarkingTextUpgrade(
int context = -1)
const;
181 virtual void resolveToMarkingTextMapping();
184 virtual void resolveToUUIDMapping(
bool clearWhenDone =
false);
191 virtual bool hasMarkingTextToUUIDMapForImport(
const DtString&)
const;
235 explicit DtUUID(
const std::string&,
DtUUIDOwner* = 0,
bool blockMarkingTextLookup =
false);
236 explicit DtUUID(
const char*,
DtUUIDOwner* = 0,
bool blockMarkingTextLookup =
false);
239 DtUUID& operator=(
const boost::uuids::uuid & orig);
240 bool operator<(
const DtUUID & rhs)
const;
246 static bool isVrfUUID(
const DtString&);
249 virtual void setUUID(
const DtString&,
bool blockMarkingTextLookup =
false);
250 virtual const DtString& uuidString()
const;
253 virtual const char* string()
const;
265 virtual void setMarkingText(
const DtString&);
269 virtual void setStringUUID(
const DtString&);
272 virtual void generateUUID();
275 virtual void clearUUID();
287 virtual bool isValid()
const;
289 size_t hashValue()
const;
292 void updateDebugMarkingText();
295 bool isVrfUUID()
const
300 boost::uuids::uuid uuid()
const
305 static const DtUUID& nullUUID();
308 virtual DtString markingText()
const;
332 friend class boost::serialization::access;
337 template<
class Archive>
338 void serialize(Archive & ar,
const unsigned int version)
340 if (Archive::is_loading::value)
344 ar & BOOST_SERIALIZATION_NVP(uuidS);
346 setUUID(uuidS.c_str());
350 std::string uuidS = uuidString().c_str();
352 ar & BOOST_SERIALIZATION_NVP(uuidS);
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;
416 virtual void setMarkingText(
const DtString&);
417 virtual DtString markingText()
const;
422 operator const DtUUID& ()
const {
return myUUID; };
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;
448 void updateDebugMarkingText() { myUUID.updateDebugMarkingText(); };
451 virtual DtlObjPtr
getData(DtlObjPtr args,
const SearchPaths& searchPaths,
461 virtual void putSelf(std::string& fp,
int indentLevel = 0,
462 bool writeUnspecified =
false,
const DtFilename& path =
463 DtFilename::nullFilename());
466 virtual void putData(std::string& fp,
int);
470 virtual void noRwValueSpecified();
494 const char* fromChars,
498 const char* fromChars,