10 #ifndef MSGPACK_V1_UNPACK_HPP 11 #define MSGPACK_V1_UNPACK_HPP 18 #include "msgpack/unpack_define.h" 20 #include "msgpack/sysdep.h" 24 #if !defined(MSGPACK_USE_CPP03) 34 #endif // defined(_MSC_VER) 126 #if defined(__GNUC__) && !defined(__clang__) 148 #if defined(__GNUC__) && !defined(__clang__) 168 std::memcpy(tmp, p, l);
184 std::memcpy(tmp, p, l);
200 std::memcpy(tmp, p, l);
203 o.
via.
ext.
size =
static_cast<uint32_t
>(l - 1);
212 std::size_t
count()
const {
return m_count; }
222 uint32_t m_container_type;
228 #if defined(MSGPACK_USE_CPP03) 229 *
reinterpret_cast<volatile _msgpack_atomic_counter_t*
>(buffer) = 1;
230 #else // defined(MSGPACK_USE_CPP03) 231 new (buffer) std::atomic<unsigned int>(1);
232 #endif // defined(MSGPACK_USE_CPP03) 237 #if defined(MSGPACK_USE_CPP03) 238 if(_msgpack_sync_decr_and_fetch(reinterpret_cast<volatile _msgpack_atomic_counter_t*>(buffer)) == 0) {
241 #else // defined(MSGPACK_USE_CPP03) 242 if (--*
reinterpret_cast<std::atomic<unsigned int>*
>(buffer) == 0) {
245 #endif // defined(MSGPACK_USE_CPP03) 250 #if defined(MSGPACK_USE_CPP03) 251 _msgpack_sync_incr_and_fetch(reinterpret_cast<volatile _msgpack_atomic_counter_t*>(buffer));
252 #else // defined(MSGPACK_USE_CPP03) 253 ++*
reinterpret_cast<std::atomic<unsigned int>*
>(buffer);
254 #endif // defined(MSGPACK_USE_CPP03) 257 #if defined(MSGPACK_USE_CPP03) 258 inline _msgpack_atomic_counter_t
get_count(
void* buffer)
260 return *
reinterpret_cast<volatile _msgpack_atomic_counter_t*
>(buffer);
262 #else // defined(MSGPACK_USE_CPP03) 263 inline std::atomic<unsigned int>
const&
get_count(
void* buffer)
265 return *
reinterpret_cast<std::atomic<unsigned int>*
>(buffer);
267 #endif // defined(MSGPACK_USE_CPP03) 269 template <
typename T>
278 template <
typename T>
280 dst =
static_cast<uint32_t
>(*
reinterpret_cast<const uint8_t*
>(n)) & 0x0f;
283 template <
typename T>
285 dst =
static_cast<T
>(*
reinterpret_cast<const uint8_t*
>(n));
288 template <
typename T>
290 _msgpack_load16(T, n, &dst);
293 template <
typename T>
295 _msgpack_load32(T, n, &dst);
298 template <
typename T>
300 _msgpack_load64(T, n, &dst);
306 :m_trail(0), m_user(f, user_data, limit), m_cs(MSGPACK_CS_HEADER)
308 m_stack.reserve(MSGPACK_EMBED_STACK_SIZE);
314 m_cs = MSGPACK_CS_HEADER;
322 return m_stack[0].obj();
335 int execute(
const char* data, std::size_t len, std::size_t& off);
338 template <
typename T>
339 static uint32_t next_cs(T p)
341 return static_cast<uint32_t
>(*p) & 0x1f;
344 template <
typename T,
typename Func>
347 uint32_t container_type,
349 const char* load_pos,
352 load<T>(tmp, load_pos);
353 f(m_user, tmp, m_stack.back().obj());
355 obj = m_stack.back().obj();
356 int ret = push_proc(obj, off);
357 if (ret != 0)
return ret;
360 m_stack.back().set_container_type(container_type);
361 m_stack.back().set_count(tmp);
362 if (m_stack.size() <= m_user.limit().depth()) {
368 m_cs = MSGPACK_CS_HEADER;
377 if(m_stack.size() == 1) {
382 case MSGPACK_CT_ARRAY_ITEM:
392 case MSGPACK_CT_MAP_KEY:
397 case MSGPACK_CT_MAP_VALUE:
416 int ret = push_item(obj);
418 m_stack[0].set_obj(obj);
421 off = m_current - m_start;
424 off = m_current - m_start;
427 m_cs = MSGPACK_CS_HEADER;
433 template <std::
size_t N>
439 char const* m_current;
444 std::vector<unpack_stack> m_stack;
457 m_current = data + off;
458 const char*
const pe = data + len;
463 if(m_current == pe) {
464 off = m_current - m_start;
467 bool fixed_trail_again =
false;
469 if (m_cs == MSGPACK_CS_HEADER) {
470 fixed_trail_again =
false;
471 int selector = *
reinterpret_cast<const unsigned char*
>(m_current);
472 if (0x00 <= selector && selector <= 0x7f) {
473 unpack_uint8(*reinterpret_cast<const uint8_t*>(m_current), obj);
474 int ret = push_proc(obj, off);
475 if (ret != 0)
return ret;
476 }
else if(0xe0 <= selector && selector <= 0xff) {
477 unpack_int8(*reinterpret_cast<const int8_t*>(m_current), obj);
478 int ret = push_proc(obj, off);
479 if (ret != 0)
return ret;
480 }
else if (0xc4 <= selector && selector <= 0xdf) {
481 const uint32_t trail[] = {
511 m_trail = trail[selector - 0xc4];
512 m_cs = next_cs(m_current);
513 fixed_trail_again =
true;
514 }
else if(0xa0 <= selector && selector <= 0xbf) {
515 m_trail =
static_cast<uint32_t
>(*m_current) & 0x1f;
517 unpack_str(m_user, n, static_cast<uint32_t>(m_trail), obj);
518 int ret = push_proc(obj, off);
519 if (ret != 0)
return ret;
522 m_cs = MSGPACK_ACS_STR_VALUE;
523 fixed_trail_again =
true;
526 }
else if(0x90 <= selector && selector <= 0x9f) {
527 int ret = push_aggregate<fix_tag>(
528 unpack_array(), MSGPACK_CT_ARRAY_ITEM, obj, m_current, off);
529 if (ret != 0)
return ret;
530 }
else if(0x80 <= selector && selector <= 0x8f) {
531 int ret = push_aggregate<fix_tag>(
532 unpack_map(), MSGPACK_CT_MAP_KEY, obj, m_current, off);
533 if (ret != 0)
return ret;
534 }
else if(selector == 0xc2) {
536 int ret = push_proc(obj, off);
537 if (ret != 0)
return ret;
538 }
else if(selector == 0xc3) {
540 int ret = push_proc(obj, off);
541 if (ret != 0)
return ret;
542 }
else if(selector == 0xc0) {
544 int ret = push_proc(obj, off);
545 if (ret != 0)
return ret;
547 off = m_current - m_start;
552 if (m_cs != MSGPACK_CS_HEADER || fixed_trail_again) {
553 if (fixed_trail_again) {
555 fixed_trail_again =
false;
557 if(static_cast<std::size_t>(pe - m_current) < m_trail) {
558 off = m_current - m_start;
562 m_current += m_trail - 1;
566 case MSGPACK_CS_FLOAT: {
567 union { uint32_t i;
float f; } mem;
568 load<uint32_t>(mem.i, n);
570 int ret = push_proc(obj, off);
571 if (ret != 0)
return ret;
573 case MSGPACK_CS_DOUBLE: {
574 union { uint64_t i;
double f; } mem;
575 load<uint64_t>(mem.i, n);
576 #if defined(TARGET_OS_IPHONE) 578 #elif defined(__arm__) && !(__ARM_EABI__) // arm-oabi 580 mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
583 int ret = push_proc(obj, off);
584 if (ret != 0)
return ret;
586 case MSGPACK_CS_UINT_8: {
588 load<uint8_t>(tmp, n);
590 int ret = push_proc(obj, off);
591 if (ret != 0)
return ret;
593 case MSGPACK_CS_UINT_16: {
595 load<uint16_t>(tmp, n);
597 int ret = push_proc(obj, off);
598 if (ret != 0)
return ret;
600 case MSGPACK_CS_UINT_32: {
602 load<uint32_t>(tmp, n);
604 int ret = push_proc(obj, off);
605 if (ret != 0)
return ret;
607 case MSGPACK_CS_UINT_64: {
609 load<uint64_t>(tmp, n);
611 int ret = push_proc(obj, off);
612 if (ret != 0)
return ret;
614 case MSGPACK_CS_INT_8: {
616 load<int8_t>(tmp, n);
618 int ret = push_proc(obj, off);
619 if (ret != 0)
return ret;
621 case MSGPACK_CS_INT_16: {
623 load<int16_t>(tmp, n);
625 int ret = push_proc(obj, off);
626 if (ret != 0)
return ret;
628 case MSGPACK_CS_INT_32: {
630 load<int32_t>(tmp, n);
632 int ret = push_proc(obj, off);
633 if (ret != 0)
return ret;
635 case MSGPACK_CS_INT_64: {
637 load<int64_t>(tmp, n);
639 int ret = push_proc(obj, off);
640 if (ret != 0)
return ret;
642 case MSGPACK_CS_FIXEXT_1: {
644 int ret = push_proc(obj, off);
645 if (ret != 0)
return ret;
647 case MSGPACK_CS_FIXEXT_2: {
649 int ret = push_proc(obj, off);
650 if (ret != 0)
return ret;
652 case MSGPACK_CS_FIXEXT_4: {
654 int ret = push_proc(obj, off);
655 if (ret != 0)
return ret;
657 case MSGPACK_CS_FIXEXT_8: {
659 int ret = push_proc(obj, off);
660 if (ret != 0)
return ret;
662 case MSGPACK_CS_FIXEXT_16: {
664 int ret = push_proc(obj, off);
665 if (ret != 0)
return ret;
667 case MSGPACK_CS_STR_8: {
669 load<uint8_t>(tmp, n);
672 unpack_str(m_user, n, static_cast<uint32_t>(m_trail), obj);
673 int ret = push_proc(obj, off);
674 if (ret != 0)
return ret;
677 m_cs = MSGPACK_ACS_STR_VALUE;
678 fixed_trail_again =
true;
681 case MSGPACK_CS_BIN_8: {
683 load<uint8_t>(tmp, n);
686 unpack_bin(m_user, n, static_cast<uint32_t>(m_trail), obj);
687 int ret = push_proc(obj, off);
688 if (ret != 0)
return ret;
691 m_cs = MSGPACK_ACS_BIN_VALUE;
692 fixed_trail_again =
true;
695 case MSGPACK_CS_EXT_8: {
697 load<uint8_t>(tmp, n);
701 int ret = push_proc(obj, off);
702 if (ret != 0)
return ret;
705 m_cs = MSGPACK_ACS_EXT_VALUE;
706 fixed_trail_again =
true;
709 case MSGPACK_CS_STR_16: {
711 load<uint16_t>(tmp, n);
714 unpack_str(m_user, n, static_cast<uint32_t>(m_trail), obj);
715 int ret = push_proc(obj, off);
716 if (ret != 0)
return ret;
719 m_cs = MSGPACK_ACS_STR_VALUE;
720 fixed_trail_again =
true;
723 case MSGPACK_CS_BIN_16: {
725 load<uint16_t>(tmp, n);
728 unpack_bin(m_user, n, static_cast<uint32_t>(m_trail), obj);
729 int ret = push_proc(obj, off);
730 if (ret != 0)
return ret;
733 m_cs = MSGPACK_ACS_BIN_VALUE;
734 fixed_trail_again =
true;
737 case MSGPACK_CS_EXT_16: {
739 load<uint16_t>(tmp, n);
743 int ret = push_proc(obj, off);
744 if (ret != 0)
return ret;
747 m_cs = MSGPACK_ACS_EXT_VALUE;
748 fixed_trail_again =
true;
751 case MSGPACK_CS_STR_32: {
753 load<uint32_t>(tmp, n);
756 unpack_str(m_user, n, static_cast<uint32_t>(m_trail), obj);
757 int ret = push_proc(obj, off);
758 if (ret != 0)
return ret;
761 m_cs = MSGPACK_ACS_STR_VALUE;
762 fixed_trail_again =
true;
765 case MSGPACK_CS_BIN_32: {
767 load<uint32_t>(tmp, n);
770 unpack_bin(m_user, n, static_cast<uint32_t>(m_trail), obj);
771 int ret = push_proc(obj, off);
772 if (ret != 0)
return ret;
775 m_cs = MSGPACK_ACS_BIN_VALUE;
776 fixed_trail_again =
true;
779 case MSGPACK_CS_EXT_32: {
781 load<uint32_t>(tmp, n);
782 check_ext_size<sizeof(std::size_t)>(tmp);
787 int ret = push_proc(obj, off);
788 if (ret != 0)
return ret;
791 m_cs = MSGPACK_ACS_EXT_VALUE;
792 fixed_trail_again =
true;
795 case MSGPACK_ACS_STR_VALUE: {
796 unpack_str(m_user, n, static_cast<uint32_t>(m_trail), obj);
797 int ret = push_proc(obj, off);
798 if (ret != 0)
return ret;
800 case MSGPACK_ACS_BIN_VALUE: {
801 unpack_bin(m_user, n, static_cast<uint32_t>(m_trail), obj);
802 int ret = push_proc(obj, off);
803 if (ret != 0)
return ret;
805 case MSGPACK_ACS_EXT_VALUE: {
807 int ret = push_proc(obj, off);
808 if (ret != 0)
return ret;
810 case MSGPACK_CS_ARRAY_16: {
811 int ret = push_aggregate<uint16_t>(
813 if (ret != 0)
return ret;
815 case MSGPACK_CS_ARRAY_32: {
817 int ret = push_aggregate<uint32_t>(
819 if (ret != 0)
return ret;
821 case MSGPACK_CS_MAP_16: {
822 int ret = push_aggregate<uint16_t>(
823 unpack_map(), MSGPACK_CT_MAP_KEY, obj, n, off);
824 if (ret != 0)
return ret;
826 case MSGPACK_CS_MAP_32: {
828 int ret = push_aggregate<uint32_t>(
829 unpack_map(), MSGPACK_CT_MAP_KEY, obj, n, off);
830 if (ret != 0)
return ret;
833 off = m_current - m_start;
837 }
while(m_current != pe);
839 off = m_current - m_start;
863 #if !defined(MSGPACK_USE_CPP03) 866 #endif // !defined(MSGPACK_USE_CPP03) 896 std::size_t buffer_capacity()
const;
908 void buffer_consumed(std::size_t
size);
961 std::size_t message_size()
const;
986 std::size_t parsed_size()
const;
995 char* nonparsed_buffer();
1004 std::size_t nonparsed_size()
const;
1014 void skip_nonparsed_buffer(std::size_t size);
1021 void remove_nonparsed_buffer();
1024 void expand_buffer(std::size_t size);
1034 std::size_t m_parsed;
1036 std::size_t m_initial_buffer_size;
1039 #if defined(MSGPACK_USE_CPP03) 1043 #else // defined(MSGPACK_USE_CPP03) 1046 #endif // defined(MSGPACK_USE_CPP03) 1051 std::size_t initial_buffer_size,
1053 :m_z(new
msgpack::
zone), m_ctx(f, user_data, limit)
1059 char*
buffer =
static_cast<char*
>(::malloc(initial_buffer_size));
1061 throw std::bad_alloc();
1066 m_free = initial_buffer_size - m_used;
1069 m_initial_buffer_size = initial_buffer_size;
1078 #if !defined(MSGPACK_USE_CPP03) 1082 :m_buffer(other.m_buffer),
1083 m_used(other.m_used),
1084 m_free(other.m_free),
1086 m_parsed(other.m_parsed),
1087 m_z(std::
move(other.m_z)),
1088 m_initial_buffer_size(other.m_initial_buffer_size),
1089 m_ctx(other.m_ctx) {
1099 #endif // !defined(MSGPACK_USE_CPP03) 1111 if(m_free >= size)
return;
1112 expand_buffer(size);
1115 inline void unpacker::expand_buffer(std::size_t
size)
1124 if(m_free >= size)
return;
1128 std::size_t next_size = (m_used + m_free) * 2;
1129 while(next_size < size + m_used) {
1130 std::size_t tmp_next_size = next_size * 2;
1131 if (tmp_next_size <= next_size) {
1132 next_size = size + m_used;
1135 next_size = tmp_next_size;
1138 char* tmp =
static_cast<char*
>(::realloc(m_buffer, next_size));
1140 throw std::bad_alloc();
1144 m_free = next_size - m_used;
1147 std::size_t next_size = m_initial_buffer_size;
1148 std::size_t not_parsed = m_used - m_off;
1150 std::size_t tmp_next_size = next_size * 2;
1151 if (tmp_next_size <= next_size) {
1155 next_size = tmp_next_size;
1158 char* tmp =
static_cast<char*
>(::malloc(next_size));
1160 throw std::bad_alloc();
1165 std::memcpy(tmp+
COUNTER_SIZE, m_buffer + m_off, not_parsed);
1182 m_free = next_size - m_used;
1189 return m_buffer + m_used;
1206 int ret = execute_imp();
1212 result.
zone().reset();
1228 return next(result, referenced);
1233 return next(*result);
1239 int ret = execute_imp();
1242 }
else if(ret == 0) {
1249 inline int unpacker::execute_imp()
1251 std::size_t off = m_off;
1252 int ret = m_ctx.
execute(m_buffer, m_used, m_off);
1254 m_parsed += m_off - off;
1261 return m_ctx.
data();
1283 inline bool unpacker::flush_zone()
1308 return m_parsed - m_off + m_used;
1318 return m_buffer + m_off;
1323 return m_used - m_off;
1344 std::size_t noff = off;
1358 int e = ctx.
execute(data, len, noff);
1370 result = ctx.
data();
1384 const char*
data, std::size_t len, std::size_t& off,
bool&
referenced,
1392 std::size_t noff = off;
1394 data, len, noff, *z, obj, referenced, f, user_data, limit);
1413 const char*
data, std::size_t len, std::size_t& off,
1418 return unpack(data, len, off, referenced, f, user_data, limit);
1426 std::size_t off = 0;
1427 return unpack(data, len, off, referenced, f, user_data, limit);
1431 const char*
data, std::size_t len,
1436 std::size_t off = 0;
1437 return unpack(data, len, off, referenced, f, user_data, limit);
1442 const char*
data, std::size_t len, std::size_t& off,
bool&
referenced,
1449 std::size_t noff = off;
1451 data, len, noff, *z, obj, referenced, f, user_data, limit);
1474 const char*
data, std::size_t len, std::size_t& off,
1479 unpack(result, data, len, off, referenced, f, user_data, limit);
1488 std::size_t off = 0;
1489 unpack(result, data, len, off, referenced, f, user_data, limit);
1494 const char*
data, std::size_t len,
1499 std::size_t off = 0;
1500 unpack(result, data, len, off, referenced, f, user_data, limit);
1506 const char*
data, std::size_t len, std::size_t& off,
bool&
referenced,
1511 std::size_t noff = off;
1514 data, len, noff, z, obj, referenced, f, user_data, limit);
1534 const char*
data, std::size_t len, std::size_t& off,
1539 return unpack(z, data, len, off, referenced, f, user_data, limit);
1548 std::size_t off = 0;
1549 return unpack(z, data, len, off, referenced, f, user_data, limit);
1554 const char*
data, std::size_t len,
1559 std::size_t off = 0;
1560 return unpack(z, data, len, off, referenced, f, user_data, limit);
1568 const
char*
data, std::
size_t len, std::
size_t* off,
bool*
referenced,
1573 if (referenced)
unpack(*result, data, len, *off, *referenced, f, user_data, limit);
1574 else unpack(*result, data, len, *off, f, user_data, limit);
1576 if (referenced)
unpack(*result, data, len, *referenced, f, user_data, limit);
1577 else unpack(*result, data, len, f, user_data, limit);
1592 #endif // MSGPACK_V1_UNPACK_HPP uint32_t type
Definition: unpack.hpp:275
bool next()
Unpack one msgpack::object.
Definition: parse.hpp:938
Definition: object_fwd_decl.hpp:39
Definition: unpack.hpp:44
Definition: unpack.hpp:111
void operator()(unpack_user &u, uint32_t n, msgpack::object &o) const
Definition: unpack.hpp:112
char * nonparsed_buffer()
Get the address that is not parsed in the buffer.
Definition: unpack.hpp:1316
Definition: unpack.hpp:133
void unpack_int8(int8_t d, msgpack::object &o)
Definition: unpack.hpp:80
msgpack::object_kv * ptr
Definition: object_fwd.hpp:29
void incr_count(void *buffer)
Definition: unpack.hpp:248
Definition: unpack_decl.hpp:87
Definition: unpack_exception.hpp:79
uint32_t size
Definition: object_fwd.hpp:23
std::size_t bin() const
Definition: unpack_decl.hpp:105
void set_referenced(bool referenced)
Definition: unpack.hpp:54
std::size_t ext() const
Definition: unpack_decl.hpp:106
void * allocate_align(size_t size, size_t align=MSGPACK_ZONE_ALIGN)
Definition: cpp03_zone.hpp:236
~unpacker()
Definition: unpack.hpp:1102
void operator()(unpack_user &u, uint32_t n, msgpack::object &o) const
Definition: unpack.hpp:134
Definition: object_fwd_decl.hpp:33
void check_ext_size(std::size_t)
Definition: parse.hpp:216
Definition: object_fwd_decl.hpp:30
const char * ptr
Definition: object_fwd.hpp:39
#define MSGPACK_UNPACKER_INIT_BUFFER_SIZE
Definition: unpack_decl.hpp:43
void unpack_ext(unpack_user &u, const char *p, std::size_t l, msgpack::object &o)
Definition: unpack.hpp:190
parse_return
Definition: parse_return.hpp:23
parse_return unpack_imp(const char *data, std::size_t len, std::size_t &off, msgpack::zone &result_zone, msgpack::object &result, bool &referenced, unpack_reference_func f=MSGPACK_NULLPTR, void *user_data=MSGPACK_NULLPTR, unpack_limit const &limit=unpack_limit())
Definition: unpack.hpp:1339
void set_container_type(uint32_t container_type)
Definition: unpack.hpp:216
uint32_t container_type() const
Definition: unpack.hpp:215
void unpack_uint32(uint32_t d, msgpack::object &o)
Definition: unpack.hpp:74
std::size_t map() const
Definition: unpack_decl.hpp:103
std::size_t nonparsed_size() const
Get the size of the buffer that is not parsed.
Definition: unpack.hpp:1321
void set(msgpack::object const &obj)
Definition: object.hpp:63
void init()
Definition: unpack.hpp:312
Definition: parse_return.hpp:27
union_type via
Definition: object_fwd.hpp:93
std::size_t count() const
Definition: unpack.hpp:212
void unpack_str(unpack_user &u, const char *p, uint32_t l, msgpack::object &o)
Definition: unpack.hpp:158
bool execute()
Definition: unpack.hpp:1237
bool(* unpack_reference_func)(msgpack::type::object_type type, std::size_t size, void *user_data)
The type of reference or copy judging function.
Definition: unpack_decl.hpp:74
Definition: object_fwd_decl.hpp:40
Definition: unpack_exception.hpp:106
void unpack_int16(int16_t d, msgpack::object &o)
Definition: unpack.hpp:84
void unpack_bin(unpack_user &u, const char *p, uint32_t l, msgpack::object &o)
Definition: unpack.hpp:174
const char * ptr
Definition: object_fwd.hpp:46
unpack_user const & user() const
Definition: unpack.hpp:330
msgpack::object * ptr
Definition: object_fwd.hpp:24
void unpack_uint8(uint8_t d, msgpack::object &o)
Definition: unpack.hpp:68
msgpack::zone const & zone() const
Definition: unpack.hpp:50
msgpack::object val
Definition: object.hpp:31
context(unpack_reference_func f, void *user_data, unpack_limit const &limit)
Definition: unpack.hpp:305
uint32_t size
Definition: object_fwd.hpp:38
bool referenced() const
Definition: create_object_visitor.hpp:63
T type
Definition: unpack.hpp:271
Definition: adaptor_base.hpp:15
Definition: unpack_exception.hpp:34
Definition: unpack_exception.hpp:97
const char * ptr
Definition: object_fwd.hpp:34
std::size_t parsed_size() const
Get parsed message size.
Definition: unpack.hpp:1311
Definition: cpp03_zone.hpp:22
unpacker(unpack_reference_func f=&unpacker::default_reference_func, void *user_data=MSGPACK_NULLPTR, std::size_t initial_buffer_size=MSGPACK_UNPACKER_INIT_BUFFER_SIZE, unpack_limit const &limit=unpack_limit())
Constructor.
Definition: unpack.hpp:1049
void unpack_false(msgpack::object &o)
Definition: unpack.hpp:108
object_type
Definition: object_fwd_decl.hpp:28
bool boolean
Definition: object_fwd.hpp:77
int execute(const char *data, std::size_t len, std::size_t &off)
Definition: unpack.hpp:452
void set_obj(msgpack::object const &obj)
Definition: unpack.hpp:211
void check_ext_size< 4 >(std::size_t size)
Definition: parse.hpp:220
Definition: object.hpp:29
void remove_nonparsed_buffer()
Remove nonparsed buffer and reset the current position as a new start point.
Definition: unpack.hpp:1331
Definition: object_fwd_decl.hpp:29
int64_t i64
Definition: object_fwd.hpp:79
Definition: object_fwd_decl.hpp:32
void reserve_buffer(std::size_t size=MSGPACK_UNPACKER_RESERVE_SIZE)
Reserve a buffer memory.
Definition: unpack.hpp:1109
Definition: unpack.hpp:303
void unpack_float(float d, msgpack::object &o)
Definition: unpack.hpp:96
Definition: unpack_exception.hpp:88
void init_count(void *buffer)
Definition: unpack.hpp:226
void unpack_double(double d, msgpack::object &o)
Definition: unpack.hpp:99
unpack_reference_func reference_func() const
Definition: unpack.hpp:55
msgpack::object & obj()
Definition: unpack.hpp:210
void unpack_uint64(uint64_t d, msgpack::object &o)
Definition: unpack.hpp:77
Definition: parse_return.hpp:26
uint32_t size
Definition: object_fwd.hpp:45
Definition: unpack_exception.hpp:43
msgpack::enable_if< sizeof(T)==sizeof(fix_tag)>::type load(uint32_t &dst, const char *n)
Definition: unpack.hpp:279
Definition: unpack_exception.hpp:61
void reset_zone()
Definition: unpack.hpp:1278
unpack_limit const & limit() const
Definition: unpack.hpp:57
std::size_t size(T const &t)
Definition: size_equal_only.hpp:24
msgpack::zone * release_zone()
Definition: unpack.hpp:1264
void unpack_int64(int64_t d, msgpack::object &o)
Definition: unpack.hpp:92
std::size_t str() const
Definition: unpack_decl.hpp:104
void unpack_uint16(uint16_t d, msgpack::object &o)
Definition: unpack.hpp:71
void unpack_true(msgpack::object &o)
Definition: unpack.hpp:105
void set_map_key(msgpack::object const &map_key)
Definition: unpack.hpp:218
void buffer_consumed(std::size_t size)
Notify a buffer consumed information to msgpack::unpacker.
Definition: unpack.hpp:1197
double f64
Definition: object_fwd.hpp:84
msgpack::object const & data()
Definition: unpack.hpp:1259
Definition: object_fwd_decl.hpp:43
msgpack::object_array array
Definition: object_fwd.hpp:85
char * buffer()
Get buffer pointer.
Definition: unpack.hpp:1187
const size_t COUNTER_SIZE
Definition: unpack_decl.hpp:40
unpack_user(unpack_reference_func f=MSGPACK_NULLPTR, void *user_data=MSGPACK_NULLPTR, unpack_limit const &limit=unpack_limit())
Definition: unpack.hpp:46
msgpack::object_handle unpack(const char *data, std::size_t len, std::size_t &off, bool &referenced, unpack_reference_func f, void *user_data, unpack_limit const &limit)
Unpack msgpack::object from a buffer.
Definition: unpack.hpp:1383
Definition: cpp_config_decl.hpp:56
msgpack::object_map map
Definition: object_fwd.hpp:86
std::atomic< unsigned int > const & get_count(void *buffer)
Definition: unpack.hpp:263
msgpack::object_str str
Definition: object_fwd.hpp:87
std::size_t array() const
Definition: unpack_decl.hpp:102
Object class that corresponding to MessagePack format object.
Definition: object_fwd.hpp:75
Definition: unpack_exception.hpp:70
std::size_t message_size() const
Get message size.
Definition: unpack.hpp:1306
msgpack::type::object_type type
Definition: object_fwd.hpp:92
msgpack::object const & map_key() const
Definition: unpack.hpp:217
Definition: unpack.hpp:207
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition: versioning.hpp:58
Definition: object_fwd_decl.hpp:41
void reset()
Definition: unpack.hpp:1299
unpacker & operator=(unpacker &&other)
Definition: unpack.hpp:1093
Definition: parse_return.hpp:24
msgpack::object key
Definition: object.hpp:30
Definition: parse_return.hpp:25
uint32_t size
Definition: object_fwd.hpp:28
Definition: object_fwd_decl.hpp:42
msgpack::object const & data() const
Definition: unpack.hpp:320
msgpack::unique_ptr< msgpack::zone > & zone()
Get unique_ptr reference of zone.
Definition: object.hpp:77
Definition: object_fwd_decl.hpp:34
void set_count(std::size_t count)
Definition: unpack.hpp:213
uint32_t size
Definition: object_fwd.hpp:33
void unpack_nil(msgpack::object &o)
Definition: unpack.hpp:102
msgpack::zone & zone()
Definition: unpack.hpp:51
void unpack_map_item(msgpack::object &c, msgpack::object const &k, msgpack::object const &v)
Definition: unpack.hpp:146
void decr_count(void *buffer)
Definition: unpack.hpp:235
Unpacking class for a stream deserialization.
Definition: unpack.hpp:847
Definition: unpack_decl.hpp:180
std::size_t buffer_capacity() const
Get buffer capacity.
Definition: unpack.hpp:1192
void unpack_int32(int32_t d, msgpack::object &o)
Definition: unpack.hpp:88
unpack_limit & limit()
Definition: unpack.hpp:58
#define MSGPACK_NULLPTR
Definition: cpp_config_decl.hpp:35
void unpack_array_item(msgpack::object &c, msgpack::object const &o)
Definition: unpack.hpp:124
void * user_data() const
Definition: unpack.hpp:56
void set_zone(msgpack::zone &zone)
Definition: unpack.hpp:52
msgpack::object_ext ext
Definition: object_fwd.hpp:89
Definition: unpack.hpp:270
std::size_t decr_count()
Definition: unpack.hpp:214
msgpack::object const & obj() const
Definition: unpack.hpp:209
void skip_nonparsed_buffer(std::size_t size)
Skip the specified size of non-parsed buffer.
Definition: unpack.hpp:1326
#define MSGPACK_DEPRECATED(msg)
Definition: cpp_config.hpp:132
The class holds object and zone.
Definition: object.hpp:43
unpack_user & user()
Definition: unpack.hpp:325
bool referenced() const
Definition: unpack.hpp:53
Definition: object_fwd_decl.hpp:31
uint64_t u64
Definition: object_fwd.hpp:78
msgpack::object_bin bin
Definition: object_fwd.hpp:88
#define MSGPACK_UNPACKER_RESERVE_SIZE
Definition: unpack_decl.hpp:47