MessagePack for C
Loading...
Searching...
No Matches
unpack.h
Go to the documentation of this file.
1/*
2 * MessagePack for C unpacking routine
3 *
4 * Copyright (C) 2008-2009 FURUHASHI Sadayuki
5 *
6 * Distributed under the Boost Software License, Version 1.0.
7 * (See accompanying file LICENSE_1_0.txt or copy at
8 * http://www.boost.org/LICENSE_1_0.txt)
9 */
10#ifndef MSGPACK_UNPACKER_H
11#define MSGPACK_UNPACKER_H
12
13#include "zone.h"
14#include "object.h"
15#include <string.h>
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21
32
40
41
42MSGPACK_DLLEXPORT
45 const char* data, size_t len, size_t* off);
46
56typedef struct msgpack_unpacker {
57 char* buffer;
58 size_t used;
59 size_t free;
60 size_t off;
61 size_t parsed;
64 void* ctx;
66
67
68#ifndef MSGPACK_UNPACKER_INIT_BUFFER_SIZE
69#define MSGPACK_UNPACKER_INIT_BUFFER_SIZE (64*1024)
70#endif
71
76MSGPACK_DLLEXPORT
77bool msgpack_unpacker_init(msgpack_unpacker* mpac, size_t initial_buffer_size);
78
82MSGPACK_DLLEXPORT
84
85
90MSGPACK_DLLEXPORT
91msgpack_unpacker* msgpack_unpacker_new(size_t initial_buffer_size);
92
96MSGPACK_DLLEXPORT
98
99
100#ifndef MSGPACK_UNPACKER_RESERVE_SIZE
101#define MSGPACK_UNPACKER_RESERVE_SIZE (32*1024)
102#endif
103
111static inline bool msgpack_unpacker_reserve_buffer(msgpack_unpacker* mpac, size_t size);
112
120static inline char* msgpack_unpacker_buffer(msgpack_unpacker* mpac);
121
129static inline size_t msgpack_unpacker_buffer_capacity(const msgpack_unpacker* mpac);
130
138static inline void msgpack_unpacker_buffer_consumed(msgpack_unpacker* mpac, size_t size);
139
140
146MSGPACK_DLLEXPORT
148
156MSGPACK_DLLEXPORT
158 msgpack_unpacked* result,
159 size_t *p_bytes);
160
167static inline void msgpack_unpacked_init(msgpack_unpacked* result);
168
172static inline void msgpack_unpacked_destroy(msgpack_unpacked* result);
173
178static inline msgpack_zone* msgpack_unpacked_release_zone(msgpack_unpacked* result);
179
180
181MSGPACK_DLLEXPORT
183
184MSGPACK_DLLEXPORT
186
187MSGPACK_DLLEXPORT
189
190MSGPACK_DLLEXPORT
192
193MSGPACK_DLLEXPORT
195
196static inline size_t msgpack_unpacker_message_size(const msgpack_unpacker* mpac);
197
198
202// obsolete
203MSGPACK_DLLEXPORT
205msgpack_unpack(const char* data, size_t len, size_t* off,
206 msgpack_zone* result_zone, msgpack_object* result);
207
208
209
210
211static inline size_t msgpack_unpacker_parsed_size(const msgpack_unpacker* mpac);
212
213MSGPACK_DLLEXPORT
215
216MSGPACK_DLLEXPORT
218
219static inline bool msgpack_unpacker_reserve_buffer(msgpack_unpacker* mpac, size_t size)
220{
221 if(mpac->free >= size) { return true; }
222 return msgpack_unpacker_expand_buffer(mpac, size);
223}
224
225static inline char* msgpack_unpacker_buffer(msgpack_unpacker* mpac)
226{
227 return mpac->buffer + mpac->used;
228}
229
230static inline size_t msgpack_unpacker_buffer_capacity(const msgpack_unpacker* mpac)
231{
232 return mpac->free;
233}
234
235static inline void msgpack_unpacker_buffer_consumed(msgpack_unpacker* mpac, size_t size)
236{
237 mpac->used += size;
238 mpac->free -= size;
239}
240
241static inline size_t msgpack_unpacker_message_size(const msgpack_unpacker* mpac)
242{
243 return mpac->parsed - mpac->off + mpac->used;
244}
245
246static inline size_t msgpack_unpacker_parsed_size(const msgpack_unpacker* mpac)
247{
248 return mpac->parsed;
249}
250
251
252static inline void msgpack_unpacked_init(msgpack_unpacked* result)
253{
254 memset(result, 0, sizeof(msgpack_unpacked));
255}
256
257static inline void msgpack_unpacked_destroy(msgpack_unpacked* result)
258{
259 if(result->zone != NULL) {
260 msgpack_zone_free(result->zone);
261 result->zone = NULL;
262 memset(&result->data, 0, sizeof(msgpack_object));
263 }
264}
265
266static inline msgpack_zone* msgpack_unpacked_release_zone(msgpack_unpacked* result)
267{
268 if(result->zone != NULL) {
269 msgpack_zone* z = result->zone;
270 result->zone = NULL;
271 return z;
272 }
273 return NULL;
274}
275
276
277#ifdef __cplusplus
278}
279#endif
280
281#endif /* msgpack/unpack.h */
msgpack_unpack_return
Definition unpack.h:33
MSGPACK_DLLEXPORT msgpack_unpack_return msgpack_unpack_next(msgpack_unpacked *result, const char *data, size_t len, size_t *off)
@ MSGPACK_UNPACK_PARSE_ERROR
Definition unpack.h:37
@ MSGPACK_UNPACK_CONTINUE
Definition unpack.h:36
@ MSGPACK_UNPACK_NOMEM_ERROR
Definition unpack.h:38
@ MSGPACK_UNPACK_EXTRA_BYTES
Definition unpack.h:35
@ MSGPACK_UNPACK_SUCCESS
Definition unpack.h:34
MSGPACK_DLLEXPORT msgpack_unpack_return msgpack_unpacker_next_with_size(msgpack_unpacker *mpac, msgpack_unpacked *result, size_t *p_bytes)
Deserializes one object and set the number of parsed bytes involved.
MSGPACK_DLLEXPORT void msgpack_unpacker_reset_zone(msgpack_unpacker *mpac)
MSGPACK_DLLEXPORT void msgpack_unpacker_destroy(msgpack_unpacker *mpac)
Destroys a streaming deserializer initialized by msgpack_unpacker_init(msgpack_unpacker*,...
MSGPACK_DLLEXPORT msgpack_unpack_return msgpack_unpacker_next(msgpack_unpacker *mpac, msgpack_unpacked *pac)
Deserializes one object.
MSGPACK_DLLEXPORT msgpack_zone * msgpack_unpacker_release_zone(msgpack_unpacker *mpac)
MSGPACK_DLLEXPORT msgpack_object msgpack_unpacker_data(msgpack_unpacker *mpac)
MSGPACK_DLLEXPORT void msgpack_unpacker_reset(msgpack_unpacker *mpac)
MSGPACK_DLLEXPORT int msgpack_unpacker_execute(msgpack_unpacker *mpac)
MSGPACK_DLLEXPORT bool msgpack_unpacker_init(msgpack_unpacker *mpac, size_t initial_buffer_size)
Initializes a streaming deserializer.
MSGPACK_DLLEXPORT msgpack_unpacker * msgpack_unpacker_new(size_t initial_buffer_size)
Creates a streaming deserializer.
MSGPACK_DLLEXPORT void msgpack_unpacker_free(msgpack_unpacker *mpac)
Frees a streaming deserializer created by msgpack_unpacker_new(size_t).
MSGPACK_DLLEXPORT void msgpack_zone_free(msgpack_zone *zone)
Definition object.h:90
Definition unpack.h:28
msgpack_object data
Definition unpack.h:30
msgpack_zone * zone
Definition unpack.h:29
Definition unpack.h:56
size_t off
Definition unpack.h:60
size_t parsed
Definition unpack.h:61
char * buffer
Definition unpack.h:57
size_t used
Definition unpack.h:58
msgpack_zone * z
Definition unpack.h:62
void * ctx
Definition unpack.h:64
size_t initial_buffer_size
Definition unpack.h:63
size_t free
Definition unpack.h:59
Definition zone.h:46
MSGPACK_DLLEXPORT bool msgpack_unpacker_flush_zone(msgpack_unpacker *mpac)
MSGPACK_DLLEXPORT bool msgpack_unpacker_expand_buffer(msgpack_unpacker *mpac, size_t size)
MSGPACK_DLLEXPORT msgpack_unpack_return msgpack_unpack(const char *data, size_t len, size_t *off, msgpack_zone *result_zone, msgpack_object *result)
const char size_t size_t * off
Definition unpack_template.h:95
const char * data
Definition unpack_template.h:94
const char size_t len
Definition unpack_template.h:94