10 #ifndef MSGPACK_V1_UNPACK_HPP 11 #define MSGPACK_V1_UNPACK_HPP 17 #include "msgpack/unpack_define.h" 19 #include "msgpack/sysdep.h" 24 #if !defined(MSGPACK_USE_CPP03) 34 #endif // defined(_MSC_VER) 44 :std::runtime_error(msg) {}
45 #if !defined(MSGPACK_USE_CPP03) 47 std::runtime_error(msg) {}
48 #endif // !defined(MSGPACK_USE_CPP03) 54 #if !defined(MSGPACK_USE_CPP03) 57 #endif // !defined(MSGPACK_USE_CPP03) 63 #if !defined(MSGPACK_USE_CPP03) 66 #endif // !defined(MSGPACK_USE_CPP03) 72 #if !defined(MSGPACK_USE_CPP03) 81 #if !defined(MSGPACK_USE_CPP03) 90 #if !defined(MSGPACK_USE_CPP03) 99 #if !defined(MSGPACK_USE_CPP03) 108 #if !defined(MSGPACK_USE_CPP03) 117 #if !defined(MSGPACK_USE_CPP03) 126 #if !defined(MSGPACK_USE_CPP03) 137 void* user_data =
nullptr,
139 :m_func(f), m_user_data(user_data), m_limit(limit) {}
212 #if defined(__GNUC__) && !defined(__clang__) 230 #if defined(__GNUC__) && !defined(__clang__) 250 std::memcpy(tmp, p, l);
266 std::memcpy(tmp, p, l);
282 std::memcpy(tmp, p, l);
285 o.
via.
ext.
size =
static_cast<uint32_t
>(l - 1);
294 std::size_t
count()
const {
return m_count; }
304 uint32_t m_container_type;
310 #if defined(MSGPACK_USE_CPP03) 311 *
reinterpret_cast<volatile _msgpack_atomic_counter_t*
>(buffer) = 1;
312 #else // defined(MSGPACK_USE_CPP03) 313 new (buffer) std::atomic<unsigned int>(1);
314 #endif // defined(MSGPACK_USE_CPP03) 319 #if defined(MSGPACK_USE_CPP03) 320 if(_msgpack_sync_decr_and_fetch(reinterpret_cast<volatile _msgpack_atomic_counter_t*>(buffer)) == 0) {
323 #else // defined(MSGPACK_USE_CPP03) 324 if (--*
reinterpret_cast<std::atomic<unsigned int>*
>(buffer) == 0) {
327 #endif // defined(MSGPACK_USE_CPP03) 332 #if defined(MSGPACK_USE_CPP03) 333 _msgpack_sync_incr_and_fetch(reinterpret_cast<volatile _msgpack_atomic_counter_t*>(buffer));
334 #else // defined(MSGPACK_USE_CPP03) 335 ++*
reinterpret_cast<std::atomic<unsigned int>*
>(buffer);
336 #endif // defined(MSGPACK_USE_CPP03) 339 #if defined(MSGPACK_USE_CPP03) 340 inline _msgpack_atomic_counter_t
get_count(
void* buffer)
342 return *
reinterpret_cast<volatile _msgpack_atomic_counter_t*
>(buffer);
344 #else // defined(MSGPACK_USE_CPP03) 345 inline std::atomic<unsigned int>
const&
get_count(
void* buffer)
347 return *
reinterpret_cast<std::atomic<unsigned int>*
>(buffer);
349 #endif // defined(MSGPACK_USE_CPP03) 351 template <
typename T>
360 template <
typename T>
362 dst =
static_cast<uint32_t
>(*
reinterpret_cast<const uint8_t*
>(n)) & 0x0f;
365 template <
typename T>
367 dst =
static_cast<T
>(*
reinterpret_cast<const uint8_t*
>(n));
370 template <
typename T>
372 _msgpack_load16(T, n, &dst);
375 template <
typename T>
377 _msgpack_load32(T, n, &dst);
380 template <
typename T>
382 _msgpack_load64(T, n, &dst);
388 :m_trail(0), m_user(f, user_data, limit), m_cs(MSGPACK_CS_HEADER)
390 m_stack.reserve(MSGPACK_EMBED_STACK_SIZE);
396 m_cs = MSGPACK_CS_HEADER;
404 return m_stack[0].obj();
417 int execute(
const char* data, std::size_t len, std::size_t& off);
420 template <
typename T>
421 static uint32_t next_cs(T p)
423 return static_cast<uint32_t
>(*p) & 0x1f;
426 template <
typename T,
typename Func>
429 uint32_t container_type,
431 const char* load_pos,
434 load<T>(tmp, load_pos);
435 f(m_user, tmp, m_stack.back().obj());
437 obj = m_stack.back().obj();
438 int ret = push_proc(obj, off);
439 if (ret != 0)
return ret;
442 m_stack.back().set_container_type(container_type);
443 m_stack.back().set_count(tmp);
444 if (m_stack.size() <= m_user.limit().depth()) {
450 m_cs = MSGPACK_CS_HEADER;
459 if(m_stack.size() == 1) {
464 case MSGPACK_CT_ARRAY_ITEM:
474 case MSGPACK_CT_MAP_KEY:
479 case MSGPACK_CT_MAP_VALUE:
498 int ret = push_item(obj);
500 m_stack[0].set_obj(obj);
503 off = m_current - m_start;
506 off = m_current - m_start;
509 m_cs = MSGPACK_CS_HEADER;
515 template <std::
size_t N>
516 static void check_ext_size(std::size_t ) {
521 char const* m_current;
526 std::vector<unpack_stack> m_stack;
530 inline void context::check_ext_size<4>(std::size_t size) {
534 inline int context::execute(
const char* data, std::size_t len, std::size_t& off)
539 m_current = data + off;
540 const char*
const pe = data + len;
541 const char* n =
nullptr;
545 if(m_current == pe) {
546 off = m_current - m_start;
549 bool fixed_trail_again =
false;
551 if (m_cs == MSGPACK_CS_HEADER) {
552 fixed_trail_again =
false;
553 int selector = *
reinterpret_cast<const unsigned char*
>(m_current);
554 if (0x00 <= selector && selector <= 0x7f) {
555 unpack_uint8(*reinterpret_cast<const uint8_t*>(m_current), obj);
556 int ret = push_proc(obj, off);
557 if (ret != 0)
return ret;
558 }
else if(0xe0 <= selector && selector <= 0xff) {
559 unpack_int8(*reinterpret_cast<const int8_t*>(m_current), obj);
560 int ret = push_proc(obj, off);
561 if (ret != 0)
return ret;
562 }
else if (0xc4 <= selector && selector <= 0xdf) {
563 const uint32_t trail[] = {
593 m_trail = trail[selector - 0xc4];
594 m_cs = next_cs(m_current);
595 fixed_trail_again =
true;
596 }
else if(0xa0 <= selector && selector <= 0xbf) {
597 m_trail =
static_cast<uint32_t
>(*m_current) & 0x1f;
599 unpack_str(m_user, n, static_cast<uint32_t>(m_trail), obj);
600 int ret = push_proc(obj, off);
601 if (ret != 0)
return ret;
604 m_cs = MSGPACK_ACS_STR_VALUE;
605 fixed_trail_again =
true;
608 }
else if(0x90 <= selector && selector <= 0x9f) {
609 int ret = push_aggregate<fix_tag>(
610 unpack_array(), MSGPACK_CT_ARRAY_ITEM, obj, m_current, off);
611 if (ret != 0)
return ret;
612 }
else if(0x80 <= selector && selector <= 0x8f) {
613 int ret = push_aggregate<fix_tag>(
614 unpack_map(), MSGPACK_CT_MAP_KEY, obj, m_current, off);
615 if (ret != 0)
return ret;
616 }
else if(selector == 0xc2) {
618 int ret = push_proc(obj, off);
619 if (ret != 0)
return ret;
620 }
else if(selector == 0xc3) {
622 int ret = push_proc(obj, off);
623 if (ret != 0)
return ret;
624 }
else if(selector == 0xc0) {
626 int ret = push_proc(obj, off);
627 if (ret != 0)
return ret;
629 off = m_current - m_start;
634 if (m_cs != MSGPACK_CS_HEADER || fixed_trail_again) {
635 if (fixed_trail_again) {
637 fixed_trail_again =
false;
639 if(static_cast<std::size_t>(pe - m_current) < m_trail) {
640 off = m_current - m_start;
644 m_current += m_trail - 1;
648 case MSGPACK_CS_FLOAT: {
649 union { uint32_t i;
float f; } mem;
650 load<uint32_t>(mem.i, n);
652 int ret = push_proc(obj, off);
653 if (ret != 0)
return ret;
655 case MSGPACK_CS_DOUBLE: {
656 union { uint64_t i;
double f; } mem;
657 load<uint64_t>(mem.i, n);
658 #if defined(TARGET_OS_IPHONE) 660 #elif defined(__arm__) && !(__ARM_EABI__) // arm-oabi 662 mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
665 int ret = push_proc(obj, off);
666 if (ret != 0)
return ret;
668 case MSGPACK_CS_UINT_8: {
670 load<uint8_t>(tmp, n);
672 int ret = push_proc(obj, off);
673 if (ret != 0)
return ret;
675 case MSGPACK_CS_UINT_16: {
677 load<uint16_t>(tmp, n);
679 int ret = push_proc(obj, off);
680 if (ret != 0)
return ret;
682 case MSGPACK_CS_UINT_32: {
684 load<uint32_t>(tmp, n);
686 int ret = push_proc(obj, off);
687 if (ret != 0)
return ret;
689 case MSGPACK_CS_UINT_64: {
691 load<uint64_t>(tmp, n);
693 int ret = push_proc(obj, off);
694 if (ret != 0)
return ret;
696 case MSGPACK_CS_INT_8: {
698 load<int8_t>(tmp, n);
700 int ret = push_proc(obj, off);
701 if (ret != 0)
return ret;
703 case MSGPACK_CS_INT_16: {
705 load<int16_t>(tmp, n);
707 int ret = push_proc(obj, off);
708 if (ret != 0)
return ret;
710 case MSGPACK_CS_INT_32: {
712 load<int32_t>(tmp, n);
714 int ret = push_proc(obj, off);
715 if (ret != 0)
return ret;
717 case MSGPACK_CS_INT_64: {
719 load<int64_t>(tmp, n);
721 int ret = push_proc(obj, off);
722 if (ret != 0)
return ret;
724 case MSGPACK_CS_FIXEXT_1: {
726 int ret = push_proc(obj, off);
727 if (ret != 0)
return ret;
729 case MSGPACK_CS_FIXEXT_2: {
731 int ret = push_proc(obj, off);
732 if (ret != 0)
return ret;
734 case MSGPACK_CS_FIXEXT_4: {
736 int ret = push_proc(obj, off);
737 if (ret != 0)
return ret;
739 case MSGPACK_CS_FIXEXT_8: {
741 int ret = push_proc(obj, off);
742 if (ret != 0)
return ret;
744 case MSGPACK_CS_FIXEXT_16: {
746 int ret = push_proc(obj, off);
747 if (ret != 0)
return ret;
749 case MSGPACK_CS_STR_8: {
751 load<uint8_t>(tmp, n);
754 unpack_str(m_user, n, static_cast<uint32_t>(m_trail), obj);
755 int ret = push_proc(obj, off);
756 if (ret != 0)
return ret;
759 m_cs = MSGPACK_ACS_STR_VALUE;
760 fixed_trail_again =
true;
763 case MSGPACK_CS_BIN_8: {
765 load<uint8_t>(tmp, n);
768 unpack_bin(m_user, n, static_cast<uint32_t>(m_trail), obj);
769 int ret = push_proc(obj, off);
770 if (ret != 0)
return ret;
773 m_cs = MSGPACK_ACS_BIN_VALUE;
774 fixed_trail_again =
true;
777 case MSGPACK_CS_EXT_8: {
779 load<uint8_t>(tmp, n);
783 int ret = push_proc(obj, off);
784 if (ret != 0)
return ret;
787 m_cs = MSGPACK_ACS_EXT_VALUE;
788 fixed_trail_again =
true;
791 case MSGPACK_CS_STR_16: {
793 load<uint16_t>(tmp, n);
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;
801 m_cs = MSGPACK_ACS_STR_VALUE;
802 fixed_trail_again =
true;
805 case MSGPACK_CS_BIN_16: {
807 load<uint16_t>(tmp, n);
810 unpack_bin(m_user, n, static_cast<uint32_t>(m_trail), obj);
811 int ret = push_proc(obj, off);
812 if (ret != 0)
return ret;
815 m_cs = MSGPACK_ACS_BIN_VALUE;
816 fixed_trail_again =
true;
819 case MSGPACK_CS_EXT_16: {
821 load<uint16_t>(tmp, n);
825 int ret = push_proc(obj, off);
826 if (ret != 0)
return ret;
829 m_cs = MSGPACK_ACS_EXT_VALUE;
830 fixed_trail_again =
true;
833 case MSGPACK_CS_STR_32: {
835 load<uint32_t>(tmp, n);
838 unpack_str(m_user, n, static_cast<uint32_t>(m_trail), obj);
839 int ret = push_proc(obj, off);
840 if (ret != 0)
return ret;
843 m_cs = MSGPACK_ACS_STR_VALUE;
844 fixed_trail_again =
true;
847 case MSGPACK_CS_BIN_32: {
849 load<uint32_t>(tmp, n);
852 unpack_bin(m_user, n, static_cast<uint32_t>(m_trail), obj);
853 int ret = push_proc(obj, off);
854 if (ret != 0)
return ret;
857 m_cs = MSGPACK_ACS_BIN_VALUE;
858 fixed_trail_again =
true;
861 case MSGPACK_CS_EXT_32: {
863 load<uint32_t>(tmp, n);
864 check_ext_size<sizeof(std::size_t)>(tmp);
869 int ret = push_proc(obj, off);
870 if (ret != 0)
return ret;
873 m_cs = MSGPACK_ACS_EXT_VALUE;
874 fixed_trail_again =
true;
877 case MSGPACK_ACS_STR_VALUE: {
878 unpack_str(m_user, n, static_cast<uint32_t>(m_trail), obj);
879 int ret = push_proc(obj, off);
880 if (ret != 0)
return ret;
882 case MSGPACK_ACS_BIN_VALUE: {
883 unpack_bin(m_user, n, static_cast<uint32_t>(m_trail), obj);
884 int ret = push_proc(obj, off);
885 if (ret != 0)
return ret;
887 case MSGPACK_ACS_EXT_VALUE: {
889 int ret = push_proc(obj, off);
890 if (ret != 0)
return ret;
892 case MSGPACK_CS_ARRAY_16: {
893 int ret = push_aggregate<uint16_t>(
895 if (ret != 0)
return ret;
897 case MSGPACK_CS_ARRAY_32: {
899 int ret = push_aggregate<uint32_t>(
901 if (ret != 0)
return ret;
903 case MSGPACK_CS_MAP_16: {
904 int ret = push_aggregate<uint16_t>(
905 unpack_map(), MSGPACK_CT_MAP_KEY, obj, n, off);
906 if (ret != 0)
return ret;
908 case MSGPACK_CS_MAP_32: {
910 int ret = push_aggregate<uint32_t>(
911 unpack_map(), MSGPACK_CT_MAP_KEY, obj, n, off);
912 if (ret != 0)
return ret;
915 off = m_current - m_start;
919 }
while(m_current != pe);
921 off = m_current - m_start;
941 void* user_data =
nullptr,
945 #if !defined(MSGPACK_USE_CPP03) 948 #endif // !defined(MSGPACK_USE_CPP03) 978 std::size_t buffer_capacity()
const;
990 void buffer_consumed(std::size_t size);
1042 std::size_t message_size()
const;
1067 std::size_t parsed_size()
const;
1076 char* nonparsed_buffer();
1085 std::size_t nonparsed_size()
const;
1095 void skip_nonparsed_buffer(std::size_t size);
1102 void remove_nonparsed_buffer();
1105 void expand_buffer(std::size_t size);
1115 std::size_t m_parsed;
1117 std::size_t m_initial_buffer_size;
1120 #if defined(MSGPACK_USE_CPP03) 1124 #else // defined(MSGPACK_USE_CPP03) 1127 #endif // defined(MSGPACK_USE_CPP03) 1132 std::size_t initial_buffer_size,
1134 :m_z(new
msgpack::
zone), m_ctx(f, user_data, limit)
1140 char*
buffer =
static_cast<char*
>(::malloc(initial_buffer_size));
1142 throw std::bad_alloc();
1147 m_free = initial_buffer_size - m_used;
1150 m_initial_buffer_size = initial_buffer_size;
1159 #if !defined(MSGPACK_USE_CPP03) 1163 :m_buffer(other.m_buffer),
1164 m_used(other.m_used),
1165 m_free(other.m_free),
1167 m_parsed(other.m_parsed),
1168 m_z(std::
move(other.m_z)),
1169 m_initial_buffer_size(other.m_initial_buffer_size),
1170 m_ctx(other.m_ctx) {
1171 other.m_buffer =
nullptr;
1180 #endif // !defined(MSGPACK_USE_CPP03) 1192 if(m_free >= size)
return;
1193 expand_buffer(size);
1196 inline void unpacker::expand_buffer(std::size_t size)
1205 if(m_free >= size)
return;
1209 std::size_t next_size = (m_used + m_free) * 2;
1210 while(next_size < size + m_used) {
1211 std::size_t tmp_next_size = next_size * 2;
1212 if (tmp_next_size <= next_size) {
1213 next_size = size + m_used;
1216 next_size = tmp_next_size;
1219 char* tmp =
static_cast<char*
>(::realloc(m_buffer, next_size));
1221 throw std::bad_alloc();
1225 m_free = next_size - m_used;
1228 std::size_t next_size = m_initial_buffer_size;
1229 std::size_t not_parsed = m_used - m_off;
1231 std::size_t tmp_next_size = next_size * 2;
1232 if (tmp_next_size <= next_size) {
1236 next_size = tmp_next_size;
1239 char* tmp =
static_cast<char*
>(::malloc(next_size));
1241 throw std::bad_alloc();
1246 std::memcpy(tmp+
COUNTER_SIZE, m_buffer + m_off, not_parsed);
1263 m_free = next_size - m_used;
1270 return m_buffer + m_used;
1287 int ret = execute_imp();
1293 result.
zone().reset();
1309 return next(result, referenced);
1314 return next(*result);
1320 int ret = execute_imp();
1323 }
else if(ret == 0) {
1330 inline int unpacker::execute_imp()
1332 std::size_t off = m_off;
1333 int ret = m_ctx.
execute(m_buffer, m_used, m_off);
1335 m_parsed += m_off - off;
1342 return m_ctx.
data();
1364 inline bool unpacker::flush_zone()
1389 return m_parsed - m_off + m_used;
1399 return m_buffer + m_off;
1404 return m_used - m_off;
1425 std::size_t noff = off;
1439 int e = ctx.
execute(data, len, noff);
1451 result = ctx.
data();
1465 const char*
data, std::size_t len, std::size_t& off,
bool& referenced,
1473 std::size_t noff = off;
1475 data, len, noff, *z, obj, referenced, f, user_data, limit);
1494 const char*
data, std::size_t len, std::size_t& off,
1499 return unpack(data, len, off, referenced, f, user_data, limit);
1503 const char*
data, std::size_t len,
bool& referenced,
1507 std::size_t off = 0;
1508 return unpack(data, len, off, referenced, f, user_data, limit);
1512 const char*
data, std::size_t len,
1517 std::size_t off = 0;
1518 return unpack(data, len, off, referenced, f, user_data, limit);
1523 const char*
data, std::size_t len, std::size_t& off,
bool& referenced,
1530 std::size_t noff = off;
1532 data, len, noff, *z, obj, referenced, f, user_data, limit);
1555 const char*
data, std::size_t len, std::size_t& off,
1560 unpack(result, data, len, off, referenced, f, user_data, limit);
1565 const char*
data, std::size_t len,
bool& referenced,
1569 std::size_t off = 0;
1570 unpack(result, data, len, off, referenced, f, user_data, limit);
1575 const char*
data, std::size_t len,
1580 std::size_t off = 0;
1581 unpack(result, data, len, off, referenced, f, user_data, limit);
1587 const char*
data, std::size_t len, std::size_t& off,
bool& referenced,
1592 std::size_t noff = off;
1595 data, len, noff, z, obj, referenced, f, user_data, limit);
1615 const char*
data, std::size_t len, std::size_t& off,
1620 return unpack(z, data, len, off, referenced, f, user_data, limit);
1625 const char*
data, std::size_t len,
bool& referenced,
1629 std::size_t off = 0;
1630 return unpack(z, data, len, off, referenced, f, user_data, limit);
1635 const char*
data, std::size_t len,
1640 std::size_t off = 0;
1641 return unpack(z, data, len, off, referenced, f, user_data, limit);
1648 const char*
data, std::size_t len, std::size_t* off,
bool* referenced,
1653 if (referenced)
unpack(*result, data, len, *off, *referenced, f, user_data, limit);
1654 else unpack(*result, data, len, *off, f, user_data, limit);
1656 if (referenced)
unpack(*result, data, len, *referenced, f, user_data, limit);
1657 else unpack(*result, data, len, f, user_data, limit);
1672 #endif // MSGPACK_V1_UNPACK_HPP uint32_t type
Definition: unpack.hpp:357
map_size_overflow(const char *msg)
Definition: unpack.hpp:91
ext_size_overflow(const std::string &msg)
Definition: unpack.hpp:115
unpack_return
Definition: unpack_decl.hpp:437
Definition: object_fwd_decl.hpp:37
Definition: unpack.hpp:134
std::size_t buffer_capacity() const
Get buffer capacity.
Definition: unpack.hpp:1273
std::size_t array() const
Definition: unpack_decl.hpp:101
Definition: unpack.hpp:201
char * nonparsed_buffer()
Get the address that is not parsed in the buffer.
Definition: unpack.hpp:1397
Definition: unpack.hpp:219
std::atomic< unsigned int > const & get_count(void *buffer)
Definition: unpack.hpp:345
void unpack_int8(int8_t d, msgpack::object &o)
Definition: unpack.hpp:170
insufficient_bytes(const char *msg)
Definition: unpack.hpp:64
msgpack::object_kv * ptr
Definition: object_fwd.hpp:29
void incr_count(void *buffer)
Definition: unpack.hpp:330
Definition: unpack_decl.hpp:86
Definition: unpack.hpp:96
context(unpack_reference_func f, void *user_data, unpack_limit const &limit)
Definition: unpack.hpp:387
uint32_t size
Definition: object_fwd.hpp:23
unpack_error(const std::string &msg)
Definition: unpack.hpp:43
void set_referenced(bool referenced)
Definition: unpack.hpp:144
void * allocate_align(size_t size, size_t align=MSGPACK_ZONE_ALIGN)
Definition: cpp03_zone.hpp:236
~unpacker()
Definition: unpack.hpp:1183
unpack_error(const char *msg)
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:1464
std::size_t ext() const
Definition: unpack_decl.hpp:105
Definition: unpack_decl.hpp:439
Definition: object_fwd_decl.hpp:30
const char * ptr
Definition: object_fwd.hpp:39
#define MSGPACK_UNPACKER_INIT_BUFFER_SIZE
Definition: unpack_decl.hpp:42
void unpack_ext(unpack_user &u, const char *p, std::size_t l, msgpack::object &o)
Definition: unpack.hpp:272
map_size_overflow(const std::string &msg)
Definition: unpack.hpp:88
void set_container_type(uint32_t container_type)
Definition: unpack.hpp:298
void unpack_uint32(uint32_t d, msgpack::object &o)
Definition: unpack.hpp:164
void set(msgpack::object const &obj)
Definition: object.hpp:64
unpack_user const & user() const
Definition: unpack.hpp:412
depth_size_overflow(const std::string &msg)
Definition: unpack.hpp:124
union_type via
Definition: object_fwd.hpp:92
void unpack_str(unpack_user &u, const char *p, uint32_t l, msgpack::object &o)
Definition: unpack.hpp:240
bool execute()
Definition: unpack.hpp:1318
Definition: unpack.hpp:42
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:73
Definition: object_fwd_decl.hpp:38
Definition: unpack.hpp:123
void * user_data() const
Definition: unpack.hpp:146
void unpack_int16(int16_t d, msgpack::object &o)
Definition: unpack.hpp:174
std::size_t parsed_size() const
Get parsed message size.
Definition: unpack.hpp:1392
void unpack_bin(unpack_user &u, const char *p, uint32_t l, msgpack::object &o)
Definition: unpack.hpp:256
std::size_t count() const
Definition: unpack.hpp:294
const char * ptr
Definition: object_fwd.hpp:46
msgpack::object * ptr
Definition: object_fwd.hpp:24
parse_error(const std::string &msg)
Definition: unpack.hpp:52
void unpack_uint8(uint8_t d, msgpack::object &o)
Definition: unpack.hpp:158
int execute(const char *data, std::size_t len, std::size_t &off)
Definition: unpack.hpp:534
msgpack::object val
Definition: object.hpp:31
uint32_t size
Definition: object_fwd.hpp:38
T type
Definition: unpack.hpp:353
Definition: adaptor_base.hpp:15
Definition: unpack.hpp:51
Definition: unpack.hpp:114
unpack_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=nullptr, void *user_data=nullptr, unpack_limit const &limit=unpack_limit())
Definition: unpack.hpp:1420
const char * ptr
Definition: object_fwd.hpp:34
Definition: cpp03_zone.hpp:22
bin_size_overflow(const char *msg)
Definition: unpack.hpp:109
void unpack_false(msgpack::object &o)
Definition: unpack.hpp:198
Definition: object_fwd_decl.hpp:33
object_type
Definition: object_fwd_decl.hpp:28
bool boolean
Definition: object_fwd.hpp:77
Definition: unpack_decl.hpp:440
void set_obj(msgpack::object const &obj)
Definition: unpack.hpp:293
str_size_overflow(const std::string &msg)
Definition: unpack.hpp:97
Definition: unpack_decl.hpp:438
unpacker(unpack_reference_func f=&unpacker::default_reference_func, void *user_data=nullptr, std::size_t initial_buffer_size=MSGPACK_UNPACKER_INIT_BUFFER_SIZE, unpack_limit const &limit=unpack_limit())
Constructor.
Definition: unpack.hpp:1130
std::size_t message_size() const
Get message size.
Definition: unpack.hpp:1387
depth_size_overflow(const char *msg)
Definition: unpack.hpp:127
Definition: object.hpp:29
Definition: cpp_config_decl.hpp:43
void remove_nonparsed_buffer()
Remove nonparsed buffer and reset the current position as a new start point.
Definition: unpack.hpp:1412
Definition: unpack.hpp:69
Definition: object_fwd_decl.hpp:29
ext_size_overflow(const char *msg)
Definition: unpack.hpp:118
uint32_t container_type() const
Definition: unpack.hpp:297
msgpack::object const & obj() const
Definition: unpack.hpp:291
int64_t i64
Definition: object_fwd.hpp:79
void operator()(unpack_user &u, uint32_t n, msgpack::object &o) const
Definition: unpack.hpp:202
Definition: object_fwd_decl.hpp:32
array_size_overflow(const std::string &msg)
Definition: unpack.hpp:79
void reserve_buffer(std::size_t size=MSGPACK_UNPACKER_RESERVE_SIZE)
Reserve a buffer memory.
Definition: unpack.hpp:1190
Definition: unpack.hpp:385
void unpack_float(float d, msgpack::object &o)
Definition: unpack.hpp:186
msgpack::object const & map_key() const
Definition: unpack.hpp:299
Definition: unpack.hpp:105
void init_count(void *buffer)
Definition: unpack.hpp:308
void unpack_double(double d, msgpack::object &o)
Definition: unpack.hpp:189
msgpack::object & obj()
Definition: unpack.hpp:292
void unpack_uint64(uint64_t d, msgpack::object &o)
Definition: unpack.hpp:167
uint32_t size
Definition: object_fwd.hpp:45
Definition: unpack.hpp:60
unpack_reference_func reference_func() const
Definition: unpack.hpp:145
void operator()(unpack_user &u, uint32_t n, msgpack::object &o) const
Definition: unpack.hpp:220
Definition: unpack.hpp:78
void reset_zone()
Definition: unpack.hpp:1359
array_size_overflow(const char *msg)
Definition: unpack.hpp:82
msgpack::zone * release_zone()
Definition: unpack.hpp:1345
void unpack_int64(int64_t d, msgpack::object &o)
Definition: unpack.hpp:182
void unpack_uint16(uint16_t d, msgpack::object &o)
Definition: unpack.hpp:161
void unpack_true(msgpack::object &o)
Definition: unpack.hpp:195
void set_map_key(msgpack::object const &map_key)
Definition: unpack.hpp:300
void buffer_consumed(std::size_t size)
Notify a buffer consumed information to msgpack::unpacker.
Definition: unpack.hpp:1278
double f64
Definition: object_fwd.hpp:83
Definition: object_fwd_decl.hpp:41
insufficient_bytes(const std::string &msg)
Definition: unpack.hpp:61
msgpack::object_array array
Definition: object_fwd.hpp:84
msgpack::enable_if< sizeof(T)==8 >::type load(T &dst, const char *n)
Definition: unpack.hpp:381
char * buffer()
Get buffer pointer.
Definition: unpack.hpp:1268
const size_t COUNTER_SIZE
Definition: unpack_decl.hpp:39
std::size_t bin() const
Definition: unpack_decl.hpp:104
void init()
Definition: unpack.hpp:394
Definition: cpp_config_decl.hpp:52
msgpack::object_map map
Definition: object_fwd.hpp:85
msgpack::object const & data() const
Definition: unpack.hpp:402
msgpack::object_str str
Definition: object_fwd.hpp:86
Object class that corresponding to MessagePack format object.
Definition: object_fwd.hpp:75
Definition: unpack.hpp:87
unpack_limit const & limit() const
Definition: unpack.hpp:147
parse_error(const char *msg)
Definition: unpack.hpp:55
unpack_user & user()
Definition: unpack.hpp:407
msgpack::type::object_type type
Definition: object_fwd.hpp:91
Definition: unpack.hpp:289
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition: versioning.hpp:58
Definition: object_fwd_decl.hpp:39
void reset()
Definition: unpack.hpp:1380
unpacker & operator=(unpacker &&other)
Definition: unpack.hpp:1174
msgpack::object key
Definition: object.hpp:30
msgpack::object const & data()
Definition: unpack.hpp:1340
Definition: unpack_decl.hpp:441
uint32_t size
Definition: object_fwd.hpp:28
Definition: object_fwd_decl.hpp:40
std::size_t nonparsed_size() const
Get the size of the buffer that is not parsed.
Definition: unpack.hpp:1402
msgpack::unique_ptr< msgpack::zone > & zone()
Get unique_ptr reference of zone.
Definition: object.hpp:78
void set_count(std::size_t count)
Definition: unpack.hpp:295
msgpack::zone const & zone() const
Definition: unpack.hpp:140
uint32_t size
Definition: object_fwd.hpp:33
size_overflow(const std::string &msg)
Definition: unpack.hpp:70
void unpack_nil(msgpack::object &o)
Definition: unpack.hpp:192
std::size_t map() const
Definition: unpack_decl.hpp:102
msgpack::zone & zone()
Definition: unpack.hpp:141
void unpack_map_item(msgpack::object &c, msgpack::object const &k, msgpack::object const &v)
Definition: unpack.hpp:228
void decr_count(void *buffer)
Definition: unpack.hpp:317
Unpacking class for a stream deserialization.
Definition: unpack.hpp:929
Definition: unpack_decl.hpp:179
size_overflow(const char *msg)
Definition: unpack.hpp:73
void unpack_int32(int32_t d, msgpack::object &o)
Definition: unpack.hpp:178
unpack_limit & limit()
Definition: unpack.hpp:148
void unpack_array_item(msgpack::object &c, msgpack::object const &o)
Definition: unpack.hpp:210
void set_zone(msgpack::zone &zone)
Definition: unpack.hpp:142
msgpack::object_ext ext
Definition: object_fwd.hpp:88
Definition: unpack.hpp:352
std::size_t decr_count()
Definition: unpack.hpp:296
bool referenced() const
Definition: unpack.hpp:143
void skip_nonparsed_buffer(std::size_t size)
Skip the specified size of non-parsed buffer.
Definition: unpack.hpp:1407
bool next(msgpack::object_handle *result)
Unpack one msgpack::object. [obsolete].
Definition: unpack.hpp:1312
unpack_user(unpack_reference_func f=nullptr, void *user_data=nullptr, unpack_limit const &limit=unpack_limit())
Definition: unpack.hpp:136
bin_size_overflow(const std::string &msg)
Definition: unpack.hpp:106
std::size_t str() const
Definition: unpack_decl.hpp:103
The class holds object and zone.
Definition: object.hpp:43
Definition: object_fwd_decl.hpp:31
str_size_overflow(const char *msg)
Definition: unpack.hpp:100
uint64_t u64
Definition: object_fwd.hpp:78
msgpack::object_bin bin
Definition: object_fwd.hpp:87
#define MSGPACK_UNPACKER_RESERVE_SIZE
Definition: unpack_decl.hpp:46