tess 1.0.0
Performance-first tile and path simulation substrate
Loading...
Searching...
No Matches
metadata_types.h
1#pragma once
2
3#include <tess/core/fail_fast.h>
4
5#include <cstdint>
6#include <limits>
7#include <type_traits>
8
9namespace tess {
10
12struct DirtyMask {
13 std::uint32_t value = 0;
14
15 [[nodiscard]] constexpr bool empty() const noexcept { return value == 0; }
16 [[nodiscard]] constexpr explicit operator bool() const noexcept {
17 return !empty();
18 }
19
20 friend constexpr bool operator==(DirtyMask lhs,
21 DirtyMask rhs) noexcept = default;
22};
23
24[[nodiscard]] constexpr DirtyMask operator|(DirtyMask lhs,
25 DirtyMask rhs) noexcept {
26 return DirtyMask{lhs.value | rhs.value};
27}
28
29[[nodiscard]] constexpr DirtyMask operator&(DirtyMask lhs,
30 DirtyMask rhs) noexcept {
31 return DirtyMask{lhs.value & rhs.value};
32}
33
34[[nodiscard]] constexpr DirtyMask operator~(DirtyMask mask) noexcept {
35 return DirtyMask{~mask.value};
36}
37
38constexpr DirtyMask& operator|=(DirtyMask& lhs, DirtyMask rhs) noexcept {
39 lhs = lhs | rhs;
40 return lhs;
41}
42
43constexpr DirtyMask& operator&=(DirtyMask& lhs, DirtyMask rhs) noexcept {
44 lhs = lhs & rhs;
45 return lhs;
46}
47
49struct ActiveMask {
50 std::uint32_t value = 0;
51
52 [[nodiscard]] constexpr bool empty() const noexcept { return value == 0; }
53 [[nodiscard]] constexpr explicit operator bool() const noexcept {
54 return !empty();
55 }
56
57 friend constexpr bool operator==(ActiveMask lhs,
58 ActiveMask rhs) noexcept = default;
59};
60
61[[nodiscard]] constexpr ActiveMask operator|(ActiveMask lhs,
62 ActiveMask rhs) noexcept {
63 return ActiveMask{lhs.value | rhs.value};
64}
65
66[[nodiscard]] constexpr ActiveMask operator&(ActiveMask lhs,
67 ActiveMask rhs) noexcept {
68 return ActiveMask{lhs.value & rhs.value};
69}
70
71[[nodiscard]] constexpr ActiveMask operator~(ActiveMask mask) noexcept {
72 return ActiveMask{~mask.value};
73}
74
75constexpr ActiveMask& operator|=(ActiveMask& lhs, ActiveMask rhs) noexcept {
76 lhs = lhs | rhs;
77 return lhs;
78}
79
80constexpr ActiveMask& operator&=(ActiveMask& lhs, ActiveMask rhs) noexcept {
81 lhs = lhs & rhs;
82 return lhs;
83}
84
87 std::uint64_t value = 0;
88
89 friend constexpr bool operator==(ContentVersion lhs,
90 ContentVersion rhs) noexcept = default;
91};
92
93inline ContentVersion& operator++(ContentVersion& version) noexcept {
94 if (version.value == std::numeric_limits<std::uint64_t>::max()) {
95 detail::fail_fast("ContentVersion exhausted");
96 }
97 ++version.value;
98 return version;
99}
100
103 std::uint64_t value = 0;
104
105 friend constexpr bool operator==(TopologyVersion lhs,
106 TopologyVersion rhs) noexcept = default;
107};
108
109inline TopologyVersion& operator++(TopologyVersion& version) noexcept {
110 if (version.value == std::numeric_limits<std::uint64_t>::max()) {
111 detail::fail_fast("TopologyVersion exhausted");
112 }
113 ++version.value;
114 return version;
115}
116
119 std::uint64_t value = 0;
120
121 [[nodiscard]] constexpr bool valid() const noexcept { return value != 0; }
122
123 friend constexpr bool operator==(ResidencyGeneration lhs,
124 ResidencyGeneration rhs) noexcept = default;
125};
126
127inline ResidencyGeneration& operator++(
128 ResidencyGeneration& generation) noexcept {
129 if (generation.value == std::numeric_limits<std::uint64_t>::max()) {
130 detail::fail_fast("ResidencyGeneration exhausted");
131 }
132 ++generation.value;
133 return generation;
134}
135
136static_assert(std::is_standard_layout_v<DirtyMask>);
137static_assert(std::is_trivially_copyable_v<DirtyMask>);
138static_assert(sizeof(DirtyMask) == sizeof(std::uint32_t));
139static_assert(alignof(DirtyMask) == alignof(std::uint32_t));
140static_assert(std::is_standard_layout_v<ActiveMask>);
141static_assert(std::is_trivially_copyable_v<ActiveMask>);
142static_assert(sizeof(ActiveMask) == sizeof(std::uint32_t));
143static_assert(alignof(ActiveMask) == alignof(std::uint32_t));
144static_assert(std::is_standard_layout_v<ContentVersion>);
145static_assert(std::is_trivially_copyable_v<ContentVersion>);
146static_assert(sizeof(ContentVersion) == sizeof(std::uint64_t));
147static_assert(alignof(ContentVersion) == alignof(std::uint64_t));
148static_assert(std::is_standard_layout_v<TopologyVersion>);
149static_assert(std::is_trivially_copyable_v<TopologyVersion>);
150static_assert(sizeof(TopologyVersion) == sizeof(std::uint64_t));
151static_assert(alignof(TopologyVersion) == alignof(std::uint64_t));
152static_assert(std::is_standard_layout_v<ResidencyGeneration>);
153static_assert(std::is_trivially_copyable_v<ResidencyGeneration>);
154static_assert(sizeof(ResidencyGeneration) == sizeof(std::uint64_t));
155static_assert(alignof(ResidencyGeneration) == alignof(std::uint64_t));
156
157} // namespace tess
Definition metadata_types.h:49
Definition metadata_types.h:86
Definition metadata_types.h:12
Definition metadata_types.h:118
Definition metadata_types.h:102
Definition version.h:21