SPARK  0.1.0
A general purpose game engine written in C++.
Loading...
Searching...
No Matches
Uuid.h
1#pragma once
2
3#include "spark/lib/Export.h"
4
5#include "spark/base/Endianness.h"
6
7#include <string>
8
9#include <cstdint>
10
11namespace spark::lib
12{
21 class SPARK_LIB_EXPORT Uuid final
22 {
23 public:
27 explicit Uuid();
28 ~Uuid() = default;
29
34 explicit Uuid(__m128i uuid);
35
40 explicit Uuid(const uint8_t* bytes);
41
46 explicit Uuid(const std::string& bytes);
47
48 Uuid(const Uuid& other);
49 Uuid(Uuid&& other) noexcept;
50 Uuid& operator=(const Uuid& other);
51 Uuid& operator=(Uuid&& other) noexcept;
52
53 bool operator==(const Uuid& other) const;
54 bool operator!=(const Uuid& other) const;
55
56 friend std::ostream& operator<<(std::ostream& os, const Uuid& uuid);
57
62 [[nodiscard]] std::string bytes() const;
63
68 [[nodiscard]] std::string str() const;
69
74 void str(char* res) const;
75
81 friend std::size_t hash_value(const Uuid& obj);
82
83 private:
84 void bytes(std::string& out) const;
85 void bytes(char* bytes) const;
86
87 private:
88 alignas(128) std::uint8_t m_data[16];
89 };
90}
91
92template <>
93struct std::hash<spark::lib::Uuid>
94{
95 std::size_t operator()(const spark::lib::Uuid& obj) const noexcept
96 {
97 return hash_value(obj);
98 }
99};
A 128-bit universally unique identifier (UUID).
Definition Uuid.h:22