10#ifndef MSGPACK_ZBUFFER_H
11#define MSGPACK_ZBUFFER_H
36#ifndef MSGPACK_ZBUFFER_INIT_SIZE
37#define MSGPACK_ZBUFFER_INIT_SIZE 8192
40static inline bool msgpack_zbuffer_init(
44static inline msgpack_zbuffer* msgpack_zbuffer_new(
int level,
size_t init_size);
49static inline const char* msgpack_zbuffer_data(
const msgpack_zbuffer* zbuf);
54static inline char* msgpack_zbuffer_release_buffer(
msgpack_zbuffer* zbuf);
57#ifndef MSGPACK_ZBUFFER_RESERVE_SIZE
58#define MSGPACK_ZBUFFER_RESERVE_SIZE 512
61static inline int msgpack_zbuffer_write(
void*
data,
const char* buf,
size_t len);
67 int level,
size_t init_size)
71 if(deflateInit(&zbuf->
stream, level) != Z_OK) {
84static inline msgpack_zbuffer* msgpack_zbuffer_new(
int level,
size_t init_size)
87 if (zbuf == NULL)
return NULL;
88 if(!msgpack_zbuffer_init(zbuf, level, init_size)) {
97 if(zbuf == NULL) {
return; }
98 msgpack_zbuffer_destroy(zbuf);
104 size_t used = (size_t)((
char *)(zbuf->
stream.next_out) - zbuf->
data);
105 size_t csize = used + zbuf->
stream.avail_out;
107 size_t nsize = (csize == 0) ? zbuf->
init_size : csize * 2;
109 char* tmp = (
char*)realloc(zbuf->
data, nsize);
115 zbuf->
stream.next_out = (Bytef*)(tmp + used);
116 zbuf->
stream.avail_out = (uInt)(nsize - used);
121static inline int msgpack_zbuffer_write(
void*
data,
const char* buf,
size_t len)
125 assert(buf ||
len == 0);
128 zbuf->
stream.next_in = (Bytef*)buf;
131 while(zbuf->
stream.avail_in > 0) {
133 if(!msgpack_zbuffer_expand(zbuf)) {
138 if(deflate(&zbuf->
stream, Z_NO_FLUSH) != Z_OK) {
149 switch(deflate(&zbuf->
stream, Z_FINISH)) {
154 if(!msgpack_zbuffer_expand(zbuf)) {
164static inline const char* msgpack_zbuffer_data(
const msgpack_zbuffer* zbuf)
171 return (
size_t)((
char *)(zbuf->
stream.next_out) - zbuf->
data);
176 zbuf->
stream.avail_out += (uInt)((
char*)zbuf->
stream.next_out - zbuf->
data);
182 if(deflateReset(&zbuf->
stream) != Z_OK) {
185 msgpack_zbuffer_reset_buffer(zbuf);
189static inline char* msgpack_zbuffer_release_buffer(
msgpack_zbuffer* zbuf)
191 char* tmp = zbuf->
data;
193 zbuf->
stream.next_out = NULL;
194 zbuf->
stream.avail_out = 0;
#define MSGPACK_ZBUFFER_RESERVE_SIZE
Definition: zbuffer.h:58
struct msgpack_zbuffer msgpack_zbuffer
size_t init_size
Definition: zbuffer.h:33
z_stream stream
Definition: zbuffer.h:31
char * data
Definition: zbuffer.h:32
const char * data
Definition: unpack_template.h:94
const char size_t len
Definition: unpack_template.h:94