Euphoria
guid.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <optional>
5#include <array>
6
7#include "base/ints.h"
8#include "assert/assert.h"
9
10namespace eu
11{
13 struct Guid
14 {
15 std::array<u8, 16> data;
16
17
20 Guid() = default;
21
23 constexpr explicit Guid(std::array<u8, 16> d)
24 : data(std::move(d))
25 {
26 }
27
28 constexpr explicit Guid(u32 a, u16 b, u16 c, u16 d, u64 e)
29 : data{{
30 // a
31 static_cast<u8>((a >> 24) & 0xFF),
32 static_cast<u8>((a >> 16) & 0xFF),
33 static_cast<u8>((a >> 8) & 0xFF),
34 static_cast<u8>(a & 0xFF),
35 // b
36 static_cast<u8>((b >> 8) & 0xFF),
37 static_cast<u8>(b & 0xFF),
38 // c
39 static_cast<u8>((c >> 8) & 0xFF),
40 static_cast<u8>(c & 0xFF),
41 // d
42 static_cast<u8>((d >> 8) & 0xFF),
43 static_cast<u8>(d & 0xFF),
44 // e
45 static_cast<u8>((e >> 40) & 0xFF),
46 static_cast<u8>((e >> 32) & 0xFF),
47 static_cast<u8>((e >> 24) & 0xFF),
48 static_cast<u8>((e >> 16) & 0xFF),
49 static_cast<u8>((e >> 8) & 0xFF),
50 static_cast<u8>(e & 0xFF),
51 }}
52 {
53 ASSERT((e >> 48) == 0);
54 }
55
56 [[nodiscard]] static std::optional<Guid> generate();
57 };
58
59 bool operator==(const Guid& lhs, const Guid& rhs);
60 bool operator!=(const Guid& lhs, const Guid& rhs);
61
63 [[nodiscard]] std::optional<Guid> guid_from(const std::string& str);
64
66 [[nodiscard]] std::string string_from(const Guid& g);
67
69 constexpr Guid nil_guid = Guid
70 {
71 std::array<u8, 16>
72 {
73 0, 0, 0, 0,
74 0, 0,
75 0, 0,
76 0, 0,
77 0, 0, 0, 0, 0, 0
78 }
79 };
80
81 // todo(Gustav): add std::map and std::unoredered map support
82
84}
85
86ADD_DEFAULT_FORMATTER(eu::Guid, std::string, eu::string_from);
#define ASSERT(x)
Assert that a value is true.
Definition assert.h:36
#define ADD_CATCH_FORMATTER_DEF(TYPE)
Definition pch.public.h:22
std::string string_from(const An &a)
Definition assert.h:109
std::uint32_t u32
Definition ints.h:14
bool operator!=(const Guid &lhs, const Guid &rhs)
std::uint16_t u16
Definition ints.h:13
constexpr Guid nil_guid
A nil guid, all bits are set to 0.
Definition guid.h:69
std::uint64_t u64
Definition ints.h:15
std::optional< Guid > guid_from(const std::string &str)
Parse a guid from a string.
std::uint8_t u8
Definition ints.h:12
bool operator==(const Guid &lhs, const Guid &rhs)
Represents a universally unique identifier.
Definition guid.h:14
Guid()=default
Does nothing.
static std::optional< Guid > generate()
std::array< u8, 16 > data
Definition guid.h:15
constexpr Guid(u32 a, u16 b, u16 c, u16 d, u64 e)
Definition guid.h:28
constexpr Guid(std::array< u8, 16 > d)
Set the guid data.
Definition guid.h:23