MessagePack for C
Macros | Functions | Variables
unpack_template.h File Reference

Go to the source code of this file.

Macros

#define msgpack_unpack_struct_decl(name)   msgpack_unpack_struct(name)
 
#define USE_CASE_RANGE
 
#define push_simple_value(func)
 
#define push_fixed_value(func, arg)
 
#define push_variable_value(func, base, pos, len)
 
#define again_fixed_trail(_cs, trail_len)
 
#define again_fixed_trail_if_zero(_cs, trail_len, ifzero)
 
#define start_container(func, count_, ct_)
 
#define NEXT_CS(p)   ((unsigned int)*p & 0x1f)
 
#define SWITCH_RANGE_BEGIN   switch(*p) {
 
#define SWITCH_RANGE(FROM, TO)   case FROM ... TO:
 
#define SWITCH_RANGE_DEFAULT   default:
 
#define SWITCH_RANGE_END   }
 

Functions

 msgpack_unpack_struct_decl (_stack)
 
 msgpack_unpack_struct_decl (_context)
 
 msgpack_unpack_func (void, _init)(msgpack_unpack_struct(_context)*ctx)
 
 msgpack_unpack_func (msgpack_unpack_object, _data)(msgpack_unpack_struct(_context)*ctx)
 
 msgpack_unpack_func (int, _execute)(msgpack_unpack_struct(_context)*ctx
 
 msgpack_unpack_struct (_stack)*stack = NULL
 
 if (p==pe)
 
 switch (c->ct)
 
 while (p!=pe)
 

Variables

const char * data
 
const char size_t len
 
const char size_t size_t * off
 
const unsigned char *const pe = (unsigned char*)data + len
 
const void * n = NULL
 
unsigned int trail = ctx->trail
 
unsigned int cs = ctx->cs
 
unsigned int top = ctx->top
 
msgpack_unpack_user * user = &ctx->user
 
msgpack_unpack_object obj
 
int ret = 1
 
 do
 
_header_again __pad0__
 
 p
 
goto _out
 
_finish __pad1__
 
goto _end
 
_failed __pad2__
 
_out __pad3__
 
_end __pad4__
 

Macro Definition Documentation

#define again_fixed_trail (   _cs,
  trail_len 
)
Value:
trail = trail_len; \
cs = _cs; \
goto _fixed_trail_again
unsigned int trail
Definition: unpack_template.h:97
unsigned int cs
Definition: unpack_template.h:98
#define again_fixed_trail_if_zero (   _cs,
  trail_len,
  ifzero 
)
Value:
trail = trail_len; \
if(trail == 0) { goto ifzero; } \
cs = _cs; \
goto _fixed_trail_again
if(p==pe)
Definition: unpack_template.h:177
unsigned int trail
Definition: unpack_template.h:97
unsigned int cs
Definition: unpack_template.h:98
#define msgpack_unpack_struct_decl (   name)    msgpack_unpack_struct(name)
#define NEXT_CS (   p)    ((unsigned int)*p & 0x1f)
#define push_fixed_value (   func,
  arg 
)
Value:
if(msgpack_unpack_callback(func)(user, arg, &obj) < 0) { goto _failed; } \
goto _push
msgpack_unpack_user * user
Definition: unpack_template.h:104
msgpack_unpack_object obj
Definition: unpack_template.h:106
#define push_simple_value (   func)
Value:
if(msgpack_unpack_callback(func)(user, &obj) < 0) { goto _failed; } \
goto _push
msgpack_unpack_user * user
Definition: unpack_template.h:104
msgpack_unpack_object obj
Definition: unpack_template.h:106
#define push_variable_value (   func,
  base,
  pos,
  len 
)
Value:
if(msgpack_unpack_callback(func)(user, \
(const char*)base, (const char*)pos, len, &obj) < 0) { goto _failed; } \
goto _push
msgpack_unpack_user * user
Definition: unpack_template.h:104
msgpack_unpack_object obj
Definition: unpack_template.h:106
const char size_t len
Definition: unpack_template.h:89
#define start_container (   func,
  count_,
  ct_ 
)
Value:
if(top >= MSGPACK_EMBED_STACK_SIZE) { goto _failed; } /* FIXME */ \
if(msgpack_unpack_callback(func)(user, count_, &stack[top].obj) < 0) { goto _failed; } \
if((count_) == 0) { obj = stack[top].obj; goto _push; } \
stack[top].ct = ct_; \
stack[top].count = count_; \
++top; \
/*printf("container %d count %d stack %d\n",stack[top].obj,count_,top);*/ \
/*printf("stack push %d\n", top);*/ \
/* FIXME \
if(top >= stack_size) { \
if(stack_size == MSGPACK_EMBED_STACK_SIZE) { \
size_t csize = sizeof(msgpack_unpack_struct(_stack)) * MSGPACK_EMBED_STACK_SIZE; \
size_t nsize = csize * 2; \
msgpack_unpack_struct(_stack)* tmp = (msgpack_unpack_struct(_stack)*)malloc(nsize); \
if(tmp == NULL) { goto _failed; } \
memcpy(tmp, ctx->stack, csize); \
ctx->stack = stack = tmp; \
ctx->stack_size = stack_size = MSGPACK_EMBED_STACK_SIZE * 2; \
} else { \
size_t nsize = sizeof(msgpack_unpack_struct(_stack)) * ctx->stack_size * 2; \
msgpack_unpack_struct(_stack)* tmp = (msgpack_unpack_struct(_stack)*)realloc(ctx->stack, nsize); \
if(tmp == NULL) { goto _failed; } \
ctx->stack = stack = tmp; \
ctx->stack_size = stack_size = stack_size * 2; \
} \
} \
*/ \
goto _header_again
msgpack_unpack_user * user
Definition: unpack_template.h:104
#define MSGPACK_EMBED_STACK_SIZE
Definition: unpack_define.h:25
if(p==pe)
Definition: unpack_template.h:177
msgpack_unpack_object obj
Definition: unpack_template.h:106
unsigned int top
Definition: unpack_template.h:99
#define SWITCH_RANGE (   FROM,
  TO 
)    case FROM ... TO:
#define SWITCH_RANGE_BEGIN   switch(*p) {
#define SWITCH_RANGE_DEFAULT   default:
#define SWITCH_RANGE_END   }
#define USE_CASE_RANGE

Function Documentation

if ( p  = pe)

References _out.

msgpack_unpack_func ( void  ,
_init   
)

References MSGPACK_CS_HEADER.

msgpack_unpack_func ( msgpack_unpack_object  ,
_data   
)
msgpack_unpack_func ( int  ,
_execute   
)
msgpack_unpack_struct ( _stack  ) = NULL
msgpack_unpack_struct_decl ( _stack  )

References obj.

msgpack_unpack_struct_decl ( _context  )
switch ( c->  ct)
while ( p!  = pe)

Variable Documentation

_header_again __pad0__
_finish __pad1__
_failed __pad2__
_out __pad3__
_end __pad4__
goto _end
goto _out

Referenced by if().

unsigned int cs = ctx->cs
const char* data
do
const char size_t len
const void* n = NULL

Referenced by _array(), and _map().

msgpack_unpack_object obj
* off
Initial value:
{
assert(len >= *off)
const char size_t size_t * off
Definition: unpack_template.h:90
const char size_t len
Definition: unpack_template.h:89
p
const unsigned char* const pe = (unsigned char*)data + len
return ret = 1
ctx top = ctx->top
ctx trail = ctx->trail
msgpack_unpack_user* user = &ctx->user