GCC Code Coverage Report


libs/base/src/base/
File: guid.h
Date: 2025-03-19 20:55:25
Lines:
16/16
100.0%
Functions:
2/2
100.0%
Branches:
2/6
33.3%

Line Branch Exec Source
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
10 namespace eu
11 {
12 /// Represents a universally unique identifier.
13 struct Guid
14 {
15 std::array<u8, 16> data;
16
17
18 /// Does nothing.
19 /// @see \ref eu::nil_guid
20 Guid() = default;
21
22 /// Set the guid data.
23 constexpr explicit Guid(std::array<u8, 16> d)
24 : data(std::move(d))
25 {
26 }
27
28 9 constexpr explicit Guid(u32 a, u16 b, u16 c, u16 d, u64 e)
29 9 : data{{
30 // a
31 9 static_cast<u8>((a >> 24) & 0xFF),
32 9 static_cast<u8>((a >> 16) & 0xFF),
33 9 static_cast<u8>((a >> 8) & 0xFF),
34 static_cast<u8>(a & 0xFF),
35 // b
36 9 static_cast<u8>((b >> 8) & 0xFF),
37 static_cast<u8>(b & 0xFF),
38 // c
39 9 static_cast<u8>((c >> 8) & 0xFF),
40 static_cast<u8>(c & 0xFF),
41 // d
42 9 static_cast<u8>((d >> 8) & 0xFF),
43 static_cast<u8>(d & 0xFF),
44 // e
45 9 static_cast<u8>((e >> 40) & 0xFF),
46 9 static_cast<u8>((e >> 32) & 0xFF),
47 9 static_cast<u8>((e >> 24) & 0xFF),
48 9 static_cast<u8>((e >> 16) & 0xFF),
49 9 static_cast<u8>((e >> 8) & 0xFF),
50 static_cast<u8>(e & 0xFF),
51 }}
52 {
53
1/4
✗ Branch 0 (2 → 3) not taken.
✓ Branch 1 (2 → 9) taken 9 times.
✗ Branch 2 (6 → 7) not taken.
✗ Branch 3 (6 → 10) not taken.
9 ASSERT((e >> 48) == 0);
54 9 }
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
62 /// Parse a guid from a string
63 [[nodiscard]] std::optional<Guid> guid_from(const std::string& str);
64
65 /// Convert a guid to a string representation, prefer fmt.
66 [[nodiscard]] std::string string_from(const Guid& g);
67
68 /// A nil guid, all bits are set to 0.
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
83 ADD_CATCH_FORMATTER_DEF(Guid)
84 }
85
86
1/2
✓ Branch 0 (2 → 3) taken 2 times.
✗ Branch 1 (2 → 17) not taken.
4 ADD_DEFAULT_FORMATTER(eu::Guid, std::string, eu::string_from);
87