#ifndef OPENMW_COMPONENTS_ESM_GENERATEDREFID_HPP #define OPENMW_COMPONENTS_ESM_GENERATEDREFID_HPP #include <cstdint> #include <functional> #include <iosfwd> #include <string> namespace ESM { class GeneratedRefId { public: constexpr explicit GeneratedRefId(std::uint64_t value) noexcept : mValue(value) { } constexpr std::uint64_t getValue() const { return mValue; } std::string toString() const; std::string toDebugString() const; constexpr bool operator==(GeneratedRefId rhs) const noexcept { return mValue == rhs.mValue; } constexpr bool operator<(GeneratedRefId rhs) const noexcept { return mValue < rhs.mValue; } friend std::ostream& operator<<(std::ostream& stream, GeneratedRefId value); friend struct std::hash<GeneratedRefId>; private: std::uint64_t mValue; }; } namespace std { template <> struct hash<ESM::GeneratedRefId> { std::size_t operator()(ESM::GeneratedRefId value) const noexcept { return std::hash<std::uint64_t>{}(value.mValue); } }; } #endif