mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-23 16:12:01 +00:00
Probably better [#METR-22173].
This commit is contained in:
parent
4922eac99a
commit
f638ebbbf5
@ -105,81 +105,17 @@ inline void readVarInt(Int16 & x, ReadBuffer & istr)
|
||||
|
||||
inline void writeVarUInt(UInt64 x, std::ostream & ostr)
|
||||
{
|
||||
char buf[9];
|
||||
for (size_t i = 0; i < 9; ++i)
|
||||
{
|
||||
uint8_t byte = x & 0x7F;
|
||||
if (byte > 0x7F)
|
||||
x |= 0x80;
|
||||
|
||||
buf[0] = static_cast<UInt8>(x | 0x80);
|
||||
if (x >= (1ULL << 7))
|
||||
{
|
||||
buf[1] = static_cast<UInt8>((x >> 7) | 0x80);
|
||||
if (x >= (1ULL << 14))
|
||||
{
|
||||
buf[2] = static_cast<UInt8>((x >> 14) | 0x80);
|
||||
if (x >= (1ULL << 21))
|
||||
{
|
||||
buf[3] = static_cast<UInt8>((x >> 21) | 0x80);
|
||||
if (x >= (1ULL << 28))
|
||||
{
|
||||
buf[4] = static_cast<UInt8>((x >> 28) | 0x80);
|
||||
if (x >= (1ULL << 35))
|
||||
{
|
||||
buf[5] = static_cast<UInt8>((x >> 35) | 0x80);
|
||||
if (x >= (1ULL << 42))
|
||||
{
|
||||
buf[6] = static_cast<UInt8>((x >> 42) | 0x80);
|
||||
if (x >= (1ULL << 49))
|
||||
{
|
||||
buf[7] = static_cast<UInt8>((x >> 49) | 0x80);
|
||||
if (x >= (1ULL << 56))
|
||||
{
|
||||
buf[8] = static_cast<UInt8>(x >> 56);
|
||||
ostr.write(buf, 9);
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[7] &= 0x7F;
|
||||
ostr.write(buf, 8);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[6] &= 0x7F;
|
||||
ostr.write(buf, 7);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[5] &= 0x7F;
|
||||
ostr.write(buf, 6);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[4] &= 0x7F;
|
||||
ostr.write(buf, 5);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[3] &= 0x7F;
|
||||
ostr.write(buf, 4);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[2] &= 0x7F;
|
||||
ostr.write(buf, 3);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[1] &= 0x7F;
|
||||
ostr.write(buf, 2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[0] &= 0x7F;
|
||||
ostr.write(buf, 1);
|
||||
ostr.put(x);
|
||||
|
||||
x >>= 7;
|
||||
if (!x)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -197,9 +133,9 @@ inline void readVarUInt(UInt64 & x, ReadBuffer & istr)
|
||||
if (istr.eof())
|
||||
throwReadAfterEOF();
|
||||
|
||||
int byte = *istr.position();
|
||||
uint64_t byte = *istr.position();
|
||||
++istr.position();
|
||||
x |= (static_cast<uint64_t>(byte) & 0x7F) << (7 * i);
|
||||
x |= (byte & 0x7F) << (7 * i);
|
||||
|
||||
if (!(byte & 0x80))
|
||||
return;
|
||||
@ -209,187 +145,54 @@ inline void readVarUInt(UInt64 & x, ReadBuffer & istr)
|
||||
|
||||
inline void readVarUInt(UInt64 & x, std::istream & istr)
|
||||
{
|
||||
int byte;
|
||||
|
||||
byte = istr.get();
|
||||
x = static_cast<UInt64>(byte) & 0x7F;
|
||||
if (byte & 0x80)
|
||||
x = 0;
|
||||
for (size_t i = 0; i < 9; ++i)
|
||||
{
|
||||
byte = istr.get();
|
||||
x |= (static_cast<UInt64>(byte) & 0x7F) << 7;
|
||||
if (byte & 0x80)
|
||||
{
|
||||
byte = istr.get();
|
||||
x |= (static_cast<UInt64>(byte) & 0x7F) << 14;
|
||||
if (byte & 0x80)
|
||||
{
|
||||
byte = istr.get();
|
||||
x |= (static_cast<UInt64>(byte) & 0x7F) << 21;
|
||||
if (byte & 0x80)
|
||||
{
|
||||
byte = istr.get();
|
||||
x |= (static_cast<UInt64>(byte) & 0x7F) << 28;
|
||||
if (byte & 0x80)
|
||||
{
|
||||
byte = istr.get();
|
||||
x |= (static_cast<UInt64>(byte) & 0x7F) << 35;
|
||||
if (byte & 0x80)
|
||||
{
|
||||
byte = istr.get();
|
||||
x |= (static_cast<UInt64>(byte) & 0x7F) << 42;
|
||||
if (byte & 0x80)
|
||||
{
|
||||
byte = istr.get();
|
||||
x |= (static_cast<UInt64>(byte) & 0x7F) << 49;
|
||||
if (byte & 0x80)
|
||||
{
|
||||
byte = istr.get();
|
||||
x |= static_cast<UInt64>(byte) << 56;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
uint64_t byte = istr.get();
|
||||
x |= (byte & 0x7F) << (7 * i);
|
||||
|
||||
if (!(byte & 0x80))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline void writeVarUInt(UInt64 x, WriteBuffer & ostr)
|
||||
{
|
||||
char buf[9];
|
||||
for (size_t i = 0; i < 9; ++i)
|
||||
{
|
||||
uint8_t byte = x & 0x7F;
|
||||
if (byte > 0x7F)
|
||||
x |= 0x80;
|
||||
|
||||
buf[0] = static_cast<UInt8>(x | 0x80);
|
||||
if (x >= (1ULL << 7))
|
||||
{
|
||||
buf[1] = static_cast<UInt8>((x >> 7) | 0x80);
|
||||
if (x >= (1ULL << 14))
|
||||
{
|
||||
buf[2] = static_cast<UInt8>((x >> 14) | 0x80);
|
||||
if (x >= (1ULL << 21))
|
||||
{
|
||||
buf[3] = static_cast<UInt8>((x >> 21) | 0x80);
|
||||
if (x >= (1ULL << 28))
|
||||
{
|
||||
buf[4] = static_cast<UInt8>((x >> 28) | 0x80);
|
||||
if (x >= (1ULL << 35))
|
||||
{
|
||||
buf[5] = static_cast<UInt8>((x >> 35) | 0x80);
|
||||
if (x >= (1ULL << 42))
|
||||
{
|
||||
buf[6] = static_cast<UInt8>((x >> 42) | 0x80);
|
||||
if (x >= (1ULL << 49))
|
||||
{
|
||||
buf[7] = static_cast<UInt8>((x >> 49) | 0x80);
|
||||
if (x >= (1ULL << 56))
|
||||
{
|
||||
buf[8] = static_cast<UInt8>(x >> 56);
|
||||
ostr.write(buf, 9);
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[7] &= 0x7F;
|
||||
ostr.write(buf, 8);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[6] &= 0x7F;
|
||||
ostr.write(buf, 7);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[5] &= 0x7F;
|
||||
ostr.write(buf, 6);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[4] &= 0x7F;
|
||||
ostr.write(buf, 5);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[3] &= 0x7F;
|
||||
ostr.write(buf, 4);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[2] &= 0x7F;
|
||||
ostr.write(buf, 3);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[1] &= 0x7F;
|
||||
ostr.write(buf, 2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[0] &= 0x7F;
|
||||
ostr.write(buf, 1);
|
||||
ostr.nextIfAtEnd();
|
||||
*ostr.position() = x;
|
||||
++ostr.position();
|
||||
|
||||
x >>= 7;
|
||||
if (!x)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline char * writeVarUInt(UInt64 x, char * ostr)
|
||||
{
|
||||
*ostr = static_cast<UInt8>(x | 0x80);
|
||||
if (x >= (1ULL << 7))
|
||||
for (size_t i = 0; i < 9; ++i)
|
||||
{
|
||||
*++ostr = static_cast<UInt8>((x >> 7) | 0x80);
|
||||
if (x >= (1ULL << 14))
|
||||
{
|
||||
*++ostr = static_cast<UInt8>((x >> 14) | 0x80);
|
||||
if (x >= (1ULL << 21))
|
||||
{
|
||||
*++ostr = static_cast<UInt8>((x >> 21) | 0x80);
|
||||
if (x >= (1ULL << 28))
|
||||
{
|
||||
*++ostr = static_cast<UInt8>((x >> 28) | 0x80);
|
||||
if (x >= (1ULL << 35))
|
||||
{
|
||||
*++ostr = static_cast<UInt8>((x >> 35) | 0x80);
|
||||
if (x >= (1ULL << 42))
|
||||
{
|
||||
*++ostr = static_cast<UInt8>((x >> 42) | 0x80);
|
||||
if (x >= (1ULL << 49))
|
||||
{
|
||||
*++ostr = static_cast<UInt8>((x >> 49) | 0x80);
|
||||
if (x >= (1ULL << 56))
|
||||
{
|
||||
*++ostr = static_cast<UInt8>(x >> 56);
|
||||
}
|
||||
else
|
||||
*ostr &= 0x7F;
|
||||
}
|
||||
else
|
||||
*ostr &= 0x7F;
|
||||
}
|
||||
else
|
||||
*ostr &= 0x7F;
|
||||
}
|
||||
else
|
||||
*ostr &= 0x7F;
|
||||
}
|
||||
else
|
||||
*ostr &= 0x7F;
|
||||
}
|
||||
else
|
||||
*ostr &= 0x7F;
|
||||
}
|
||||
else
|
||||
*ostr &= 0x7F;
|
||||
}
|
||||
else
|
||||
*ostr &= 0x7F;
|
||||
uint8_t byte = x & 0x7F;
|
||||
if (byte > 0x7F)
|
||||
x |= 0x80;
|
||||
|
||||
return ++ostr;
|
||||
*ostr = x;
|
||||
++ostr;
|
||||
|
||||
x >>= 7;
|
||||
if (!x)
|
||||
return ostr;
|
||||
}
|
||||
|
||||
return ostr;
|
||||
}
|
||||
|
||||
|
||||
@ -397,41 +200,21 @@ inline const char * readVarUInt(UInt64 & x, const char * istr, size_t size)
|
||||
{
|
||||
const char * end = istr + size;
|
||||
|
||||
x = static_cast<UInt64>(*istr) & 0x7F;
|
||||
if (*istr & 0x80 && ++istr < end)
|
||||
x = 0;
|
||||
for (size_t i = 0; i < 9; ++i)
|
||||
{
|
||||
x |= (static_cast<UInt64>(*istr) & 0x7F) << 7;
|
||||
if (*istr & 0x80 && ++istr < end)
|
||||
{
|
||||
x |= (static_cast<UInt64>(*istr) & 0x7F) << 14;
|
||||
if (*istr & 0x80 && ++istr < end)
|
||||
{
|
||||
x |= (static_cast<UInt64>(*istr) & 0x7F) << 21;
|
||||
if (*istr & 0x80 && ++istr < end)
|
||||
{
|
||||
x |= (static_cast<UInt64>(*istr) & 0x7F) << 28;
|
||||
if (*istr & 0x80 && ++istr < end)
|
||||
{
|
||||
x |= (static_cast<UInt64>(*istr) & 0x7F) << 35;
|
||||
if (*istr & 0x80 && ++istr < end)
|
||||
{
|
||||
x |= (static_cast<UInt64>(*istr) & 0x7F) << 42;
|
||||
if (*istr & 0x80 && ++istr < end)
|
||||
{
|
||||
x |= (static_cast<UInt64>(*istr) & 0x7F) << 49;
|
||||
if (*istr & 0x80 && ++istr < end)
|
||||
{
|
||||
x |= static_cast<UInt64>(*istr) << 56;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (istr == end)
|
||||
throwReadAfterEOF();
|
||||
|
||||
uint64_t byte = *istr;
|
||||
++istr;
|
||||
x |= (byte & 0x7F) << (7 * i);
|
||||
|
||||
if (!(byte & 0x80))
|
||||
return istr;
|
||||
}
|
||||
|
||||
return ++istr;
|
||||
return istr;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user