28    if (
static_cast<int>(in_size) < 0)
 
   29        Throw<std::runtime_error>(
"lz4_decompress: integer overflow (input)");
 
   36    if (n == 0 || n >= in_size)
 
   37        Throw<std::runtime_error>(
"lz4_decompress: invalid blob");
 
   39    if (
static_cast<int>(outSize) <= 0)
 
   40        Throw<std::runtime_error>(
"lz4_decompress: integer overflow (output)");
 
   42    void* 
const out = bf(outSize);
 
   44    if (LZ4_decompress_safe(
 
   45            reinterpret_cast<char const*
>(
in) + n,
 
   46            reinterpret_cast<char*
>(
out),
 
   47            static_cast<int>(in_size - n),
 
   48            static_cast<int>(outSize)) != 
static_cast<int>(outSize))
 
   49        Throw<std::runtime_error>(
"lz4_decompress: LZ4_decompress_safe");
 
   51    return {
out, outSize};
 
 
   93    using namespace nudb::detail;
 
   99        Throw<std::runtime_error>(
"nodeobject decompress");
 
  119            auto const hs = field<std::uint16_t>::size;  
 
  120            if (in_size < hs + 32)
 
  121                Throw<std::runtime_error>(
 
  122                    "nodeobject codec v1: short inner node size: " +
 
  125            istream is(p, in_size);
 
  127            read<std::uint16_t>(is, mask);  
 
  133            write<std::uint32_t>(os, 0);
 
  134            write<std::uint32_t>(os, 0);
 
  136            write<std::uint32_t>(
 
  139                Throw<std::runtime_error>(
 
  140                    "nodeobject codec v1: empty inner node");
 
  142            for (
int i = 16; i--; bit >>= 1)
 
  147                        Throw<std::runtime_error>(
 
  148                            "nodeobject codec v1: short inner node subsize: " +
 
  161                Throw<std::runtime_error>(
 
  162                    "nodeobject codec v1: long inner node, in_size = " +
 
  168            if (in_size != 16 * 32)  
 
  169                Throw<std::runtime_error>(
 
  170                    "nodeobject codec v1: short full inner node, in_size = " +
 
  172            istream is(p, in_size);
 
  177            write<std::uint32_t>(os, 0);
 
  178            write<std::uint32_t>(os, 0);
 
  180            write<std::uint32_t>(
 
  182            write(os, is(512), 512);
 
  186            Throw<std::runtime_error>(
 
 
  205    using namespace nudb::detail;
 
  210        istream is(
in, in_size);
 
  215        read<std::uint32_t>(is, index);
 
  216        read<std::uint32_t>(is, unused);
 
  217        read<std::uint8_t>(is, kind);
 
  218        read<std::uint32_t>(is, prefix);
 
  224            for (
unsigned bit = 0x8000; bit; bit >>= 1)
 
  226                void const* 
const h = is(32);
 
  237                auto const type = 2U;
 
  239                result.
second = vs + field<std::uint16_t>::size +  
 
  245                write<varint>(os, type);
 
  246                write<std::uint16_t>(os, mask);
 
  251            auto const type = 3U;
 
  253            result.
second = vs + n * 32;  
 
  258            write<varint>(os, type);
 
  282            result.
second = vn + lzr.second;
 
  286            Throw<std::logic_error>(
 
 
  300    using namespace nudb::detail;
 
  305        istream is(
in, in_size);
 
  310        read<std::uint32_t>(is, index);
 
  311        read<std::uint32_t>(is, unused);
 
  312        read<std::uint8_t>(is, kind);
 
  313        read<std::uint32_t>(is, prefix);
 
  317            write<std::uint32_t>(os, 0);
 
  318            write<std::uint32_t>(os, 0);