ClickHouse/dbms/include/DB/VarInt.h
2010-01-21 18:23:34 +00:00

42 lines
991 B
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef DB_VARINT_H
#define DB_VARINT_H
#include <DB/Field.h>
namespace DB
{
/** Записать UInt64 в формате переменной длины (base128) */
void writeVarUInt(UInt x, std::ostream & ostr);
/** Прочитать UInt64, записанный в формате переменной длины (base128) */
void readVarUInt(UInt & x, std::istream & istr);
/** Получить длину UInt64 в формате VarUInt */
size_t getLengthOfVarUInt(UInt x);
/** Записать Int64 в формате переменной длины (base128) */
inline void writeVarInt(Int x, std::ostream & ostr)
{
writeVarUInt(static_cast<UInt>((x << 1) ^ (x >> 63)), ostr);
}
// TODO: здесь баг
/** Прочитать Int64, записанный в формате переменной длины (base128) */
inline void readVarInt(Int & x, std::istream & istr)
{
readVarUInt(*reinterpret_cast<UInt*>(&x), istr);
x = (x >> 1) ^ (x << 63);
}
}
#endif