10 #ifndef MSGPACK_ZBUFFER_H 11 #define MSGPACK_ZBUFFER_H 35 #ifndef MSGPACK_ZBUFFER_INIT_SIZE 36 #define MSGPACK_ZBUFFER_INIT_SIZE 8192 39 static inline bool msgpack_zbuffer_init(
48 static inline const char* msgpack_zbuffer_data(
const msgpack_zbuffer* zbuf);
53 static inline char* msgpack_zbuffer_release_buffer(
msgpack_zbuffer* zbuf);
56 #ifndef MSGPACK_ZBUFFER_RESERVE_SIZE 57 #define MSGPACK_ZBUFFER_RESERVE_SIZE 512 60 static inline int msgpack_zbuffer_write(
void*
data,
const char* buf,
size_t len);
70 if(deflateInit(&zbuf->
stream, level) != Z_OK) {
83 static inline msgpack_zbuffer* msgpack_zbuffer_new(
int level,
size_t init_size)
86 if (zbuf == NULL)
return NULL;
87 if(!msgpack_zbuffer_init(zbuf, level, init_size)) {
96 if(zbuf == NULL) {
return; }
97 msgpack_zbuffer_destroy(zbuf);
103 size_t used = (
char*)zbuf->
stream.next_out - zbuf->
data;
104 size_t csize = used + zbuf->
stream.avail_out;
105 size_t nsize = (csize == 0) ? zbuf->
init_size : csize * 2;
107 char* tmp = (
char*)realloc(zbuf->
data, nsize);
113 zbuf->
stream.next_out = (Bytef*)(tmp + used);
114 zbuf->
stream.avail_out = nsize - used;
119 static inline int msgpack_zbuffer_write(
void*
data,
const char* buf,
size_t len)
123 zbuf->
stream.next_in = (Bytef*)buf;
126 while(zbuf->
stream.avail_in > 0) {
128 if(!msgpack_zbuffer_expand(zbuf)) {
133 if(deflate(&zbuf->
stream, Z_NO_FLUSH) != Z_OK) {
144 switch(deflate(&zbuf->
stream, Z_FINISH)) {
148 if(!msgpack_zbuffer_expand(zbuf)) {
158 static inline const char* msgpack_zbuffer_data(
const msgpack_zbuffer* zbuf)
165 return (
char*)zbuf->
stream.next_out - zbuf->
data;
176 if(deflateReset(&zbuf->
stream) != Z_OK) {
179 msgpack_zbuffer_reset_buffer(zbuf);
183 static inline char* msgpack_zbuffer_release_buffer(
msgpack_zbuffer* zbuf)
185 char* tmp = zbuf->
data;
187 zbuf->
stream.next_out = NULL;
188 zbuf->
stream.avail_out = 0;
char * data
Definition: zbuffer.h:31
z_stream stream
Definition: zbuffer.h:30
struct msgpack_zbuffer msgpack_zbuffer
size_t init_size
Definition: zbuffer.h:32
#define MSGPACK_ZBUFFER_RESERVE_SIZE
Definition: zbuffer.h:57
const char size_t len
Definition: unpack_template.h:89