annotate msgpack/include/msgpack/zbuffer.h @ 25:9298566b4708

msgpack: import 2.0.0
author David Demelier <markand@malikania.fr>
date Thu, 24 Nov 2016 17:35:14 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * MessagePack for C deflate buffer implementation
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (C) 2010 FURUHASHI Sadayuki
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Distributed under the Boost Software License, Version 1.0.
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * (See accompanying file LICENSE_1_0.txt or copy at
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * http://www.boost.org/LICENSE_1_0.txt)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 */
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 #ifndef MSGPACK_ZBUFFER_H
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 #define MSGPACK_ZBUFFER_H
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
12
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 #include "sysdep.h"
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 #include <stdlib.h>
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 #include <string.h>
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 #include <zlib.h>
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
17
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
18 #ifdef __cplusplus
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 extern "C" {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #endif
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 /**
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * @defgroup msgpack_zbuffer Compressed buffer
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 * @ingroup msgpack_buffer
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 * @{
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 */
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 typedef struct msgpack_zbuffer {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 z_stream stream;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 char* data;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 size_t init_size;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 } msgpack_zbuffer;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #ifndef MSGPACK_ZBUFFER_INIT_SIZE
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 #define MSGPACK_ZBUFFER_INIT_SIZE 8192
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 #endif
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 static inline bool msgpack_zbuffer_init(
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 msgpack_zbuffer* zbuf, int level, size_t init_size);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 static inline void msgpack_zbuffer_destroy(msgpack_zbuffer* zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
42
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 static inline msgpack_zbuffer* msgpack_zbuffer_new(int level, size_t init_size);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 static inline void msgpack_zbuffer_free(msgpack_zbuffer* zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 static inline char* msgpack_zbuffer_flush(msgpack_zbuffer* zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 static inline const char* msgpack_zbuffer_data(const msgpack_zbuffer* zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 static inline size_t msgpack_zbuffer_size(const msgpack_zbuffer* zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
50
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 static inline bool msgpack_zbuffer_reset(msgpack_zbuffer* zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 static inline void msgpack_zbuffer_reset_buffer(msgpack_zbuffer* zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 static inline char* msgpack_zbuffer_release_buffer(msgpack_zbuffer* zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
55
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 #ifndef MSGPACK_ZBUFFER_RESERVE_SIZE
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 #define MSGPACK_ZBUFFER_RESERVE_SIZE 512
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 #endif
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 static inline int msgpack_zbuffer_write(void* data, const char* buf, size_t len);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 static inline bool msgpack_zbuffer_expand(msgpack_zbuffer* zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
64
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 static inline bool msgpack_zbuffer_init(msgpack_zbuffer* zbuf,
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 int level, size_t init_size)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 memset(zbuf, 0, sizeof(msgpack_zbuffer));
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 zbuf->init_size = init_size;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 if(deflateInit(&zbuf->stream, level) != Z_OK) {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 free(zbuf->data);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 return false;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 return true;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
76
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 static inline void msgpack_zbuffer_destroy(msgpack_zbuffer* zbuf)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 deflateEnd(&zbuf->stream);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 free(zbuf->data);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 static inline msgpack_zbuffer* msgpack_zbuffer_new(int level, size_t init_size)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 msgpack_zbuffer* zbuf = (msgpack_zbuffer*)malloc(sizeof(msgpack_zbuffer));
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 if (zbuf == NULL) return NULL;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 if(!msgpack_zbuffer_init(zbuf, level, init_size)) {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 free(zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 return NULL;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 return zbuf;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
93
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 static inline void msgpack_zbuffer_free(msgpack_zbuffer* zbuf)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 if(zbuf == NULL) { return; }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 msgpack_zbuffer_destroy(zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 free(zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 static inline bool msgpack_zbuffer_expand(msgpack_zbuffer* zbuf)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 size_t used = (char*)zbuf->stream.next_out - zbuf->data;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 size_t csize = used + zbuf->stream.avail_out;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 size_t nsize = (csize == 0) ? zbuf->init_size : csize * 2;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
106
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 char* tmp = (char*)realloc(zbuf->data, nsize);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 if(tmp == NULL) {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 return false;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
111
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 zbuf->data = tmp;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 zbuf->stream.next_out = (Bytef*)(tmp + used);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 zbuf->stream.avail_out = nsize - used;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
115
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 return true;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
118
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 static inline int msgpack_zbuffer_write(void* data, const char* buf, size_t len)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 msgpack_zbuffer* zbuf = (msgpack_zbuffer*)data;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
122
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 zbuf->stream.next_in = (Bytef*)buf;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 zbuf->stream.avail_in = len;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
125
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 while(zbuf->stream.avail_in > 0) {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 if(zbuf->stream.avail_out < MSGPACK_ZBUFFER_RESERVE_SIZE) {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 if(!msgpack_zbuffer_expand(zbuf)) {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 return -1;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
132
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 if(deflate(&zbuf->stream, Z_NO_FLUSH) != Z_OK) {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 return -1;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
137
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 return 0;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
140
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 static inline char* msgpack_zbuffer_flush(msgpack_zbuffer* zbuf)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 while(true) {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 switch(deflate(&zbuf->stream, Z_FINISH)) {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 case Z_STREAM_END:
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 return zbuf->data;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 case Z_OK:
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 if(!msgpack_zbuffer_expand(zbuf)) {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 return NULL;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 break;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 default:
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 return NULL;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
157
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 static inline const char* msgpack_zbuffer_data(const msgpack_zbuffer* zbuf)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 return zbuf->data;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
162
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 static inline size_t msgpack_zbuffer_size(const msgpack_zbuffer* zbuf)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 return (char*)zbuf->stream.next_out - zbuf->data;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
167
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 static inline void msgpack_zbuffer_reset_buffer(msgpack_zbuffer* zbuf)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 zbuf->stream.avail_out += (char*)zbuf->stream.next_out - zbuf->data;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 zbuf->stream.next_out = (Bytef*)zbuf->data;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
173
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 static inline bool msgpack_zbuffer_reset(msgpack_zbuffer* zbuf)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 if(deflateReset(&zbuf->stream) != Z_OK) {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 return false;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 msgpack_zbuffer_reset_buffer(zbuf);
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 return true;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
182
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 static inline char* msgpack_zbuffer_release_buffer(msgpack_zbuffer* zbuf)
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 {
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 char* tmp = zbuf->data;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 zbuf->data = NULL;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 zbuf->stream.next_out = NULL;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 zbuf->stream.avail_out = 0;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 return tmp;
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
191
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 /** @} */
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
193
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
194
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 #ifdef __cplusplus
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 }
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 #endif
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
198
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 #endif /* msgpack/zbuffer.h */
9298566b4708 msgpack: import 2.0.0
David Demelier <markand@malikania.fr>
parents:
diff changeset
200