Changeset View
Changeset View
Standalone View
Standalone View
src/serialize.h
Show First 20 Lines • Show All 362 Lines • ▼ Show 20 Lines | do { | ||||
ser_writedata8(os, tmp[len]); | ser_writedata8(os, tmp[len]); | ||||
} while (len--); | } while (len--); | ||||
} | } | ||||
template <typename Stream, typename I> I ReadVarInt(Stream &is) { | template <typename Stream, typename I> I ReadVarInt(Stream &is) { | ||||
I n = 0; | I n = 0; | ||||
while (true) { | while (true) { | ||||
uint8_t chData = ser_readdata8(is); | uint8_t chData = ser_readdata8(is); | ||||
if (n > (std::numeric_limits<I>::max() >> 7)) { | |||||
throw std::ios_base::failure("ReadVarInt(): size too large"); | |||||
} | |||||
n = (n << 7) | (chData & 0x7F); | n = (n << 7) | (chData & 0x7F); | ||||
if ((chData & 0x80) == 0) { | if ((chData & 0x80) == 0) { | ||||
return n; | return n; | ||||
} | } | ||||
if (n == std::numeric_limits<I>::max()) { | |||||
throw std::ios_base::failure("ReadVarInt(): size too large"); | |||||
} | |||||
n++; | n++; | ||||
} | } | ||||
} | } | ||||
#define FLATDATA(obj) \ | #define FLATDATA(obj) \ | ||||
REF(CFlatData((char *)&(obj), (char *)&(obj) + sizeof(obj))) | REF(CFlatData((char *)&(obj), (char *)&(obj) + sizeof(obj))) | ||||
#define VARINT(obj) REF(WrapVarInt(REF(obj))) | #define VARINT(obj) REF(WrapVarInt(REF(obj))) | ||||
#define COMPACTSIZE(obj) REF(CCompactSize(REF(obj))) | #define COMPACTSIZE(obj) REF(CCompactSize(REF(obj))) | ||||
▲ Show 20 Lines • Show All 546 Lines • Show Last 20 Lines |