10 static const std::array<uint64_t, 2> VARIN16_MAX_VALUES =
12 (UINT64_C(1) << (6)) - 1,
13 (UINT64_C(1) << (6 + 8)) - 1,
16 static const std::array<uint64_t, 4> VARINT32_MAX_VALUES =
18 (UINT64_C(1) << (6)) - 1,
19 (UINT64_C(1) << (6 + 7)) - 1,
20 (UINT64_C(1) << (6 + 7 + 7)) - 1,
21 (UINT64_C(1) << (6 + 7 + 7 + 8)) - 1
24 static const std::array<uint64_t, 8> VARINT64_MAX_VALUES =
26 (UINT64_C(1) << (6)) - 1,
27 (UINT64_C(1) << (6 + 7)) - 1,
28 (UINT64_C(1) << (6 + 7 + 7)) - 1,
29 (UINT64_C(1) << (6 + 7 + 7 + 7)) - 1,
30 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7)) - 1,
31 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7)) - 1,
32 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
33 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7 + 7 + 8)) - 1
36 static const std::array<uint64_t, 2> VARUINT16_MAX_VALUES =
38 (UINT64_C(1) << (7)) - 1,
39 (UINT64_C(1) << (7 + 8)) - 1,
42 static const std::array<uint64_t, 4> VARUINT32_MAX_VALUES =
44 (UINT64_C(1) << (7)) - 1,
45 (UINT64_C(1) << (7 + 7)) - 1,
46 (UINT64_C(1) << (7 + 7 + 7)) - 1,
47 (UINT64_C(1) << (7 + 7 + 7 + 8)) - 1
50 static const std::array<uint64_t, 8> VARUINT64_MAX_VALUES =
52 (UINT64_C(1) << (7)) - 1,
53 (UINT64_C(1) << (7 + 7)) - 1,
54 (UINT64_C(1) << (7 + 7 + 7)) - 1,
55 (UINT64_C(1) << (7 + 7 + 7 + 7)) - 1,
56 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7)) - 1,
57 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7)) - 1,
58 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
59 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7 + 7 + 8)) - 1
62 static const std::array<uint64_t, 9> VARINT_MAX_VALUES =
64 (UINT64_C(1) << (6)) - 1,
65 (UINT64_C(1) << (6 + 7)) - 1,
66 (UINT64_C(1) << (6 + 7 + 7)) - 1,
67 (UINT64_C(1) << (6 + 7 + 7 + 7)) - 1,
68 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7)) - 1,
69 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7)) - 1,
70 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
71 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
72 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 8)) - 1
75 static const std::array<uint64_t, 9> VARUINT_MAX_VALUES =
77 (UINT64_C(1) << (7)) - 1,
78 (UINT64_C(1) << (7 + 7)) - 1,
79 (UINT64_C(1) << (7 + 7 + 7)) - 1,
80 (UINT64_C(1) << (7 + 7 + 7 + 7)) - 1,
81 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7)) - 1,
82 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7)) - 1,
83 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
84 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
88 static const std::array<uint64_t, 5> VARSIZE_MAX_VALUES =
90 (UINT64_C(1) << (7)) - 1,
91 (UINT64_C(1) << (7 + 7)) - 1,
92 (UINT64_C(1) << (7 + 7 + 7)) - 1,
93 (UINT64_C(1) << (7 + 7 + 7 + 7)) - 1,
94 (UINT64_C(1) << (2 + 7 + 7 + 7 + 8)) - 1,
97 template <std::
size_t SIZE>
98 static size_t bitSizeOfVarIntImpl(uint64_t value,
const std::array<uint64_t, SIZE>& maxValues,
99 const char* varIntName)
102 for (uint64_t maxValue : maxValues)
104 if (value <= maxValue)
109 if (byteSize > maxValues.size())
111 throw CppRuntimeException(
"BitSizeOfCalculator: Value '") << value <<
112 "' is out of range for " << varIntName <<
"!";
118 template <
typename T>
119 static uint64_t convertToAbsValue(T value)
121 return static_cast<uint64_t
>((value < 0) ? -value : value);
126 return bitSizeOfVarIntImpl(convertToAbsValue(value), VARIN16_MAX_VALUES,
"varint16");
131 return bitSizeOfVarIntImpl(convertToAbsValue(value), VARINT32_MAX_VALUES,
"varint32");
136 return bitSizeOfVarIntImpl(convertToAbsValue(value), VARINT64_MAX_VALUES,
"varint64");
141 return bitSizeOfVarIntImpl(value, VARUINT16_MAX_VALUES,
"varuint16");
146 return bitSizeOfVarIntImpl(value, VARUINT32_MAX_VALUES,
"varuint32");
151 return bitSizeOfVarIntImpl(value, VARUINT64_MAX_VALUES,
"varuint64");
156 if (value == INT64_MIN)
159 return bitSizeOfVarIntImpl(convertToAbsValue(value), VARINT_MAX_VALUES,
"varint");
164 return bitSizeOfVarIntImpl(value, VARUINT_MAX_VALUES,
"varuint");
169 return bitSizeOfVarIntImpl(value, VARSIZE_MAX_VALUES,
"varsize");
174 const size_t bytesSize = bytesValue.
size();
182 const size_t stringSize = stringValue.
size();
constexpr size_type size() const noexcept
size_t bitSizeOfVarUInt64(uint64_t value)
size_t bitSizeOfBytes(Span< const uint8_t > bytesValue)
size_t bitSizeOfVarSize(uint32_t value)
size_t bitSizeOfVarInt64(int64_t value)
size_t bitSizeOfVarInt16(int16_t value)
uint32_t convertSizeToUInt32(size_t value)
size_t bitSizeOfVarUInt16(uint16_t value)
constexpr size_type size() const noexcept
size_t bitSizeOfVarUInt32(uint32_t value)
size_t bitSizeOfVarUInt(uint64_t value)
size_t bitSizeOfVarInt(int64_t value)
size_t bitSizeOfString(StringView stringValue)
size_t bitSizeOfVarInt32(int32_t value)