10 #ifndef MSGPACK_ZBUFFER_HPP 11 #define MSGPACK_ZBUFFER_HPP 18 #ifndef MSGPACK_ZBUFFER_RESERVE_SIZE 19 #define MSGPACK_ZBUFFER_RESERVE_SIZE 512 22 #ifndef MSGPACK_ZBUFFER_INIT_SIZE 23 #define MSGPACK_ZBUFFER_INIT_SIZE 8192 34 zbuffer(
int level = Z_DEFAULT_COMPRESSION,
36 : m_data(
nullptr), m_init_size(init_size)
38 m_stream.zalloc = Z_NULL;
39 m_stream.zfree = Z_NULL;
40 m_stream.opaque = Z_NULL;
41 m_stream.next_out = Z_NULL;
42 m_stream.avail_out = 0;
43 if(deflateInit(&m_stream, level) != Z_OK) {
44 throw std::bad_alloc();
50 deflateEnd(&m_stream);
55 void write(
const char* buf,
size_t len)
57 m_stream.next_in =
reinterpret_cast<Bytef*
>(
const_cast<char*
>(buf));
58 m_stream.avail_in = len;
60 while(m_stream.avail_in > 0) {
63 throw std::bad_alloc();
67 if(deflate(&m_stream, Z_NO_FLUSH) != Z_OK) {
68 throw std::bad_alloc();
76 switch(deflate(&m_stream, Z_FINISH)) {
81 throw std::bad_alloc();
85 throw std::bad_alloc();
102 return reinterpret_cast<char*
>(m_stream.next_out) - m_data;
107 if(deflateReset(&m_stream) != Z_OK) {
108 throw std::bad_alloc();
115 m_stream.avail_out +=
reinterpret_cast<char*
>(m_stream.next_out) - m_data;
116 m_stream.next_out =
reinterpret_cast<Bytef*
>(m_data);
123 m_stream.next_out =
nullptr;
124 m_stream.avail_out = 0;
131 size_t used =
reinterpret_cast<char*
>(m_stream.next_out) - m_data;
132 size_t csize = used + m_stream.avail_out;
133 size_t nsize = (csize == 0) ? m_init_size : csize * 2;
135 char* tmp =
static_cast<char*
>(::realloc(m_data, nsize));
141 m_stream.next_out =
reinterpret_cast<Bytef*
>(tmp + used);
142 m_stream.avail_out = nsize - used;
146 #if defined(MSGPACK_USE_CPP03) 150 #else // defined(MSGPACK_USE_CPP03) 153 #endif // defined(MSGPACK_USE_CPP03) #define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition: versioning.hpp:58
char * flush()
Definition: zbuffer.hpp:73
Definition: zbuffer.hpp:32
#define MSGPACK_ZBUFFER_INIT_SIZE
Definition: zbuffer.hpp:23
char * data()
Definition: zbuffer.hpp:90
Definition: adaptor_base.hpp:15
#define MSGPACK_ZBUFFER_RESERVE_SIZE
Definition: zbuffer.hpp:19
size_t size() const
Definition: zbuffer.hpp:100
zbuffer(int level=Z_DEFAULT_COMPRESSION, size_t init_size=MSGPACK_ZBUFFER_INIT_SIZE)
Definition: zbuffer.hpp:34
#define nullptr
Definition: cpp_config.hpp:31
~zbuffer()
Definition: zbuffer.hpp:48
char * release_buffer()
Definition: zbuffer.hpp:119
void write(const char *buf, size_t len)
Definition: zbuffer.hpp:55
const char * data() const
Definition: zbuffer.hpp:95
void reset()
Definition: zbuffer.hpp:105
void reset_buffer()
Definition: zbuffer.hpp:113