10 #ifndef MSGPACK_V1_ZBUFFER_HPP
11 #define MSGPACK_V1_ZBUFFER_HPP
26 zbuffer(
int level = Z_DEFAULT_COMPRESSION,
30 m_stream.zalloc = Z_NULL;
31 m_stream.zfree = Z_NULL;
32 m_stream.opaque = Z_NULL;
33 m_stream.next_out = Z_NULL;
34 m_stream.avail_out = 0;
35 if(deflateInit(&m_stream, level) != Z_OK) {
36 throw std::bad_alloc();
42 deflateEnd(&m_stream);
47 void write(
const char* buf,
size_t len)
49 m_stream.next_in =
reinterpret_cast<Bytef*
>(
const_cast<char*
>(buf));
50 m_stream.avail_in =
static_cast<uInt
>(len);
52 while(m_stream.avail_in > 0) {
55 throw std::bad_alloc();
59 if(deflate(&m_stream, Z_NO_FLUSH) != Z_OK) {
60 throw std::bad_alloc();
68 switch(deflate(&m_stream, Z_FINISH)) {
74 throw std::bad_alloc();
78 throw std::bad_alloc();
95 return static_cast<size_t>(
reinterpret_cast<char*
>(m_stream.next_out) - m_data);
100 if(deflateReset(&m_stream) != Z_OK) {
101 throw std::bad_alloc();
108 m_stream.avail_out +=
static_cast<uInt
>(
reinterpret_cast<char*
>(m_stream.next_out) - m_data);
109 m_stream.next_out =
reinterpret_cast<Bytef*
>(m_data);
117 m_stream.avail_out = 0;
124 size_t used =
static_cast<size_t>(
reinterpret_cast<char*
>(m_stream.next_out) - m_data);
125 size_t csize = used + m_stream.avail_out;
126 size_t nsize = (csize == 0) ? m_init_size : csize * 2;
128 char* tmp =
static_cast<char*
>(::realloc(m_data, nsize));
134 m_stream.next_out =
reinterpret_cast<Bytef*
>(tmp + used);
135 m_stream.avail_out =
static_cast<uInt
>(nsize - used);
139 #if defined(MSGPACK_USE_CPP03)
143 #else // defined(MSGPACK_USE_CPP03)
146 #endif // defined(MSGPACK_USE_CPP03)
160 #endif // MSGPACK_V1_ZBUFFER_HPP