1#ifndef BYTEME_ZLIB_BUFFER_READER_HPP
2#define BYTEME_ZLIB_BUFFER_READER_HPP
34 strm.next_in = Z_NULL;
42 ret = inflateInit2(&strm, -MAX_WBITS);
43 }
else if (mode == 1) {
44 ret = inflateInit2(&strm, MAX_WBITS);
45 }
else if (mode == 2) {
46 ret = inflateInit2(&strm, 16 + MAX_WBITS);
47 }
else if (mode == 3) {
48 ret = inflateInit2(&strm, 32 + MAX_WBITS);
50 throw std::runtime_error(
"mode must be 0 (DEFLATE), 1 (Zlib), 2 (Gzip) or 3 (automatic)");
65 ZStream(
const ZStream&) =
delete;
66 ZStream(ZStream&&) =
delete;
67 ZStream& operator=(
const ZStream&) =
delete;
68 ZStream& operator=(ZStream&&) =
delete;
85 ZlibBufferReader(
const unsigned char*
buffer,
size_t length,
int mode = 3,
size_t buffer_size = 65536) : my_zstr(mode), my_buffer(buffer_size) {
86 my_zstr.strm.avail_in = length;
87 my_zstr.strm.next_in =
const_cast<unsigned char*
>(
buffer);
104 if (my_zstr.strm.avail_in == 0) {
108 my_zstr.strm.avail_out = my_buffer.size();
109 my_zstr.strm.next_out = my_buffer.data();
110 int ret = inflate(&(my_zstr.strm), Z_NO_FLUSH);
117 throw std::runtime_error(
"zlib error");
123 my_read = my_buffer.size() - my_zstr.strm.avail_out;
128 return my_buffer.data();
137 std::vector<unsigned char> my_buffer;
Virtual class for reading bytes from a source.
Definition Reader.hpp:15
Read and decompress bytes from a Zlib-compressed buffer.
Definition ZlibBufferReader.hpp:22
size_t available() const
Definition ZlibBufferReader.hpp:131
ZlibBufferReader(const unsigned char *buffer, size_t length, int mode=3, size_t buffer_size=65536)
Definition ZlibBufferReader.hpp:85
bool load()
Definition ZlibBufferReader.hpp:91
const unsigned char * buffer() const
Definition ZlibBufferReader.hpp:127
Simple byte readers and writers.