diff options
Diffstat (limited to 'src/common')
| -rw-r--r-- | src/common/hex_util.h | 3 | ||||
| -rw-r--r-- | src/common/typed_address.h | 82 |
2 files changed, 44 insertions, 41 deletions
diff --git a/src/common/hex_util.h b/src/common/hex_util.h index a00904939..618f53152 100644 --- a/src/common/hex_util.h +++ b/src/common/hex_util.h | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <string> | 9 | #include <string> |
| 10 | #include <vector> | 10 | #include <vector> |
| 11 | #include <fmt/format.h> | 11 | #include <fmt/format.h> |
| 12 | #include "common/assert.h" | ||
| 12 | #include "common/common_types.h" | 13 | #include "common/common_types.h" |
| 13 | 14 | ||
| 14 | namespace Common { | 15 | namespace Common { |
| @@ -29,6 +30,8 @@ namespace Common { | |||
| 29 | 30 | ||
| 30 | template <std::size_t Size, bool le = false> | 31 | template <std::size_t Size, bool le = false> |
| 31 | [[nodiscard]] constexpr std::array<u8, Size> HexStringToArray(std::string_view str) { | 32 | [[nodiscard]] constexpr std::array<u8, Size> HexStringToArray(std::string_view str) { |
| 33 | ASSERT_MSG(Size * 2 <= str.size(), "Invalid string size"); | ||
| 34 | |||
| 32 | std::array<u8, Size> out{}; | 35 | std::array<u8, Size> out{}; |
| 33 | if constexpr (le) { | 36 | if constexpr (le) { |
| 34 | for (std::size_t i = 2 * Size - 2; i <= 2 * Size; i -= 2) { | 37 | for (std::size_t i = 2 * Size - 2; i <= 2 * Size; i -= 2) { |
diff --git a/src/common/typed_address.h b/src/common/typed_address.h index 64f4a07c2..d5e743583 100644 --- a/src/common/typed_address.h +++ b/src/common/typed_address.h | |||
| @@ -186,68 +186,68 @@ static_assert(std::is_trivially_destructible_v<PhysicalAddress>); | |||
| 186 | static_assert(std::is_trivially_destructible_v<VirtualAddress>); | 186 | static_assert(std::is_trivially_destructible_v<VirtualAddress>); |
| 187 | static_assert(std::is_trivially_destructible_v<ProcessAddress>); | 187 | static_assert(std::is_trivially_destructible_v<ProcessAddress>); |
| 188 | 188 | ||
| 189 | static_assert(Null<uint64_t> == 0); | 189 | static_assert(Null<uint64_t> == 0U); |
| 190 | static_assert(Null<PhysicalAddress> == Null<uint64_t>); | 190 | static_assert(Null<PhysicalAddress> == Null<uint64_t>); |
| 191 | static_assert(Null<VirtualAddress> == Null<uint64_t>); | 191 | static_assert(Null<VirtualAddress> == Null<uint64_t>); |
| 192 | static_assert(Null<ProcessAddress> == Null<uint64_t>); | 192 | static_assert(Null<ProcessAddress> == Null<uint64_t>); |
| 193 | 193 | ||
| 194 | // Constructor/assignment validations. | 194 | // Constructor/assignment validations. |
| 195 | static_assert([] { | 195 | static_assert([] { |
| 196 | const PhysicalAddress a(5); | 196 | const PhysicalAddress a(5U); |
| 197 | PhysicalAddress b(a); | 197 | PhysicalAddress b(a); |
| 198 | return b; | 198 | return b; |
| 199 | }() == PhysicalAddress(5)); | 199 | }() == PhysicalAddress(5U)); |
| 200 | static_assert([] { | 200 | static_assert([] { |
| 201 | const PhysicalAddress a(5); | 201 | const PhysicalAddress a(5U); |
| 202 | PhysicalAddress b(10); | 202 | PhysicalAddress b(10U); |
| 203 | b = a; | 203 | b = a; |
| 204 | return b; | 204 | return b; |
| 205 | }() == PhysicalAddress(5)); | 205 | }() == PhysicalAddress(5U)); |
| 206 | 206 | ||
| 207 | // Arithmetic validations. | 207 | // Arithmetic validations. |
| 208 | static_assert(PhysicalAddress(10) + 5 == PhysicalAddress(15)); | 208 | static_assert(PhysicalAddress(10U) + 5U == PhysicalAddress(15U)); |
| 209 | static_assert(PhysicalAddress(10) - 5 == PhysicalAddress(5)); | 209 | static_assert(PhysicalAddress(10U) - 5U == PhysicalAddress(5U)); |
| 210 | static_assert([] { | 210 | static_assert([] { |
| 211 | PhysicalAddress v(10); | 211 | PhysicalAddress v(10U); |
| 212 | v += 5; | 212 | v += 5U; |
| 213 | return v; | 213 | return v; |
| 214 | }() == PhysicalAddress(15)); | 214 | }() == PhysicalAddress(15U)); |
| 215 | static_assert([] { | 215 | static_assert([] { |
| 216 | PhysicalAddress v(10); | 216 | PhysicalAddress v(10U); |
| 217 | v -= 5; | 217 | v -= 5U; |
| 218 | return v; | 218 | return v; |
| 219 | }() == PhysicalAddress(5)); | 219 | }() == PhysicalAddress(5U)); |
| 220 | static_assert(PhysicalAddress(10)++ == PhysicalAddress(10)); | 220 | static_assert(PhysicalAddress(10U)++ == PhysicalAddress(10U)); |
| 221 | static_assert(++PhysicalAddress(10) == PhysicalAddress(11)); | 221 | static_assert(++PhysicalAddress(10U) == PhysicalAddress(11U)); |
| 222 | static_assert(PhysicalAddress(10)-- == PhysicalAddress(10)); | 222 | static_assert(PhysicalAddress(10U)-- == PhysicalAddress(10U)); |
| 223 | static_assert(--PhysicalAddress(10) == PhysicalAddress(9)); | 223 | static_assert(--PhysicalAddress(10U) == PhysicalAddress(9U)); |
| 224 | 224 | ||
| 225 | // Logical validations. | 225 | // Logical validations. |
| 226 | static_assert((PhysicalAddress(0b11111111) >> 1) == 0b01111111); | 226 | static_assert((PhysicalAddress(0b11111111U) >> 1) == 0b01111111U); |
| 227 | static_assert((PhysicalAddress(0b10101010) >> 1) == 0b01010101); | 227 | static_assert((PhysicalAddress(0b10101010U) >> 1) == 0b01010101U); |
| 228 | static_assert((PhysicalAddress(0b11111111) << 1) == 0b111111110); | 228 | static_assert((PhysicalAddress(0b11111111U) << 1) == 0b111111110U); |
| 229 | static_assert((PhysicalAddress(0b01010101) << 1) == 0b10101010); | 229 | static_assert((PhysicalAddress(0b01010101U) << 1) == 0b10101010U); |
| 230 | static_assert((PhysicalAddress(0b11111111) & 0b01010101) == 0b01010101); | 230 | static_assert((PhysicalAddress(0b11111111U) & 0b01010101U) == 0b01010101U); |
| 231 | static_assert((PhysicalAddress(0b11111111) & 0b10101010) == 0b10101010); | 231 | static_assert((PhysicalAddress(0b11111111U) & 0b10101010U) == 0b10101010U); |
| 232 | static_assert((PhysicalAddress(0b01010101) & 0b10101010) == 0b00000000); | 232 | static_assert((PhysicalAddress(0b01010101U) & 0b10101010U) == 0b00000000U); |
| 233 | static_assert((PhysicalAddress(0b00000000) | 0b01010101) == 0b01010101); | 233 | static_assert((PhysicalAddress(0b00000000U) | 0b01010101U) == 0b01010101U); |
| 234 | static_assert((PhysicalAddress(0b11111111) | 0b01010101) == 0b11111111); | 234 | static_assert((PhysicalAddress(0b11111111U) | 0b01010101U) == 0b11111111U); |
| 235 | static_assert((PhysicalAddress(0b10101010) | 0b01010101) == 0b11111111); | 235 | static_assert((PhysicalAddress(0b10101010U) | 0b01010101U) == 0b11111111U); |
| 236 | 236 | ||
| 237 | // Comparisons. | 237 | // Comparisons. |
| 238 | static_assert(PhysicalAddress(0) == PhysicalAddress(0)); | 238 | static_assert(PhysicalAddress(0U) == PhysicalAddress(0U)); |
| 239 | static_assert(PhysicalAddress(0) != PhysicalAddress(1)); | 239 | static_assert(PhysicalAddress(0U) != PhysicalAddress(1U)); |
| 240 | static_assert(PhysicalAddress(0) < PhysicalAddress(1)); | 240 | static_assert(PhysicalAddress(0U) < PhysicalAddress(1U)); |
| 241 | static_assert(PhysicalAddress(0) <= PhysicalAddress(1)); | 241 | static_assert(PhysicalAddress(0U) <= PhysicalAddress(1U)); |
| 242 | static_assert(PhysicalAddress(1) > PhysicalAddress(0)); | 242 | static_assert(PhysicalAddress(1U) > PhysicalAddress(0U)); |
| 243 | static_assert(PhysicalAddress(1) >= PhysicalAddress(0)); | 243 | static_assert(PhysicalAddress(1U) >= PhysicalAddress(0U)); |
| 244 | 244 | ||
| 245 | static_assert(!(PhysicalAddress(0) == PhysicalAddress(1))); | 245 | static_assert(!(PhysicalAddress(0U) == PhysicalAddress(1U))); |
| 246 | static_assert(!(PhysicalAddress(0) != PhysicalAddress(0))); | 246 | static_assert(!(PhysicalAddress(0U) != PhysicalAddress(0U))); |
| 247 | static_assert(!(PhysicalAddress(1) < PhysicalAddress(0))); | 247 | static_assert(!(PhysicalAddress(1U) < PhysicalAddress(0U))); |
| 248 | static_assert(!(PhysicalAddress(1) <= PhysicalAddress(0))); | 248 | static_assert(!(PhysicalAddress(1U) <= PhysicalAddress(0U))); |
| 249 | static_assert(!(PhysicalAddress(0) > PhysicalAddress(1))); | 249 | static_assert(!(PhysicalAddress(0U) > PhysicalAddress(1U))); |
| 250 | static_assert(!(PhysicalAddress(0) >= PhysicalAddress(1))); | 250 | static_assert(!(PhysicalAddress(0U) >= PhysicalAddress(1U))); |
| 251 | 251 | ||
| 252 | } // namespace Common | 252 | } // namespace Common |
| 253 | 253 | ||