47 if (
static_cast<int>(in_size) < 0)
48 Throw<std::runtime_error>(
"lz4_decompress: integer overflow (input)");
55 if (n == 0 || n >= in_size)
56 Throw<std::runtime_error>(
"lz4_decompress: invalid blob");
58 if (
static_cast<int>(outSize) <= 0)
59 Throw<std::runtime_error>(
"lz4_decompress: integer overflow (output)");
61 void*
const out = bf(outSize);
63 if (LZ4_decompress_safe(
64 reinterpret_cast<char const*
>(
in) + n,
65 reinterpret_cast<char*
>(
out),
66 static_cast<int>(in_size - n),
67 static_cast<int>(outSize)) !=
static_cast<int>(outSize))
68 Throw<std::runtime_error>(
"lz4_decompress: LZ4_decompress_safe");
70 return {
out, outSize};
112 using namespace nudb::detail;
118 Throw<std::runtime_error>(
"nodeobject decompress");
138 auto const hs = field<std::uint16_t>::size;
139 if (in_size < hs + 32)
140 Throw<std::runtime_error>(
141 "nodeobject codec v1: short inner node size: " +
144 istream is(p, in_size);
146 read<std::uint16_t>(is, mask);
152 write<std::uint32_t>(os, 0);
153 write<std::uint32_t>(os, 0);
155 write<std::uint32_t>(
158 Throw<std::runtime_error>(
159 "nodeobject codec v1: empty inner node");
161 for (
int i = 16; i--; bit >>= 1)
166 Throw<std::runtime_error>(
167 "nodeobject codec v1: short inner node subsize: " +
180 Throw<std::runtime_error>(
181 "nodeobject codec v1: long inner node, in_size = " +
187 if (in_size != 16 * 32)
188 Throw<std::runtime_error>(
189 "nodeobject codec v1: short full inner node, in_size = " +
191 istream is(p, in_size);
196 write<std::uint32_t>(os, 0);
197 write<std::uint32_t>(os, 0);
199 write<std::uint32_t>(
201 write(os, is(512), 512);
205 Throw<std::runtime_error>(
224 using namespace nudb::detail;
229 istream is(
in, in_size);
234 read<std::uint32_t>(is, index);
235 read<std::uint32_t>(is, unused);
236 read<std::uint8_t>(is, kind);
237 read<std::uint32_t>(is, prefix);
243 for (
unsigned bit = 0x8000; bit; bit >>= 1)
245 void const*
const h = is(32);
256 auto const type = 2U;
258 result.
second = vs + field<std::uint16_t>::size +
264 write<varint>(os, type);
265 write<std::uint16_t>(os, mask);
270 auto const type = 3U;
272 result.
second = vs + n * 32;
277 write<varint>(os, type);
301 result.
second = vn + lzr.second;
305 Throw<std::logic_error>(
319 using namespace nudb::detail;
324 istream is(
in, in_size);
329 read<std::uint32_t>(is, index);
330 read<std::uint32_t>(is, unused);
331 read<std::uint8_t>(is, kind);
332 read<std::uint32_t>(is, prefix);
336 write<std::uint32_t>(os, 0);
337 write<std::uint32_t>(os, 0);