1#ifndef BYTEME_ZLIB_BUFFER_WRITER_HPP
2#define BYTEME_ZLIB_BUFFER_WRITER_HPP
11#include "check_buffer_size.hpp"
54 ZStream(
int mode,
int level) {
59 strm.next_in = Z_NULL;
65 }
else if (mode == 1) {
67 }
else if (mode == 2) {
70 throw std::runtime_error(
"unknown Zlib compression mode supplied");
73 int ret = deflateInit2(&strm, level, Z_DEFLATED, windowBits, 8, Z_DEFAULT_STRATEGY);
75 throw std::runtime_error(
"failed to initialize Zlib buffer compression");
86 ZStream(
const ZStream&) =
delete;
87 ZStream(ZStream&&) =
delete;
88 ZStream& operator=(
const ZStream&) =
delete;
89 ZStream& operator=(ZStream&&) =
delete;
103 my_zstr(options.mode, options.compression_level),
105 check_buffer_size<decltype(decltype(ZStream::strm)::avail_out)>(
106 check_buffer_size(options.buffer_size)
114 void write(
const unsigned char* buffer, std::size_t n) {
115 typedef decltype(
decltype(ZStream::strm)::avail_in) Size;
116 safe_write<Size, false>(
119 [&](
const unsigned char* buffer0, Size n0) ->
void {
120 my_zstr.strm.next_in =
const_cast<unsigned char*
>(buffer0);
121 my_zstr.strm.avail_in = n0;
114 void write(
const unsigned char* buffer, std::size_t n) {
…}
128 my_zstr.strm.next_in =
nullptr;
129 my_zstr.strm.avail_in = 0;
135 std::vector<unsigned char> my_holding;
137 void dump(
int flag) {
139 my_zstr.strm.avail_out = my_holding.size();
140 my_zstr.strm.next_out = my_holding.data();
141 deflate(&(my_zstr.strm), flag);
142 std::size_t compressed = my_holding.size() - my_zstr.strm.avail_out;
143 output.insert(output.end(), my_holding.begin(), my_holding.begin() + compressed);
144 }
while (my_zstr.strm.avail_out == 0);
152 std::vector<unsigned char> output;
Virtual class for writing bytes to a sink.
Definition Writer.hpp:21
virtual void write(const unsigned char *buffer, std::size_t n)=0
Compress and write bytes to a Zlib-compressed buffer.
Definition ZlibBufferWriter.hpp:48
ZlibBufferWriter(const ZlibBufferWriterOptions &options)
Definition ZlibBufferWriter.hpp:102
void finish()
Definition ZlibBufferWriter.hpp:127
void write(const unsigned char *buffer, std::size_t n)
Definition ZlibBufferWriter.hpp:114
std::vector< unsigned char > & get_output()
Definition ZlibBufferWriter.hpp:161
Simple byte readers and writers.
Options for the ZlibBufferWriter constructor.
Definition ZlibBufferWriter.hpp:24
int compression_level
Definition ZlibBufferWriter.hpp:34
int mode
Definition ZlibBufferWriter.hpp:28
std::size_t buffer_size
Definition ZlibBufferWriter.hpp:40