Go to the documentation of this file.
11 #ifndef msgpack_unpack_func
12 #error msgpack_unpack_func template is not defined
15 #ifndef msgpack_unpack_callback
16 #error msgpack_unpack_callback template is not defined
19 #ifndef msgpack_unpack_struct
20 #error msgpack_unpack_struct template is not defined
23 #ifndef msgpack_unpack_struct_decl
24 #define msgpack_unpack_struct_decl(name) msgpack_unpack_struct(name)
27 #ifndef msgpack_unpack_object
28 #error msgpack_unpack_object type is not defined
31 #ifndef msgpack_unpack_user
32 #error msgpack_unpack_user type is not defined
35 #ifndef USE_CASE_RANGE
36 #if !defined(_MSC_VER)
37 #define USE_CASE_RANGE
42 msgpack_unpack_object
obj;
45 msgpack_unpack_object map_key;
49 msgpack_unpack_user
user;
71 ctx->stack[0].obj = msgpack_unpack_callback(_root)(&ctx->user);
85 return (ctx)->stack[0].obj;
93 const unsigned char*
p = (
unsigned char*)
data + *
off;
94 const unsigned char*
const pe = (
unsigned char*)
data +
len;
97 unsigned int trail = ctx->trail;
98 unsigned int cs = ctx->cs;
99 unsigned int top = ctx->top;
104 msgpack_unpack_user*
user = &ctx->user;
106 msgpack_unpack_object
obj;
111 #define push_simple_value(func) \
112 ret = msgpack_unpack_callback(func)(user, &obj); \
113 if(ret < 0) { goto _failed; } \
115 #define push_fixed_value(func, arg) \
116 ret = msgpack_unpack_callback(func)(user, arg, &obj); \
117 if(ret < 0) { goto _failed; } \
119 #define push_variable_value(func, base, pos, len) \
120 ret = msgpack_unpack_callback(func)(user, \
121 (const char*)base, (const char*)pos, len, &obj); \
122 if(ret < 0) { goto _failed; } \
125 #define again_fixed_trail(_cs, trail_len) \
128 goto _fixed_trail_again
129 #define again_fixed_trail_if_zero(_cs, trail_len, ifzero) \
131 if(trail == 0) { goto ifzero; } \
133 goto _fixed_trail_again
135 #define start_container(func, count_, ct_) \
136 if(top >= MSGPACK_EMBED_STACK_SIZE) { \
137 ret = MSGPACK_UNPACK_NOMEM_ERROR; \
140 ret = msgpack_unpack_callback(func)(user, count_, &stack[top].obj); \
141 if(ret < 0) { goto _failed; } \
142 if((count_) == 0) { obj = stack[top].obj; goto _push; } \
143 stack[top].ct = ct_; \
144 stack[top].count = count_; \
149 ((unsigned int)*p & 0x1f)
151 #ifdef USE_CASE_RANGE
152 #define SWITCH_RANGE_BEGIN switch(*p) {
153 #define SWITCH_RANGE(FROM, TO) case FROM ... TO:
154 #define SWITCH_RANGE_DEFAULT default:
155 #define SWITCH_RANGE_END }
157 #define SWITCH_RANGE_BEGIN { if(0) {
158 #define SWITCH_RANGE(FROM, TO) } else if(FROM <= *p && *p <= TO) {
159 #define SWITCH_RANGE_DEFAULT } else {
160 #define SWITCH_RANGE_END } }
206 (1 << (((
unsigned int)*
p) & 0x03)) + 1, _ext_zero);
248 union { uint32_t i;
float f; } mem;
252 union { uint64_t i;
double f; } mem;
254 #if defined(TARGET_OS_IPHONE)
256 #elif defined(__arm__) && !(__ARM_EABI__) // arm-oabi
258 mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
382 if(
top == 0) {
goto _finish; }
386 ret = msgpack_unpack_callback(_array_item)(
user, &c->obj,
obj); \
387 if(
ret < 0) {
goto _failed; }
388 if(--c->count == 0) {
400 ret = msgpack_unpack_callback(_map_item)(
user, &c->obj, c->map_key,
obj); \
401 if(
ret < 0) {
goto _failed; }
402 if(--c->count == 0) {
442 *
off = (size_t)(
p - (
const unsigned char*)
data);
448 #undef msgpack_unpack_func
449 #undef msgpack_unpack_callback
450 #undef msgpack_unpack_struct
451 #undef msgpack_unpack_object
452 #undef msgpack_unpack_user
454 #undef push_simple_value
455 #undef push_fixed_value
456 #undef push_variable_value
457 #undef again_fixed_trail
458 #undef again_fixed_trail_if_zero
459 #undef start_container
463 #undef SWITCH_RANGE_BEGIN
465 #undef SWITCH_RANGE_DEFAULT
466 #undef SWITCH_RANGE_END
msgpack_pack_inline_func() _map(msgpack_pack_user x, size_t n)
Definition: pack_template.h:730
const char size_t size_t * off
Definition: unpack_template.h:90
#define SWITCH_RANGE_END
Definition: unpack_template.h:155
@ MSGPACK_CS_FLOAT
Definition: unpack_define.h:44
@ MSGPACK_CS_ARRAY_16
Definition: unpack_define.h:64
@ MSGPACK_CS_BIN_8
Definition: unpack_define.h:36
msgpack_unpack_user * user
Definition: unpack_template.h:104
@ MSGPACK_CS_EXT_16
Definition: unpack_define.h:41
msgpack_pack_inline_func() _nil(msgpack_pack_user x)
Definition: pack_template.h:681
@ MSGPACK_CS_BIN_32
Definition: unpack_define.h:38
@ MSGPACK_CS_FIXEXT_2
Definition: unpack_define.h:56
msgpack_pack_inline_func() _array(msgpack_pack_user x, size_t n)
Definition: pack_template.h:709
@ MSGPACK_CS_ARRAY_32
Definition: unpack_define.h:65
unsigned int top
Definition: unpack_template.h:99
msgpack_pack_inline_func() _double(msgpack_pack_user x, double d)
Definition: pack_template.h:660
msgpack_pack_inline_func() _str(msgpack_pack_user x, size_t l)
Definition: pack_template.h:751
#define _msgpack_load32(cast, from, to)
Definition: sysdep.h:154
int ret
Definition: unpack_template.h:109
@ MSGPACK_CS_DOUBLE
Definition: unpack_define.h:45
msgpack_pack_inline_func() _uint64(msgpack_pack_user x, uint64_t d)
Definition: pack_template.h:344
@ MSGPACK_CS_FIXEXT_4
Definition: unpack_define.h:57
msgpack_pack_inline_func() _int64(msgpack_pack_user x, int64_t d)
Definition: pack_template.h:364
msgpack_pack_inline_func() _uint16(msgpack_pack_user x, uint16_t d)
Definition: pack_template.h:334
@ MSGPACK_ACS_EXT_VALUE
Definition: unpack_define.h:73
#define _msgpack_load16(cast, from, to)
Definition: sysdep.h:149
msgpack_pack_inline_func() _false(msgpack_pack_user x)
Definition: pack_template.h:698
@ MSGPACK_ACS_STR_VALUE
Definition: unpack_define.h:71
p
Definition: unpack_template.h:418
#define SWITCH_RANGE_BEGIN
Definition: unpack_template.h:152
#define again_fixed_trail_if_zero(_cs, trail_len, ifzero)
Definition: unpack_template.h:129
const void * n
Definition: unpack_template.h:95
@ MSGPACK_CS_MAP_16
Definition: unpack_define.h:66
#define SWITCH_RANGE(FROM, TO)
Definition: unpack_template.h:153
#define NEXT_CS(p)
Definition: unpack_template.h:148
#define push_fixed_value(func, arg)
Definition: unpack_template.h:115
const unsigned char *const pe
Definition: unpack_template.h:94
msgpack_pack_inline_func() _uint8(msgpack_pack_user x, uint8_t d)
Definition: pack_template.h:329
msgpack_pack_inline_func() _int16(msgpack_pack_user x, int16_t d)
Definition: pack_template.h:354
#define SWITCH_RANGE_DEFAULT
Definition: unpack_template.h:154
#define _msgpack_load64(cast, from, to)
Definition: sysdep.h:158
msgpack_pack_inline_func() _ext(msgpack_pack_user x, size_t l, int8_t type)
Definition: pack_template.h:831
@ MSGPACK_CS_STR_16
Definition: unpack_define.h:62
#define again_fixed_trail(_cs, trail_len)
Definition: unpack_template.h:125
@ MSGPACK_CS_INT_8
Definition: unpack_define.h:50
const char * data
Definition: unpack_template.h:89
@ MSGPACK_CS_UINT_16
Definition: unpack_define.h:47
@ MSGPACK_CS_MAP_32
Definition: unpack_define.h:67
@ MSGPACK_UNPACK_PARSE_ERROR
Definition: unpack.h:37
@ MSGPACK_CS_UINT_64
Definition: unpack_define.h:49
@ MSGPACK_CS_EXT_8
Definition: unpack_define.h:40
msgpack_pack_inline_func() _uint32(msgpack_pack_user x, uint32_t d)
Definition: pack_template.h:339
@ MSGPACK_CS_HEADER
Definition: unpack_define.h:30
#define push_simple_value(func)
Definition: unpack_template.h:111
@ MSGPACK_CT_ARRAY_ITEM
Definition: unpack_define.h:78
#define start_container(func, count_, ct_)
Definition: unpack_template.h:135
msgpack_unpack_struct(_stack) *stack
#define msgpack_unpack_struct_decl(name)
Definition: unpack_template.h:24
@ MSGPACK_CS_FIXEXT_8
Definition: unpack_define.h:58
msgpack_pack_inline_func() _float(msgpack_pack_user x, float d)
Definition: pack_template.h:651
msgpack_unpack_object obj
Definition: unpack_template.h:106
unsigned int cs
Definition: unpack_template.h:98
@ MSGPACK_CS_BIN_16
Definition: unpack_define.h:37
msgpack_pack_inline_func() _bin(msgpack_pack_user x, size_t l)
Definition: pack_template.h:805
@ MSGPACK_CS_FIXEXT_16
Definition: unpack_define.h:59
unsigned int trail
Definition: unpack_template.h:97
@ MSGPACK_CS_INT_32
Definition: unpack_define.h:52
@ MSGPACK_CS_FIXEXT_1
Definition: unpack_define.h:55
#define MSGPACK_EMBED_STACK_SIZE
Definition: unpack_define.h:25
@ MSGPACK_ACS_BIN_VALUE
Definition: unpack_define.h:72
@ MSGPACK_CS_EXT_32
Definition: unpack_define.h:42
@ MSGPACK_CS_UINT_8
Definition: unpack_define.h:46
#define push_variable_value(func, base, pos, len)
Definition: unpack_template.h:119
@ MSGPACK_CS_UINT_32
Definition: unpack_define.h:48
@ MSGPACK_CS_INT_64
Definition: unpack_define.h:53
@ MSGPACK_CS_INT_16
Definition: unpack_define.h:51
@ MSGPACK_CT_MAP_VALUE
Definition: unpack_define.h:80
goto _out
Definition: unpack_template.h:420
msgpack_pack_inline_func() _int8(msgpack_pack_user x, int8_t d)
Definition: pack_template.h:349
@ MSGPACK_CS_STR_32
Definition: unpack_define.h:63
@ MSGPACK_CT_MAP_KEY
Definition: unpack_define.h:79
@ MSGPACK_CS_STR_8
Definition: unpack_define.h:61
msgpack_pack_inline_func() _int32(msgpack_pack_user x, int32_t d)
Definition: pack_template.h:359
const char size_t len
Definition: unpack_template.h:89
goto _end
Definition: unpack_template.h:428
msgpack_pack_inline_func() _true(msgpack_pack_user x)
Definition: pack_template.h:692
msgpack_unpack_func(void, _init)(msgpack_unpack_struct(_context) *ctx)
Definition: unpack_template.h:62