20 : be_value_{ std::bit_cast<std::array<std::uint8_t, sizeof(std::uint64_t)>>(SwapBytes(value)) }
22 constexpr uint64_t k14bitLength = (
static_cast<uint64_t
>(-1) << (64 - 6) >> (64 - 6));
23 constexpr uint64_t k30bitLength = (
static_cast<uint64_t
>(-1) << (64 - 14) >> (64 - 14));
24 constexpr uint64_t k62bitLength = (
static_cast<uint64_t
>(-1) << (64 - 30) >> (64 - 30));
26 if (be_value_.front() & 0xC0u) {
27 throw std::invalid_argument(
"Value greater than uintvar maximum");
30 std::uint64_t be_v = std::bit_cast<std::uint64_t>(be_value_);
31 if (value > k62bitLength) {
33 }
else if (value > k30bitLength) {
36 }
else if (value > k14bitLength) {
43 be_value_ = std::bit_cast<std::array<std::uint8_t,
sizeof(std::uint64_t)>>(be_v);
46 constexpr UintVar(std::span<const std::uint8_t> bytes)
49 if (bytes.empty() || bytes.size() <
Size(bytes.front())) {
50 throw std::invalid_argument(
"Invalid bytes for uintvar");
53 const std::size_t
size =
Size(bytes.front());
54 if (std::is_constant_evaluated()) {
55 for (std::size_t i = 0; i <
size; ++i) {
56 be_value_[i] = bytes.data()[i];
59 std::memcpy(&be_value_, bytes.data(),
size);