10#ifndef MSGPACK_V1_UNPACK_HPP
11#define MSGPACK_V1_UNPACK_HPP
26#if !defined(MSGPACK_USE_CPP03)
70{ o.
type = msgpack::type::POSITIVE_INTEGER; o.
via.
u64 = d; }
73{ o.
type = msgpack::type::POSITIVE_INTEGER; o.
via.
u64 = d; }
76{ o.
type = msgpack::type::POSITIVE_INTEGER; o.
via.
u64 = d; }
79{ o.
type = msgpack::type::POSITIVE_INTEGER; o.
via.
u64 = d; }
82{
if(d >= 0) { o.
type = msgpack::type::POSITIVE_INTEGER; o.
via.
u64 =
static_cast<uint64_t
>(d); }
83 else { o.
type = msgpack::type::NEGATIVE_INTEGER; o.
via.
i64 = d; } }
86{
if(d >= 0) { o.
type = msgpack::type::POSITIVE_INTEGER; o.
via.
u64 =
static_cast<uint64_t
>(d); }
87 else { o.
type = msgpack::type::NEGATIVE_INTEGER; o.
via.
i64 = d; } }
90{
if(d >= 0) { o.
type = msgpack::type::POSITIVE_INTEGER; o.
via.
u64 =
static_cast<uint64_t
>(d); }
91 else { o.
type = msgpack::type::NEGATIVE_INTEGER; o.
via.
i64 = d; } }
94{
if(d >= 0) { o.
type = msgpack::type::POSITIVE_INTEGER; o.
via.
u64 =
static_cast<uint64_t
>(d); }
95 else { o.
type = msgpack::type::NEGATIVE_INTEGER; o.
via.
i64 = d; } }
98{ o.
type = msgpack::type::FLOAT32; o.
via.
f64 = d; }
101{ o.
type = msgpack::type::FLOAT64; o.
via.
f64 = d; }
104{ o.
type = msgpack::type::NIL; }
115 o.
type = msgpack::type::ARRAY;
118#if SIZE_MAX == UINT_MAX
130#if defined(__GNUC__) && !defined(__clang__)
141 o.
type = msgpack::type::MAP;
144#if SIZE_MAX == UINT_MAX
156#if defined(__GNUC__) && !defined(__clang__)
168 o.
type = msgpack::type::STR;
176 std::memcpy(tmp, p, l);
187 o.
type = msgpack::type::BIN;
195 std::memcpy(tmp, p, l);
206 o.
type = msgpack::type::EXT;
214 std::memcpy(tmp, p, l);
217 o.
via.
ext.
size =
static_cast<uint32_t
>(l - 1);
226 std::size_t
count()
const {
return m_count; }
236 uint32_t m_container_type;
242#if defined(MSGPACK_USE_CPP03)
245 new (buffer) std::atomic<unsigned int>(1);
251#if defined(MSGPACK_USE_CPP03)
256 if (--*
reinterpret_cast<std::atomic<unsigned int>*
>(buffer) == 0) {
264#if defined(MSGPACK_USE_CPP03)
267 ++*
reinterpret_cast<std::atomic<unsigned int>*
>(buffer);
271#if defined(MSGPACK_USE_CPP03)
277inline std::atomic<unsigned int>
const&
get_count(
void* buffer)
279 return *
reinterpret_cast<std::atomic<unsigned int>*
>(buffer);
293inline typename msgpack::enable_if<
sizeof(T) ==
sizeof(fix_tag)>::type
load(uint32_t& dst,
const char* n) {
294 dst =
static_cast<uint32_t
>(*
reinterpret_cast<const uint8_t*
>(n)) & 0x0f;
298inline typename msgpack::enable_if<
sizeof(T) == 1>::type
load(T& dst,
const char* n) {
299 dst =
static_cast<T
>(*
reinterpret_cast<const uint8_t*
>(n));
303inline typename msgpack::enable_if<
sizeof(T) == 2>::type
load(T& dst,
const char* n) {
308inline typename msgpack::enable_if<
sizeof(T) == 4>::type
load(T& dst,
const char* n) {
313inline typename msgpack::enable_if<
sizeof(T) == 8>::type
load(T& dst,
const char* n) {
336 return m_stack[0].obj();
349 int execute(
const char*
data, std::size_t len, std::size_t& off);
352 template <
typename T>
353 static uint32_t next_cs(T p)
355 return static_cast<uint32_t
>(*p) & 0x1f;
358 template <
typename T,
typename Func>
361 uint32_t container_type,
363 const char* load_pos,
366 load<T>(tmp, load_pos);
367 f(m_user, tmp, m_stack.back().obj());
369 obj = m_stack.back().obj();
370 int ret = push_proc(obj, off);
371 if (ret != 0)
return ret;
374 m_stack.back().set_container_type(container_type);
375 m_stack.back().set_count(tmp);
376 if (m_stack.size() <= m_user.
limit().
depth()) {
377 m_stack.push_back(unpack_stack());
391 if(m_stack.size() == 1) {
394 unpack_stack& sp = *(m_stack.end() - 2);
395 switch(sp.container_type()) {
398 if(sp.decr_count() == 0) {
413 if(sp.decr_count() == 0) {
430 int ret = push_item(obj);
432 m_stack[0].set_obj(obj);
435 off =
static_cast<std::size_t
>(m_current - m_start);
438 off =
static_cast<std::size_t
>(m_current - m_start);
447 template <std::
size_t N>
448 static void check_ext_size(std::size_t ) {
453 char const* m_current;
458 std::vector<unpack_stack> m_stack;
462inline void context::check_ext_size<4>(std::size_t size) {
471 m_current =
data + off;
472 const char*
const pe =
data + len;
477 if(m_current == pe) {
478 off =
static_cast<std::size_t
>(m_current - m_start);
481 bool fixed_trail_again =
false;
484 fixed_trail_again =
false;
485 int selector = *
reinterpret_cast<const unsigned char*
>(m_current);
486 if (0x00 <= selector && selector <= 0x7f) {
487 unpack_uint8(*
reinterpret_cast<const uint8_t*
>(m_current), obj);
488 int ret = push_proc(obj, off);
489 if (ret != 0)
return ret;
490 }
else if(0xe0 <= selector && selector <= 0xff) {
491 unpack_int8(*
reinterpret_cast<const int8_t*
>(m_current), obj);
492 int ret = push_proc(obj, off);
493 if (ret != 0)
return ret;
494 }
else if (0xc4 <= selector && selector <= 0xdf) {
495 const uint32_t trail[] = {
525 m_trail = trail[selector - 0xc4];
526 m_cs = next_cs(m_current);
527 fixed_trail_again =
true;
528 }
else if(0xa0 <= selector && selector <= 0xbf) {
529 m_trail =
static_cast<uint32_t
>(*m_current) & 0x1f;
531 unpack_str(m_user, n,
static_cast<uint32_t
>(m_trail), obj);
532 int ret = push_proc(obj, off);
533 if (ret != 0)
return ret;
537 fixed_trail_again =
true;
540 }
else if(0x90 <= selector && selector <= 0x9f) {
541 int ret = push_aggregate<fix_tag>(
543 if (ret != 0)
return ret;
544 }
else if(0x80 <= selector && selector <= 0x8f) {
545 int ret = push_aggregate<fix_tag>(
547 if (ret != 0)
return ret;
548 }
else if(selector == 0xc2) {
550 int ret = push_proc(obj, off);
551 if (ret != 0)
return ret;
552 }
else if(selector == 0xc3) {
554 int ret = push_proc(obj, off);
555 if (ret != 0)
return ret;
556 }
else if(selector == 0xc0) {
558 int ret = push_proc(obj, off);
559 if (ret != 0)
return ret;
561 off =
static_cast<std::size_t
>(m_current - m_start);
567 if (fixed_trail_again) {
569 fixed_trail_again =
false;
571 if(
static_cast<std::size_t
>(pe - m_current) < m_trail) {
572 off =
static_cast<std::size_t
>(m_current - m_start);
576 m_current += m_trail - 1;
581 union { uint32_t i;
float f; } mem;
582 load<uint32_t>(mem.i, n);
584 int ret = push_proc(obj, off);
585 if (ret != 0)
return ret;
588 union { uint64_t i;
double f; } mem;
589 load<uint64_t>(mem.i, n);
590#if defined(TARGET_OS_IPHONE)
592#elif defined(__arm__) && !(__ARM_EABI__)
594 mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
597 int ret = push_proc(obj, off);
598 if (ret != 0)
return ret;
602 load<uint8_t>(tmp, n);
604 int ret = push_proc(obj, off);
605 if (ret != 0)
return ret;
609 load<uint16_t>(tmp, n);
611 int ret = push_proc(obj, off);
612 if (ret != 0)
return ret;
616 load<uint32_t>(tmp, n);
618 int ret = push_proc(obj, off);
619 if (ret != 0)
return ret;
623 load<uint64_t>(tmp, n);
625 int ret = push_proc(obj, off);
626 if (ret != 0)
return ret;
630 load<int8_t>(tmp, n);
632 int ret = push_proc(obj, off);
633 if (ret != 0)
return ret;
637 load<int16_t>(tmp, n);
639 int ret = push_proc(obj, off);
640 if (ret != 0)
return ret;
644 load<int32_t>(tmp, n);
646 int ret = push_proc(obj, off);
647 if (ret != 0)
return ret;
651 load<int64_t>(tmp, n);
653 int ret = push_proc(obj, off);
654 if (ret != 0)
return ret;
658 int ret = push_proc(obj, off);
659 if (ret != 0)
return ret;
663 int ret = push_proc(obj, off);
664 if (ret != 0)
return ret;
668 int ret = push_proc(obj, off);
669 if (ret != 0)
return ret;
673 int ret = push_proc(obj, off);
674 if (ret != 0)
return ret;
678 int ret = push_proc(obj, off);
679 if (ret != 0)
return ret;
683 load<uint8_t>(tmp, n);
686 unpack_str(m_user, n,
static_cast<uint32_t
>(m_trail), obj);
687 int ret = push_proc(obj, off);
688 if (ret != 0)
return ret;
692 fixed_trail_again =
true;
697 load<uint8_t>(tmp, n);
700 unpack_bin(m_user, n,
static_cast<uint32_t
>(m_trail), obj);
701 int ret = push_proc(obj, off);
702 if (ret != 0)
return ret;
706 fixed_trail_again =
true;
711 load<uint8_t>(tmp, n);
715 int ret = push_proc(obj, off);
716 if (ret != 0)
return ret;
720 fixed_trail_again =
true;
725 load<uint16_t>(tmp, n);
728 unpack_str(m_user, n,
static_cast<uint32_t
>(m_trail), obj);
729 int ret = push_proc(obj, off);
730 if (ret != 0)
return ret;
734 fixed_trail_again =
true;
739 load<uint16_t>(tmp, n);
742 unpack_bin(m_user, n,
static_cast<uint32_t
>(m_trail), obj);
743 int ret = push_proc(obj, off);
744 if (ret != 0)
return ret;
748 fixed_trail_again =
true;
753 load<uint16_t>(tmp, n);
757 int ret = push_proc(obj, off);
758 if (ret != 0)
return ret;
762 fixed_trail_again =
true;
767 load<uint32_t>(tmp, n);
770 unpack_str(m_user, n,
static_cast<uint32_t
>(m_trail), obj);
771 int ret = push_proc(obj, off);
772 if (ret != 0)
return ret;
776 fixed_trail_again =
true;
781 load<uint32_t>(tmp, n);
784 unpack_bin(m_user, n,
static_cast<uint32_t
>(m_trail), obj);
785 int ret = push_proc(obj, off);
786 if (ret != 0)
return ret;
790 fixed_trail_again =
true;
795 load<uint32_t>(tmp, n);
796 check_ext_size<sizeof(std::size_t)>(tmp);
801 int ret = push_proc(obj, off);
802 if (ret != 0)
return ret;
806 fixed_trail_again =
true;
810 unpack_str(m_user, n,
static_cast<uint32_t
>(m_trail), obj);
811 int ret = push_proc(obj, off);
812 if (ret != 0)
return ret;
815 unpack_bin(m_user, n,
static_cast<uint32_t
>(m_trail), obj);
816 int ret = push_proc(obj, off);
817 if (ret != 0)
return ret;
821 int ret = push_proc(obj, off);
822 if (ret != 0)
return ret;
825 int ret = push_aggregate<uint16_t>(
827 if (ret != 0)
return ret;
831 int ret = push_aggregate<uint32_t>(
833 if (ret != 0)
return ret;
836 int ret = push_aggregate<uint16_t>(
838 if (ret != 0)
return ret;
842 int ret = push_aggregate<uint32_t>(
844 if (ret != 0)
return ret;
847 off =
static_cast<std::size_t
>(m_current - m_start);
851 }
while(m_current != pe);
853 off =
static_cast<std::size_t
>(m_current - m_start);
876#if !defined(MSGPACK_USE_CPP03)
1037 void expand_buffer(std::size_t size);
1047 std::size_t m_parsed;
1048 msgpack::unique_ptr<msgpack::zone> m_z;
1049 std::size_t m_initial_buffer_size;
1052#if defined(MSGPACK_USE_CPP03)
1064 std::size_t initial_buffer_size,
1066 :m_z(new
msgpack::
zone), m_ctx(f, user_data, limit)
1072 char*
buffer =
static_cast<char*
>(::malloc(initial_buffer_size));
1074 throw std::bad_alloc();
1079 m_free = initial_buffer_size - m_used;
1082 m_initial_buffer_size = initial_buffer_size;
1084 detail::init_count(m_buffer);
1091#if !defined(MSGPACK_USE_CPP03)
1095 :m_buffer(other.m_buffer),
1096 m_used(other.m_used),
1097 m_free(other.m_free),
1099 m_parsed(other.m_parsed),
1100 m_z(std::move(other.m_z)),
1101 m_initial_buffer_size(other.m_initial_buffer_size),
1102 m_ctx(other.m_ctx) {
1108 new (
this)
unpacker(std::move(other));
1118 if (m_buffer) detail::decr_count(m_buffer);
1124 if(m_free >= size)
return;
1125 expand_buffer(size);
1128inline void unpacker::expand_buffer(std::size_t size)
1130 if(m_used == m_off && detail::get_count(m_buffer) == 1
1137 if(m_free >= size)
return;
1141 std::size_t next_size = (m_used + m_free) * 2;
1142 while(next_size < size + m_used) {
1143 std::size_t tmp_next_size = next_size * 2;
1144 if (tmp_next_size <= next_size) {
1145 next_size = size + m_used;
1148 next_size = tmp_next_size;
1151 char* tmp =
static_cast<char*
>(::realloc(m_buffer, next_size));
1153 throw std::bad_alloc();
1157 m_free = next_size - m_used;
1160 std::size_t next_size = m_initial_buffer_size;
1161 std::size_t not_parsed = m_used - m_off;
1163 std::size_t tmp_next_size = next_size * 2;
1164 if (tmp_next_size <= next_size) {
1168 next_size = tmp_next_size;
1171 char* tmp =
static_cast<char*
>(::malloc(next_size));
1173 throw std::bad_alloc();
1176 detail::init_count(tmp);
1178 std::memcpy(tmp+
COUNTER_SIZE, m_buffer + m_off, not_parsed);
1182 m_z->push_finalizer(&detail::decr_count, m_buffer);
1190 detail::decr_count(m_buffer);
1195 m_free = next_size - m_used;
1202 return m_buffer + m_used;
1219 int ret = execute_imp();
1225 result.
zone().reset();
1241 return next(result, referenced);
1246 return next(*result);
1252 int ret = execute_imp();
1255 }
else if(ret == 0) {
1262inline int unpacker::execute_imp()
1264 std::size_t off = m_off;
1265 int ret = m_ctx.
execute(m_buffer, m_used, m_off);
1267 m_parsed += m_off - off;
1274 return m_ctx.
data();
1296inline bool unpacker::flush_zone()
1300 m_z->push_finalizer(&detail::decr_count, m_buffer);
1306 detail::incr_count(m_buffer);
1321 return m_parsed - m_off + m_used;
1331 return m_buffer + m_off;
1336 return m_used - m_off;
1352unpack_imp(
const char* data, std::size_t len, std::size_t& off,
1357 std::size_t noff = off;
1364 detail::context ctx(f, user_data, limit);
1367 ctx.user().set_zone(result_zone);
1368 ctx.user().set_referenced(
false);
1371 int e = ctx.execute(data, len, noff);
1373 return PARSE_PARSE_ERROR;
1376 referenced = ctx.user().referenced();
1383 result = ctx.data();
1397 const char* data, std::size_t len, std::size_t& off,
bool& referenced,
1405 std::size_t noff = off;
1407 data, len, noff, *z, obj, referenced, f, user_data, limit);
1426 const char* data, std::size_t len, std::size_t& off,
1431 return unpack(data, len, off, referenced, f, user_data, limit);
1435 const char* data, std::size_t len,
bool& referenced,
1439 std::size_t off = 0;
1440 return unpack(data, len, off, referenced, f, user_data, limit);
1444 const char* data, std::size_t len,
1449 std::size_t off = 0;
1450 return unpack(data, len, off, referenced, f, user_data, limit);
1455 const char* data, std::size_t len, std::size_t& off,
bool& referenced,
1462 std::size_t noff = off;
1464 data, len, noff, *z, obj, referenced, f, user_data, limit);
1470 result.
zone() = msgpack::move(z);
1475 result.
zone() = msgpack::move(z);
1487 const char* data, std::size_t len, std::size_t& off,
1492 unpack(result, data, len, off, referenced, f, user_data, limit);
1497 const char* data, std::size_t len,
bool& referenced,
1501 std::size_t off = 0;
1502 unpack(result, data, len, off, referenced, f, user_data, limit);
1507 const char* data, std::size_t len,
1512 std::size_t off = 0;
1513 unpack(result, data, len, off, referenced, f, user_data, limit);
1519 const char* data, std::size_t len, std::size_t& off,
bool& referenced,
1524 std::size_t noff = off;
1527 data, len, noff, z, obj, referenced, f, user_data, limit);
1547 const char* data, std::size_t len, std::size_t& off,
1552 return unpack(z, data, len, off, referenced, f, user_data, limit);
1557 const char* data, std::size_t len,
bool& referenced,
1561 std::size_t off = 0;
1562 return unpack(z, data, len, off, referenced, f, user_data, limit);
1567 const char* data, std::size_t len,
1572 std::size_t off = 0;
1573 return unpack(z, data, len, off, referenced, f, user_data, limit);
1581 const
char* data, std::
size_t len, std::
size_t* off,
bool* referenced,
1586 if (referenced)
unpack(*result, data, len, *off, *referenced, f, user_data, limit);
1587 else unpack(*result, data, len, *off, f, user_data, limit);
1589 if (referenced)
unpack(*result, data, len, *referenced, f, user_data, limit);
1590 else unpack(*result, data, len, f, user_data, limit);
#define MSGPACK_ASSERT
Definition assert.hpp:22
Definition unpack.hpp:317
unpack_user & user()
Definition unpack.hpp:339
int execute(const char *data, std::size_t len, std::size_t &off)
Definition unpack.hpp:466
msgpack::object const & data() const
Definition unpack.hpp:334
context(unpack_reference_func f, void *user_data, unpack_limit const &limit)
Definition unpack.hpp:319
unpack_user const & user() const
Definition unpack.hpp:344
void init()
Definition unpack.hpp:326
Definition unpack.hpp:221
std::size_t decr_count()
Definition unpack.hpp:228
msgpack::object const & obj() const
Definition unpack.hpp:223
std::size_t count() const
Definition unpack.hpp:226
void set_map_key(msgpack::object const &map_key)
Definition unpack.hpp:232
uint32_t container_type() const
Definition unpack.hpp:229
void set_obj(msgpack::object const &obj)
Definition unpack.hpp:225
void set_container_type(uint32_t container_type)
Definition unpack.hpp:230
msgpack::object & obj()
Definition unpack.hpp:224
void set_count(std::size_t count)
Definition unpack.hpp:227
msgpack::object const & map_key() const
Definition unpack.hpp:231
msgpack::zone const & zone() const
Definition unpack.hpp:51
unpack_reference_func reference_func() const
Definition unpack.hpp:56
unpack_limit & limit()
Definition unpack.hpp:59
msgpack::zone & zone()
Definition unpack.hpp:52
void * user_data() const
Definition unpack.hpp:57
unpack_user(unpack_reference_func f=MSGPACK_NULLPTR, void *user_data=MSGPACK_NULLPTR, unpack_limit const &limit=unpack_limit())
Definition unpack.hpp:47
unpack_limit const & limit() const
Definition unpack.hpp:58
void set_zone(msgpack::zone &zone)
Definition unpack.hpp:53
bool referenced() const
Definition unpack.hpp:54
void set_referenced(bool referenced)
Definition unpack.hpp:55
The class holds object and zone.
Definition object.hpp:44
void set(msgpack::object const &obj)
Definition object.hpp:64
msgpack::unique_ptr< msgpack::zone > & zone()
Get unique_ptr reference of zone.
Definition object.hpp:90
Definition unpack_decl.hpp:87
std::size_t bin() const
Definition unpack_decl.hpp:105
std::size_t str() const
Definition unpack_decl.hpp:104
std::size_t map() const
Definition unpack_decl.hpp:103
std::size_t depth() const
Definition unpack_decl.hpp:107
std::size_t array() const
Definition unpack_decl.hpp:102
std::size_t ext() const
Definition unpack_decl.hpp:106
Unpacking class for a stream deserialization.
Definition unpack.hpp:861
msgpack::zone * release_zone()
Definition unpack.hpp:1277
void reserve_buffer(std::size_t size=MSGPACK_UNPACKER_RESERVE_SIZE)
Reserve a buffer memory.
Definition unpack.hpp:1122
void reset_zone()
Definition unpack.hpp:1291
void remove_nonparsed_buffer()
Remove nonparsed buffer and reset the current position as a new start point.
Definition unpack.hpp:1344
~unpacker()
Definition unpack.hpp:1115
msgpack::object const & data()
Definition unpack.hpp:1272
std::size_t nonparsed_size() const
Get the size of the buffer that is not parsed.
Definition unpack.hpp:1334
void buffer_consumed(std::size_t size)
Notify a buffer consumed information to msgpack::unpacker.
Definition unpack.hpp:1210
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:1062
std::size_t parsed_size() const
Get parsed message size.
Definition unpack.hpp:1324
std::size_t message_size() const
Get message size.
Definition unpack.hpp:1319
char * buffer()
Get buffer pointer.
Definition unpack.hpp:1200
char * nonparsed_buffer()
Get the address that is not parsed in the buffer.
Definition unpack.hpp:1329
bool execute()
Definition unpack.hpp:1250
void reset()
Definition unpack.hpp:1312
std::size_t buffer_capacity() const
Get buffer capacity.
Definition unpack.hpp:1205
void skip_nonparsed_buffer(std::size_t size)
Skip the specified size of non-parsed buffer.
Definition unpack.hpp:1339
unpacker & operator=(unpacker &&other)
Definition unpack.hpp:1106
bool next(msgpack::object_handle *result)
Unpack one msgpack::object. [obsolete].
Definition unpack.hpp:1244
Definition cpp03_zone.hpp:30
void * allocate_align(size_t size, size_t align=MSGPACK_ZONE_ALIGN)
Definition cpp03_zone.hpp:255
void unpack_int32(int32_t d, msgpack::object &o)
Definition unpack.hpp:89
void unpack_ext(unpack_user &u, const char *p, std::size_t l, msgpack::object &o)
Definition unpack.hpp:204
void unpack_float(float d, msgpack::object &o)
Definition unpack.hpp:97
void unpack_false(msgpack::object &o)
Definition unpack.hpp:109
void unpack_int16(int16_t d, msgpack::object &o)
Definition unpack.hpp:85
void unpack_str(unpack_user &u, const char *p, uint32_t l, msgpack::object &o)
Definition unpack.hpp:166
void unpack_nil(msgpack::object &o)
Definition unpack.hpp:103
void init_count(void *buffer)
Definition unpack.hpp:240
void unpack_uint64(uint64_t d, msgpack::object &o)
Definition unpack.hpp:78
std::atomic< unsigned int > const & get_count(void *buffer)
Definition unpack.hpp:277
void unpack_array_item(msgpack::object &c, msgpack::object const &o)
Definition unpack.hpp:128
void decr_count(void *buffer)
Definition unpack.hpp:249
void unpack_int64(int64_t d, msgpack::object &o)
Definition unpack.hpp:93
void unpack_uint8(uint8_t d, msgpack::object &o)
Definition unpack.hpp:69
void unpack_bin(unpack_user &u, const char *p, uint32_t l, msgpack::object &o)
Definition unpack.hpp:185
void unpack_int8(int8_t d, msgpack::object &o)
Definition unpack.hpp:81
void incr_count(void *buffer)
Definition unpack.hpp:262
void unpack_true(msgpack::object &o)
Definition unpack.hpp:106
void unpack_map_item(msgpack::object &c, msgpack::object const &k, msgpack::object const &v)
Definition unpack.hpp:154
void unpack_uint16(uint16_t d, msgpack::object &o)
Definition unpack.hpp:72
void unpack_double(double d, msgpack::object &o)
Definition unpack.hpp:100
void unpack_uint32(uint32_t d, msgpack::object &o)
Definition unpack.hpp:75
msgpack::enable_if< sizeof(T)==sizeof(fix_tag)>::type load(uint32_t &dst, const char *n)
Definition unpack.hpp:293
std::size_t size(T const &t)
Definition size_equal_only.hpp:24
object_type
Definition object_fwd_decl.hpp:27
Definition adaptor_base.hpp:15
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
parse_return
Definition parse_return.hpp:23
@ PARSE_CONTINUE
Definition parse_return.hpp:26
@ PARSE_EXTRA_BYTES
Definition parse_return.hpp:25
@ PARSE_SUCCESS
Definition parse_return.hpp:24
@ PARSE_PARSE_ERROR
Definition parse_return.hpp:27
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:1396
Definition unpack_exception.hpp:61
Definition unpack_exception.hpp:88
Definition unpack_exception.hpp:106
Definition unpack.hpp:112
void operator()(unpack_user &u, uint32_t n, msgpack::object &o) const
Definition unpack.hpp:113
Definition unpack.hpp:138
void operator()(unpack_user &u, uint32_t n, msgpack::object &o) const
Definition unpack.hpp:139
uint32_t type
Definition unpack.hpp:289
Definition unpack.hpp:284
T type
Definition unpack.hpp:285
Definition unpack_exception.hpp:97
Definition unpack_exception.hpp:43
Definition unpack_exception.hpp:70
uint32_t size
Definition object_fwd.hpp:23
msgpack::object * ptr
Definition object_fwd.hpp:24
uint32_t size
Definition object_fwd.hpp:38
const char * ptr
Definition object_fwd.hpp:39
const char * ptr
Definition object_fwd.hpp:46
uint32_t size
Definition object_fwd.hpp:45
msgpack::object val
Definition object.hpp:32
msgpack::object key
Definition object.hpp:31
uint32_t size
Definition object_fwd.hpp:28
msgpack::object_kv * ptr
Definition object_fwd.hpp:29
const char * ptr
Definition object_fwd.hpp:34
uint32_t size
Definition object_fwd.hpp:33
Object class that corresponding to MessagePack format object.
Definition object_fwd.hpp:75
union_type via
Definition object_fwd.hpp:93
msgpack::type::object_type type
Definition object_fwd.hpp:92
Definition unpack_exception.hpp:34
Definition unpack_exception.hpp:79
unsigned int _msgpack_atomic_counter_t
Definition sysdep.hpp:73
#define _msgpack_load64(cast, from, to)
Definition sysdep.hpp:180
#define _msgpack_sync_incr_and_fetch(ptr)
Definition sysdep.hpp:75
#define _msgpack_load16(cast, from, to)
Definition sysdep.hpp:171
#define _msgpack_sync_decr_and_fetch(ptr)
Definition sysdep.hpp:74
#define _msgpack_load32(cast, from, to)
Definition sysdep.hpp:176
bool boolean
Definition object_fwd.hpp:77
msgpack::object_array array
Definition object_fwd.hpp:85
msgpack::object_ext ext
Definition object_fwd.hpp:89
msgpack::object_str str
Definition object_fwd.hpp:87
uint64_t u64
Definition object_fwd.hpp:78
int64_t i64
Definition object_fwd.hpp:79
msgpack::object_bin bin
Definition object_fwd.hpp:88
double f64
Definition object_fwd.hpp:84
msgpack::object_map map
Definition object_fwd.hpp:86
@ MSGPACK_CT_ARRAY_ITEM
Definition unpack_define.hpp:69
@ MSGPACK_CT_MAP_VALUE
Definition unpack_define.hpp:71
@ MSGPACK_CT_MAP_KEY
Definition unpack_define.hpp:70
#define MSGPACK_EMBED_STACK_SIZE
Definition unpack_define.hpp:16
@ MSGPACK_CS_EXT_32
Definition unpack_define.hpp:33
@ MSGPACK_CS_EXT_16
Definition unpack_define.hpp:32
@ MSGPACK_CS_STR_8
Definition unpack_define.hpp:52
@ MSGPACK_CS_STR_32
Definition unpack_define.hpp:54
@ MSGPACK_CS_DOUBLE
Definition unpack_define.hpp:36
@ MSGPACK_CS_FIXEXT_4
Definition unpack_define.hpp:48
@ MSGPACK_CS_UINT_32
Definition unpack_define.hpp:39
@ MSGPACK_CS_MAP_16
Definition unpack_define.hpp:57
@ MSGPACK_CS_BIN_32
Definition unpack_define.hpp:29
@ MSGPACK_CS_BIN_16
Definition unpack_define.hpp:28
@ MSGPACK_CS_UINT_64
Definition unpack_define.hpp:40
@ MSGPACK_CS_FLOAT
Definition unpack_define.hpp:35
@ MSGPACK_CS_ARRAY_32
Definition unpack_define.hpp:56
@ MSGPACK_CS_FIXEXT_1
Definition unpack_define.hpp:46
@ MSGPACK_CS_INT_8
Definition unpack_define.hpp:41
@ MSGPACK_CS_INT_32
Definition unpack_define.hpp:43
@ MSGPACK_ACS_BIN_VALUE
Definition unpack_define.hpp:63
@ MSGPACK_CS_ARRAY_16
Definition unpack_define.hpp:55
@ MSGPACK_CS_FIXEXT_16
Definition unpack_define.hpp:50
@ MSGPACK_CS_STR_16
Definition unpack_define.hpp:53
@ MSGPACK_ACS_STR_VALUE
Definition unpack_define.hpp:62
@ MSGPACK_CS_BIN_8
Definition unpack_define.hpp:27
@ MSGPACK_CS_INT_64
Definition unpack_define.hpp:44
@ MSGPACK_CS_FIXEXT_2
Definition unpack_define.hpp:47
@ MSGPACK_CS_HEADER
Definition unpack_define.hpp:21
@ MSGPACK_CS_FIXEXT_8
Definition unpack_define.hpp:49
@ MSGPACK_CS_MAP_32
Definition unpack_define.hpp:58
@ MSGPACK_ACS_EXT_VALUE
Definition unpack_define.hpp:64
@ MSGPACK_CS_EXT_8
Definition unpack_define.hpp:31
@ MSGPACK_CS_INT_16
Definition unpack_define.hpp:42
@ MSGPACK_CS_UINT_16
Definition unpack_define.hpp:38
@ MSGPACK_CS_UINT_8
Definition unpack_define.hpp:37
#define MSGPACK_DEPRECATED(msg)
Definition cpp_config.hpp:138
#define MSGPACK_NULLPTR
Definition cpp_config_decl.hpp:85
#define MSGPACK_ZONE_ALIGNOF(type)
Definition cpp03_zone_decl.hpp:30
#define MSGPACK_UNPACKER_INIT_BUFFER_SIZE
Definition unpack_decl.hpp:43
#define MSGPACK_UNPACKER_RESERVE_SIZE
Definition unpack_decl.hpp:47
const size_t COUNTER_SIZE
Definition unpack_decl.hpp:40
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition versioning.hpp:66