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);
242 if((
size_t)(pe - p) < trail) {
goto _out; }
243 n =
p; p += trail - 1;
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 Definition: unpack_define.h:67
Definition: unpack_define.h:37
Definition: unpack_define.h:56
msgpack_pack_inline_func() _double(msgpack_pack_user x, double d)
Definition: pack_template.h:660
#define again_fixed_trail_if_zero(_cs, trail_len, ifzero)
Definition: unpack_template.h:129
msgpack_unpack_user * user
Definition: unpack_template.h:104
msgpack_pack_inline_func() _int16(msgpack_pack_user x, int16_t d)
Definition: pack_template.h:354
Definition: unpack_define.h:62
Definition: unpack_define.h:80
const char size_t size_t * off
Definition: unpack_template.h:90
Definition: unpack_define.h:41
Definition: unpack_define.h:52
int ret
Definition: unpack_template.h:109
msgpack_pack_inline_func() _uint8(msgpack_pack_user x, uint8_t d)
Definition: pack_template.h:329
msgpack_pack_inline_func() _ext(msgpack_pack_user x, size_t l, int8_t type)
Definition: pack_template.h:831
Definition: unpack_define.h:71
msgpack_pack_inline_func() _int8(msgpack_pack_user x, int8_t d)
Definition: pack_template.h:349
Definition: unpack_define.h:38
Definition: unpack_define.h:51
#define _msgpack_load16(cast, from, to)
Definition: sysdep.h:149
#define MSGPACK_EMBED_STACK_SIZE
Definition: unpack_define.h:25
msgpack_pack_inline_func() _bin(msgpack_pack_user x, size_t l)
Definition: pack_template.h:805
goto _end
Definition: unpack_template.h:428
Definition: unpack_define.h:44
#define SWITCH_RANGE_END
Definition: unpack_template.h:155
Definition: unpack_define.h:66
Definition: unpack_define.h:45
Definition: unpack_define.h:73
Definition: unpack_define.h:36
Definition: unpack_define.h:47
Definition: unpack_define.h:59
#define SWITCH_RANGE_DEFAULT
Definition: unpack_template.h:154
#define push_fixed_value(func, arg)
Definition: unpack_template.h:115
const unsigned char *const pe
Definition: unpack_template.h:94
msgpack_unpack_struct(_stack) *stack
const void * n
Definition: unpack_template.h:95
Definition: unpack_define.h:57
msgpack_pack_inline_func() _uint32(msgpack_pack_user x, uint32_t d)
Definition: pack_template.h:339
#define again_fixed_trail(_cs, trail_len)
Definition: unpack_template.h:125
Definition: unpack_define.h:30
#define SWITCH_RANGE(FROM, TO)
Definition: unpack_template.h:153
msgpack_pack_inline_func() _false(msgpack_pack_user x)
Definition: pack_template.h:698
Definition: unpack_define.h:53
msgpack_pack_inline_func() _nil(msgpack_pack_user x)
Definition: pack_template.h:681
msgpack_pack_inline_func() _true(msgpack_pack_user x)
Definition: pack_template.h:692
#define NEXT_CS(p)
Definition: unpack_template.h:148
msgpack_pack_inline_func() _uint16(msgpack_pack_user x, uint16_t d)
Definition: pack_template.h:334
Definition: unpack_define.h:48
msgpack_pack_inline_func() _array(msgpack_pack_user x, size_t n)
Definition: pack_template.h:709
#define push_variable_value(func, base, pos, len)
Definition: unpack_template.h:119
Definition: unpack_define.h:42
Definition: unpack_define.h:46
p
Definition: unpack_template.h:418
msgpack_unpack_object obj
Definition: unpack_template.h:106
Definition: unpack_define.h:55
#define SWITCH_RANGE_BEGIN
Definition: unpack_template.h:152
msgpack_pack_inline_func() _int32(msgpack_pack_user x, int32_t d)
Definition: pack_template.h:359
unsigned int trail
Definition: unpack_template.h:97
Definition: unpack_define.h:40
msgpack_pack_inline_func() _uint64(msgpack_pack_user x, uint64_t d)
Definition: pack_template.h:344
Definition: unpack_define.h:64
Definition: unpack_define.h:65
msgpack_pack_inline_func() _map(msgpack_pack_user x, size_t n)
Definition: pack_template.h:730
msgpack_pack_inline_func() _int64(msgpack_pack_user x, int64_t d)
Definition: pack_template.h:364
const char * data
Definition: unpack_template.h:89
#define _msgpack_load32(cast, from, to)
Definition: sysdep.h:154
unsigned int cs
Definition: unpack_template.h:98
Definition: unpack_define.h:63
#define _msgpack_load64(cast, from, to)
Definition: sysdep.h:158
Definition: unpack_define.h:58
#define push_simple_value(func)
Definition: unpack_template.h:111
Definition: unpack_define.h:72
Definition: unpack_define.h:61
Definition: unpack_define.h:50
msgpack_pack_inline_func() _str(msgpack_pack_user x, size_t l)
Definition: pack_template.h:751
Definition: unpack_define.h:79
const char size_t len
Definition: unpack_template.h:89
#define msgpack_unpack_struct_decl(name)
Definition: unpack_template.h:24
goto _out
Definition: unpack_template.h:420
msgpack_pack_inline_func() _float(msgpack_pack_user x, float d)
Definition: pack_template.h:651
Definition: unpack_define.h:49
Definition: unpack_define.h:78
unsigned int top
Definition: unpack_template.h:99
msgpack_unpack_func(void, _init)(msgpack_unpack_struct(_context) *ctx)
Definition: unpack_template.h:62
#define start_container(func, count_, ct_)
Definition: unpack_template.h:135