9 #include "Mountain/core.hpp" 17 class MOUNTAIN_API
Guid final
19 static constexpr
size_t Data4Size = 8;
22 constexpr
Guid() =
default;
34 static Guid FromString(
const char_t* str);
37 uint32_t GetData1()
const;
40 uint16_t GetData2()
const;
43 uint16_t GetData3()
const;
46 const std::array<uint8_t, Data4Size>& GetData4()
const;
61 explicit operator std::string()
const;
67 std::array<uint8_t, Data4Size> m_Data4 = {};
69 friend struct std::hash<Guid>;
77 static constexpr
size_t RandomValue = 0x9E3779B9;
82 result ^= std::hash<decltype(guid.m_Data1)>()(guid.m_Data1) + RandomValue;
83 result ^= std::hash<decltype(guid.m_Data2)>()(guid.m_Data2) + RandomValue + (result << 6) + (result >> 2);
84 result ^= std::hash<decltype(guid.m_Data3)>()(guid.m_Data3) + RandomValue + (result << 6) + (result >> 2);
86 for (
size_t i = 0; i < Mountain::Guid::Data4Size; i++)
88 result ^= std::hash<std::remove_cvref_t<decltype(guid.m_Data4[i])>>()(guid.m_Data4[i]) + RandomValue + (result << 6) + (result >> 2);
100 template <
class ParseContext>
101 constexpr
typename ParseContext::iterator
parse(ParseContext& ctx)
103 auto it = ctx.begin();
108 throw std::format_error(
"Invalid format args for Mountain::Guid");
115 template <
class FormatContext>
118 std::ostringstream out;
120 out << static_cast<std::string>(guid);
122 return std::ranges::copy(std::move(out).str(), ctx.out()).out;
constexpr bool_t operator==(const Color &c1, const Color &c2)
Compares 2 Color component-wise.
static constexpr Guid Empty()
Empty guid.
constexpr bool_t operator!=(const Color &c1, const Color &c2)
Compares 2 Color component-wise.
Stands for Global Unique Identifier, it represents a unique ID that's used to link pointers during se...
Contains all declarations of the Mountain Framework.