19 #include <type_traits> 100 return static_cast<uint64_t>((uval << 1) ^ (val >> 63));
104 return static_cast<int64_t>((val >> 1) ^ -(val & 1));
112 *p++ = 0x80 | (val & 0x7f);
116 return size_t(p - buf);
122 int highBit = 64 - __builtin_clzll(val | 1);
123 return (highBit + 6) / 7;
138 throw std::invalid_argument(
140 ?
"Invalid varint value: too many bytes." 141 :
"Invalid varint value: too few bytes.");
151 "Only character ranges are supported");
159 if (
LIKELY(
size_t(end - begin) >= kMaxVarintLength64)) {
168 val |= (b & 0x7f) << 7;
173 val |= (b & 0x7f) << 14;
178 val |= (b & 0x7f) << 21;
183 val |= (b & 0x7f) << 28;
188 val |= (b & 0x7f) << 35;
193 val |= (b & 0x7f) << 42;
198 val |= (b & 0x7f) << 49;
203 val |= (b & 0x7f) << 56;
208 val |= (b & 0x01) << 63;
216 while (p != end && *p < 0) {
217 val |=
static_cast<uint64_t>(*p++ & 0x7f) << shift;
223 val |=
static_cast<uint64_t>(*p++) << shift;
uint64_t encodeZigZag(int64_t val)
constexpr size_t kMaxVarintLength64
auto begin(TestAdlIterable &instance)
uint64_t decodeVarint(Range< T * > &data)
—— Concurrent Priority Queue Implementation ——
int64_t decodeZigZag(uint64_t val)
constexpr Unexpected< typename std::decay< Error >::type > makeUnexpected(Error &&)
auto end(TestAdlIterable &instance)
constexpr auto data(C &c) -> decltype(c.data())
int encodeVarintSize(uint64_t val)
constexpr Iter end() const
constexpr Iter begin() const
void uncheckedAdvance(size_type n)
uint64_t value(const typename LockFreeRingBuffer< T, Atom >::Cursor &rbcursor)
constexpr bool kIsArchAmd64
size_t encodeVarint(uint64_t val, uint8_t *buf)
Expected< uint64_t, DecodeVarintError > tryDecodeVarint(Range< T * > &data)
constexpr size_t kMaxVarintLength32