1#ifndef BYTEME_ZLIB_BUFFER_READER_HPP
2#define BYTEME_ZLIB_BUFFER_READER_HPP
11#include "check_buffer_size.hpp"
55 strm.next_in = Z_NULL;
63 ret = inflateInit2(&strm, -MAX_WBITS);
64 }
else if (mode == 1) {
65 ret = inflateInit2(&strm, MAX_WBITS);
66 }
else if (mode == 2) {
67 ret = inflateInit2(&strm, 16 + MAX_WBITS);
68 }
else if (mode == 3) {
69 ret = inflateInit2(&strm, 32 + MAX_WBITS);
71 throw std::runtime_error(
"mode must be 0 (DEFLATE), 1 (Zlib), 2 (Gzip) or 3 (automatic)");
86 ZStream(
const ZStream&) =
delete;
87 ZStream(ZStream&&) =
delete;
88 ZStream& operator=(
const ZStream&) =
delete;
89 ZStream& operator=(ZStream&&) =
delete;
105 my_zstr(options.mode),
107 check_buffer_size<decltype(decltype(ZStream::strm)::avail_out)>(
108 check_buffer_size(options.buffer_size)
112 my_zstr.strm.avail_in = length;
113 my_zstr.strm.next_in =
const_cast<unsigned char*
>(
buffer);
130 if (my_zstr.strm.avail_in == 0) {
134 my_zstr.strm.avail_out = my_buffer.size();
135 my_zstr.strm.next_out = my_buffer.data();
136 int ret = inflate(&(my_zstr.strm), Z_NO_FLUSH);
143 throw std::runtime_error(
"zlib error");
149 my_read = my_buffer.size() - my_zstr.strm.avail_out;
154 return my_buffer.data();
163 std::vector<unsigned char> my_buffer;
164 std::size_t my_read = 0;
Virtual class for reading bytes from a source.
Definition Reader.hpp:17
Read and decompress bytes from a Zlib-compressed buffer.
Definition ZlibBufferReader.hpp:43
ZlibBufferReader(const unsigned char *buffer, std::size_t length, const ZlibBufferReaderOptions &options)
Definition ZlibBufferReader.hpp:104
std::size_t available() const
Definition ZlibBufferReader.hpp:157
bool load()
Definition ZlibBufferReader.hpp:117
const unsigned char * buffer() const
Definition ZlibBufferReader.hpp:153
Simple byte readers and writers.
Options for the ZlibBufferReader constructor.
Definition ZlibBufferReader.hpp:24
int mode
Definition ZlibBufferReader.hpp:29
std::size_t buffer_size
Definition ZlibBufferReader.hpp:35