// Copyright (C) 2023 Full Cycle Games // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_CORE_UUID_HPP #define NAZARA_CORE_UUID_HPP #include #include #include #include #include #include namespace Nz { class NAZARA_CORE_API Uuid { public: constexpr Uuid(); constexpr Uuid(const std::array& uuid); Uuid(const Uuid&) = default; Uuid(Uuid&&) = default; ~Uuid() = default; constexpr bool IsNull() const; constexpr const std::array& ToArray() const; inline std::string ToString() const; std::array ToStringArray() const; Uuid& operator=(const Uuid&) = default; Uuid& operator=(Uuid&&) = default; static constexpr Uuid FromString(std::string_view str); static Uuid Generate(); private: std::array m_uuid; }; inline std::ostream& operator<<(std::ostream& out, const Uuid& uuid); constexpr bool operator==(const Uuid& lhs, const Uuid& rhs); constexpr bool operator!=(const Uuid& lhs, const Uuid& rhs); constexpr bool operator<(const Uuid& lhs, const Uuid& rhs); constexpr bool operator<=(const Uuid& lhs, const Uuid& rhs); constexpr bool operator>(const Uuid& lhs, const Uuid& rhs); constexpr bool operator>=(const Uuid& lhs, const Uuid& rhs); inline bool Serialize(SerializationContext& context, const Uuid& value, TypeTag); inline bool Unserialize(SerializationContext& context, Uuid* value, TypeTag); } namespace std { template<> struct hash; } #include #endif // NAZARA_CORE_UUID_HPP