10 static const std::array<uint64_t, 2> VARIN16_MAX_VALUES = {
11 (UINT64_C(1) << (6)) - 1,
12 (UINT64_C(1) << (6 + 8)) - 1,
15 static const std::array<uint64_t, 4> VARINT32_MAX_VALUES = {
16 (UINT64_C(1) << (6)) - 1,
17 (UINT64_C(1) << (6 + 7)) - 1,
18 (UINT64_C(1) << (6 + 7 + 7)) - 1,
19 (UINT64_C(1) << (6 + 7 + 7 + 8)) - 1,
22 static const std::array<uint64_t, 8> VARINT64_MAX_VALUES = {
23 (UINT64_C(1) << (6)) - 1,
24 (UINT64_C(1) << (6 + 7)) - 1,
25 (UINT64_C(1) << (6 + 7 + 7)) - 1,
26 (UINT64_C(1) << (6 + 7 + 7 + 7)) - 1,
27 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7)) - 1,
28 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7)) - 1,
29 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
30 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7 + 7 + 8)) - 1,
33 static const std::array<uint64_t, 2> VARUINT16_MAX_VALUES = {
34 (UINT64_C(1) << (7)) - 1,
35 (UINT64_C(1) << (7 + 8)) - 1,
38 static const std::array<uint64_t, 4> VARUINT32_MAX_VALUES = {
39 (UINT64_C(1) << (7)) - 1,
40 (UINT64_C(1) << (7 + 7)) - 1,
41 (UINT64_C(1) << (7 + 7 + 7)) - 1,
42 (UINT64_C(1) << (7 + 7 + 7 + 8)) - 1,
45 static const std::array<uint64_t, 8> VARUINT64_MAX_VALUES = {
46 (UINT64_C(1) << (7)) - 1,
47 (UINT64_C(1) << (7 + 7)) - 1,
48 (UINT64_C(1) << (7 + 7 + 7)) - 1,
49 (UINT64_C(1) << (7 + 7 + 7 + 7)) - 1,
50 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7)) - 1,
51 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7)) - 1,
52 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
53 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7 + 7 + 8)) - 1,
56 static const std::array<uint64_t, 9> VARINT_MAX_VALUES = {
57 (UINT64_C(1) << (6)) - 1,
58 (UINT64_C(1) << (6 + 7)) - 1,
59 (UINT64_C(1) << (6 + 7 + 7)) - 1,
60 (UINT64_C(1) << (6 + 7 + 7 + 7)) - 1,
61 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7)) - 1,
62 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7)) - 1,
63 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
64 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
65 (UINT64_C(1) << (6 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 8)) - 1,
68 static const std::array<uint64_t, 9> VARUINT_MAX_VALUES = {
69 (UINT64_C(1) << (7)) - 1,
70 (UINT64_C(1) << (7 + 7)) - 1,
71 (UINT64_C(1) << (7 + 7 + 7)) - 1,
72 (UINT64_C(1) << (7 + 7 + 7 + 7)) - 1,
73 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7)) - 1,
74 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7)) - 1,
75 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
76 (UINT64_C(1) << (7 + 7 + 7 + 7 + 7 + 7 + 7 + 7)) - 1,
80 static const std::array<uint64_t, 5> VARSIZE_MAX_VALUES = {
81 (UINT64_C(1) << (7)) - 1,
82 (UINT64_C(1) << (7 + 7)) - 1,
83 (UINT64_C(1) << (7 + 7 + 7)) - 1,
84 (UINT64_C(1) << (7 + 7 + 7 + 7)) - 1,
85 (UINT64_C(1) << (2 + 7 + 7 + 7 + 8)) - 1,
88 template <std::
size_t SIZE>
89 static size_t bitSizeOfVarIntImpl(
90 uint64_t value,
const std::array<uint64_t, SIZE>& maxValues,
const char* varIntName)
93 for (uint64_t maxValue : maxValues)
95 if (value <= maxValue)
102 if (byteSize > maxValues.size())
104 throw CppRuntimeException(
"BitSizeOfCalculator: Value '")
105 << value <<
"' is out of range for " << varIntName <<
"!";
111 template <
typename T>
112 static uint64_t convertToAbsValue(T value)
114 return static_cast<uint64_t
>((value < 0) ? -value : value);
119 return bitSizeOfVarIntImpl(convertToAbsValue(value), VARIN16_MAX_VALUES,
"varint16");
124 return bitSizeOfVarIntImpl(convertToAbsValue(value), VARINT32_MAX_VALUES,
"varint32");
129 return bitSizeOfVarIntImpl(convertToAbsValue(value), VARINT64_MAX_VALUES,
"varint64");
134 return bitSizeOfVarIntImpl(value, VARUINT16_MAX_VALUES,
"varuint16");
139 return bitSizeOfVarIntImpl(value, VARUINT32_MAX_VALUES,
"varuint32");
144 return bitSizeOfVarIntImpl(value, VARUINT64_MAX_VALUES,
"varuint64");
149 if (value == INT64_MIN)
154 return bitSizeOfVarIntImpl(convertToAbsValue(value), VARINT_MAX_VALUES,
"varint");
159 return bitSizeOfVarIntImpl(value, VARUINT_MAX_VALUES,
"varuint");
164 return bitSizeOfVarIntImpl(value, VARSIZE_MAX_VALUES,
"varsize");
169 const size_t bytesSize = bytesValue.
size();
177 const size_t stringSize = stringValue.
size();
constexpr size_type size() const noexcept
constexpr size_type size() const noexcept
size_t bitSizeOfString(StringView stringValue)
size_t bitSizeOfVarInt32(int32_t value)
size_t bitSizeOfVarUInt32(uint32_t value)
size_t bitSizeOfVarInt64(int64_t value)
size_t bitSizeOfVarSize(uint32_t value)
size_t bitSizeOfVarUInt64(uint64_t value)
uint32_t convertSizeToUInt32(size_t value)
size_t bitSizeOfVarInt16(int16_t value)
size_t bitSizeOfVarUInt(uint64_t value)
size_t bitSizeOfVarInt(int64_t value)
size_t bitSizeOfBytes(Span< const uint8_t > bytesValue)
size_t bitSizeOfVarUInt16(uint16_t value)