#pragma once #include "Utils.hpp" #include #include #include #include #include #define BRUSSEL_Uid_SCAN_STR "%" PRIx64 "-%" PRIx64 #define BRUSSEL_Uid_SCAN_EXPAND(uid) &((uid).upper), &((uid).upper) #define BRUSSEL_Uid_FORMAT_STR "%016" PRIx64 "-%016" PRIx64 #define BRUSSEL_Uid_FORMAT_EXPAND(uid) (uid).upper, (uid).lower struct Uid { uint64_t upper = 0; uint64_t lower = 0; static Uid Create(); bool IsNull() const; void ReadString(std::string_view str); std::string WriteString(); void Read(const rapidjson::Value& value); void WriteInto(rapidjson::Value& value, rapidjson::Document& root) const; rapidjson::Value Write(rapidjson::Document& root) const; auto operator<=>(const Uid&) const = default; }; template <> struct std::hash { size_t operator()(const Uid& uid) const { size_t hash = 0; Utils::HashCombine(hash, uid.upper); Utils::HashCombine(hash, uid.lower); return hash; } };