11 if (input.
size() > std::numeric_limits<decltype(s.avail_in)>::
max()) {
13 "Error while decompressing: input file too big");
15 auto inputLen =
static_cast<decltype(s.avail_in)
>(input.
size());
20 s.next_in =
const_cast<uint8_t*
>(input.
data());
21 s.avail_in = inputLen;
39 if (s.avail_in <= 0) {
41 "Error while decompressing: unexpected end of file.");
44 return *(s.next_in++);
82 int initErr = inflateInit2(&s, -MAX_WBITS);
83 if (initErr != Z_OK) {
85 "Error initializing inflate struct: ", zError(initErr));
89 size_t outSize = sizeHint;
91 s.avail_out = uInt(outSize);
93 s.next_out = output.
data() + s.total_out;
95 if (err == Z_STREAM_END) {
99 throw FileException(
"Error decompressing gzip: ", zError(err));
101 auto oldSize = outSize;
102 outSize = oldSize * 2;
104 s.avail_out = uInt(outSize - oldSize);
108 output.
resize(s.total_out);
const T * data() const
Returns pointer to the start of the memory buffer.
void resize(size_t size)
Grow or shrink the memory block.
std::string getString(size_t len)
ZlibInflate(span< const uint8_t > input)
size_t inflate(MemBuffer< uint8_t > &output, size_t sizeHint=65536)
constexpr pointer data() const noexcept
constexpr index_type size() const noexcept
constexpr vecN< N, T > max(const vecN< N, T > &x, const vecN< N, T > &y)
This file implemented 3 utility functions:
constexpr void repeat(T n, Op op)
Repeat the given operation 'op' 'n' times.