26#include <boost/uuid/uuid.hpp>
27#include <nlohmann/json_fwd.hpp>
50 KIID(
const std::string& aString );
51 KIID(
const char* aString );
52 KIID(
const wxString& aString );
63 static KIID FromBytes(
const std::array<uint8_t, 16>& aBytes );
71 std::array<uint8_t, 16>
AsBytes()
const;
76 static bool SniffTest(
const wxString& aCandidate );
180 bool MakeRelativeTo(
const KIID_PATH& aPath );
191 bool EndsWith(
const KIID_PATH& aPath )
const;
193 wxString AsString()
const;
197 if( size() != rhs.size() )
200 for(
size_t i = 0; i < size(); ++i )
202 if( at( i ) != rhs.at( i ) )
211 if( size() != rhs.size() )
212 return size() < rhs.size();
214 for(
size_t i = 0; i < size(); ++i )
216 if( at( i ) < rhs.at( i ) )
219 if( at( i ) != rhs.at( i ) )
228 if( size() != rhs.size() )
229 return size() > rhs.size();
231 for(
size_t i = 0; i < size(); ++i )
233 if( at( i ) > rhs.at( i ) )
236 if( at( i ) != rhs.at( i ) )
245 for(
const KIID& kiid : aRhs )
246 emplace_back( kiid );
285 std::size_t seed = 0;
287 for(
const KIID& kiid : aPath )
288 seed ^= std::hash<KIID>()( kiid ) + 0x9e3779b9 + ( seed << 6 ) + ( seed >> 2 );
KIID_PATH & operator+=(const KIID_PATH &aRhs)
bool operator>(KIID_PATH const &rhs) const
bool operator==(KIID_PATH const &rhs) const
bool operator<(KIID_PATH const &rhs) const
friend KIID_PATH operator+(KIID_PATH aLhs, const KIID_PATH &aRhs)
static void SeedGenerator(unsigned int aSeed)
Re-initialize the UUID generator with a given seed (for testing or QA purposes)
wxString AsString() const
std::array< uint8_t, 16 > AsBytes() const
static KIID Combine(const KIID &aFirst, const KIID &aSecond)
Creates a deterministic KIID from two input KIIDs by XORing their underlying UUIDs.
boost::uuids::uuid m_uuid
void Increment()
Generates a deterministic replacement for a given ID.
bool operator>(KIID const &rhs) const
std::string AsStdString() const
wxString AsLegacyTimestampString() const
timestamp_t AsLegacyTimestamp() const
static KIID FromBytes(const std::array< uint8_t, 16 > &aBytes)
static void CreateNilUuids(bool aNil=true)
A performance optimization which disables/enables the generation of pseudo-random UUIDs.
static bool SniffTest(const wxString &aCandidate)
Returns true if a string has the correct formatting to be a KIID.
static KIID FromDeterministicString(const wxString &aName)
Build a deterministic UUID from an arbitrary name string.
bool operator!=(KIID const &rhs) const
static KIID FromName(const std::string &aName)
Return a KIID derived from a name, the same name always gives the same KIID.
bool operator==(KIID const &rhs) const
void Clone(const KIID &aUUID)
bool IsLegacyTimestamp() const
bool operator<(KIID const &rhs) const
void ConvertTimestampToUuid()
Change an existing time stamp based UUID into a true UUID.
KICOMMON_API KIID & NilUuid()
KICOMMON_API void from_json(const nlohmann::json &aJson, KIID &aKIID)
KICOMMON_API void to_json(nlohmann::json &aJson, const KIID &aKIID)
uint32_t timestamp_t
timestamp_t is our type to represent unique IDs for all kinds of elements; historically simply the ti...
std::size_t operator()(const KIID &aId) const
std::size_t operator()(const KIID_PATH &aPath) const