From 427a6e73131d72fa9a8594cd0de0190026472e36 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Fri, 6 Apr 2018 07:38:58 +0900 Subject: [PATCH 1/4] Revert "Fixed #637." This reverts commit 5ece2ef2c7e62f77b4d68e1665022c5b0cdbce3d. --- include/msgpack/v1/unpack.hpp | 9 +- include/msgpack/v2/parse.hpp | 38 ++--- include/msgpack/v2/unpack.hpp | 15 +- src/unpack.c | 6 +- test/pack_unpack.cpp | 6 +- test/pack_unpack_c.cpp | 2 +- test/visitor.cpp | 299 ---------------------------------- 7 files changed, 37 insertions(+), 338 deletions(-) diff --git a/include/msgpack/v1/unpack.hpp b/include/msgpack/v1/unpack.hpp index 6405b1a4..74836bd3 100644 --- a/include/msgpack/v1/unpack.hpp +++ b/include/msgpack/v1/unpack.hpp @@ -1392,11 +1392,12 @@ inline msgpack::object_handle unpack( parse_return ret = detail::unpack_imp( data, len, noff, *z, obj, referenced, f, user_data, limit); - off = noff; switch(ret) { case PARSE_SUCCESS: + off = noff; return msgpack::object_handle(obj, msgpack::move(z)); case PARSE_EXTRA_BYTES: + off = noff; return msgpack::object_handle(obj, msgpack::move(z)); case PARSE_CONTINUE: throw msgpack::insufficient_bytes("insufficient bytes"); @@ -1448,13 +1449,14 @@ inline void unpack( parse_return ret = detail::unpack_imp( data, len, noff, *z, obj, referenced, f, user_data, limit); - off = noff; switch(ret) { case PARSE_SUCCESS: + off = noff; result.set(obj); result.zone() = msgpack::move(z); return; case PARSE_EXTRA_BYTES: + off = noff; result.set(obj); result.zone() = msgpack::move(z); return; @@ -1510,11 +1512,12 @@ inline msgpack::object unpack( parse_return ret = detail::unpack_imp( data, len, noff, z, obj, referenced, f, user_data, limit); - off = noff; switch(ret) { case PARSE_SUCCESS: + off = noff; return obj; case PARSE_EXTRA_BYTES: + off = noff; return obj; case PARSE_CONTINUE: throw msgpack::insufficient_bytes("insufficient bytes"); diff --git a/include/msgpack/v2/parse.hpp b/include/msgpack/v2/parse.hpp index fd040ded..345dc80c 100644 --- a/include/msgpack/v2/parse.hpp +++ b/include/msgpack/v2/parse.hpp @@ -58,6 +58,7 @@ private: std::size_t& off) { typename value::type size; load(size, load_pos); + ++m_current; if (size == 0) { if (!sv(size)) { off = m_current - m_start; @@ -67,7 +68,7 @@ private: off = m_current - m_start; return PARSE_STOP_VISITOR; } - parse_return ret = m_stack.consume(holder(), m_current); + parse_return ret = m_stack.consume(holder()); if (ret != PARSE_CONTINUE) { off = m_current - m_start; return ret; @@ -84,18 +85,17 @@ private: return ret; } } - ++m_current; m_cs = MSGPACK_CS_HEADER; return PARSE_CONTINUE; } parse_return after_visit_proc(bool visit_result, std::size_t& off) { + ++m_current; if (!visit_result) { off = m_current - m_start; return PARSE_STOP_VISITOR; } - parse_return ret = m_stack.consume(holder(), m_current); - ++m_current; + parse_return ret = m_stack.consume(holder()); if (ret != PARSE_CONTINUE) { off = m_current - m_start; } @@ -161,21 +161,15 @@ private: assert(0); return PARSE_STOP_VISITOR; } - parse_return consume(VisitorHolder& visitor_holder, char const*& current) { + parse_return consume(VisitorHolder& visitor_holder) { while (!m_stack.empty()) { stack_elem& e = m_stack.back(); switch (e.m_type) { case MSGPACK_CT_ARRAY_ITEM: - if (!visitor_holder.visitor().end_array_item()) { - --current; - return PARSE_STOP_VISITOR; - } + if (!visitor_holder.visitor().end_array_item()) return PARSE_STOP_VISITOR; if (--e.m_rest == 0) { m_stack.pop_back(); - if (!visitor_holder.visitor().end_array()) { - --current; - return PARSE_STOP_VISITOR; - } + if (!visitor_holder.visitor().end_array()) return PARSE_STOP_VISITOR; } else { if (!visitor_holder.visitor().start_array_item()) return PARSE_STOP_VISITOR; @@ -183,24 +177,15 @@ private: } break; case MSGPACK_CT_MAP_KEY: - if (!visitor_holder.visitor().end_map_key()) { - --current; - return PARSE_STOP_VISITOR; - } + if (!visitor_holder.visitor().end_map_key()) return PARSE_STOP_VISITOR; if (!visitor_holder.visitor().start_map_value()) return PARSE_STOP_VISITOR; e.m_type = MSGPACK_CT_MAP_VALUE; return PARSE_CONTINUE; case MSGPACK_CT_MAP_VALUE: - if (!visitor_holder.visitor().end_map_value()) { - --current; - return PARSE_STOP_VISITOR; - } + if (!visitor_holder.visitor().end_map_value()) return PARSE_STOP_VISITOR; if (--e.m_rest == 0) { m_stack.pop_back(); - if (!visitor_holder.visitor().end_map()) { - --current; - return PARSE_STOP_VISITOR; - } + if (!visitor_holder.visitor().end_map()) return PARSE_STOP_VISITOR; } else { e.m_type = MSGPACK_CT_MAP_KEY; @@ -1047,12 +1032,13 @@ parse_imp(const char* data, size_t len, size_t& off, Visitor& v) { } detail::parse_helper h(v); parse_return ret = h.execute(data, len, noff); - off = noff; switch (ret) { case PARSE_CONTINUE: + off = noff; v.insufficient_bytes(noff - 1, noff); return ret; case PARSE_SUCCESS: + off = noff; if(noff < len) { return PARSE_EXTRA_BYTES; } diff --git a/include/msgpack/v2/unpack.hpp b/include/msgpack/v2/unpack.hpp index f5b8f2ae..56560c5b 100644 --- a/include/msgpack/v2/unpack.hpp +++ b/include/msgpack/v2/unpack.hpp @@ -152,13 +152,16 @@ inline msgpack::object_handle unpack( msgpack::object obj; msgpack::unique_ptr z(new msgpack::zone); referenced = false; + std::size_t noff = off; parse_return ret = detail::unpack_imp( - data, len, off, *z, obj, referenced, f, user_data, limit); + data, len, noff, *z, obj, referenced, f, user_data, limit); switch(ret) { case PARSE_SUCCESS: + off = noff; return msgpack::object_handle(obj, msgpack::move(z)); case PARSE_EXTRA_BYTES: + off = noff; return msgpack::object_handle(obj, msgpack::move(z)); default: break; @@ -203,15 +206,18 @@ inline void unpack( msgpack::object obj; msgpack::unique_ptr z(new msgpack::zone); referenced = false; + std::size_t noff = off; parse_return ret = detail::unpack_imp( - data, len, off, *z, obj, referenced, f, user_data, limit); + data, len, noff, *z, obj, referenced, f, user_data, limit); switch(ret) { case PARSE_SUCCESS: + off = noff; result.set(obj); result.zone() = msgpack::move(z); return; case PARSE_EXTRA_BYTES: + off = noff; result.set(obj); result.zone() = msgpack::move(z); return; @@ -259,14 +265,17 @@ inline msgpack::object unpack( unpack_limit const& limit) { msgpack::object obj; + std::size_t noff = off; referenced = false; parse_return ret = detail::unpack_imp( - data, len, off, z, obj, referenced, f, user_data, limit); + data, len, noff, z, obj, referenced, f, user_data, limit); switch(ret) { case PARSE_SUCCESS: + off = noff; return obj; case PARSE_EXTRA_BYTES: + off = noff; return obj; default: break; diff --git a/src/unpack.c b/src/unpack.c index a40f2aab..e7763864 100644 --- a/src/unpack.c +++ b/src/unpack.c @@ -649,19 +649,19 @@ msgpack_unpack_next(msgpack_unpacked* result, ctx.user.referenced = false; e = template_execute(&ctx, data, len, &noff); - - if(off != NULL) { *off = noff; } - if(e < 0) { msgpack_zone_free(result->zone); result->zone = NULL; return e; } + if(e == 0) { return MSGPACK_UNPACK_CONTINUE; } + if(off != NULL) { *off = noff; } + result->data = template_data(&ctx); return MSGPACK_UNPACK_SUCCESS; diff --git a/test/pack_unpack.cpp b/test/pack_unpack.cpp index ebef94b3..68619ca8 100644 --- a/test/pack_unpack.cpp +++ b/test/pack_unpack.cpp @@ -370,7 +370,7 @@ TEST(unpack, insufficient_bytes_ref) } catch (msgpack::insufficient_bytes const&) { EXPECT_TRUE(true); - EXPECT_EQ(1u, off); + EXPECT_EQ(off, 0u); } } @@ -387,7 +387,7 @@ TEST(unpack, insufficient_bytes_object_handle) } catch (msgpack::insufficient_bytes const&) { EXPECT_TRUE(true); - EXPECT_EQ(1u, off); + EXPECT_EQ(off, 0u); } } @@ -405,7 +405,7 @@ TEST(unpack, insufficient_bytes_zone) } catch (msgpack::insufficient_bytes const&) { EXPECT_TRUE(true); - EXPECT_EQ(1u, off); + EXPECT_EQ(off, 0u); } } diff --git a/test/pack_unpack_c.cpp b/test/pack_unpack_c.cpp index 234216fb..fb3ca8d8 100644 --- a/test/pack_unpack_c.cpp +++ b/test/pack_unpack_c.cpp @@ -83,7 +83,7 @@ TEST(pack, insufficient) success = msgpack_unpack_next(&msg, sbuf->data, 1, &offset); EXPECT_EQ(MSGPACK_UNPACK_CONTINUE, success); - EXPECT_EQ(1u, offset); + EXPECT_EQ(0u, offset); msgpack_unpacked_destroy(&msg); diff --git a/test/visitor.cpp b/test/visitor.cpp index 8be1f4b2..2652b04d 100644 --- a/test/visitor.cpp +++ b/test/visitor.cpp @@ -115,7 +115,6 @@ TEST(visitor, parse_error) bool ret = msgpack::v2::parse(data, sizeof(data), off, v); EXPECT_FALSE(ret); EXPECT_TRUE(called); - EXPECT_EQ(2u, off); } struct insuf_bytes_check_visitor : msgpack::v2::null_visitor { @@ -137,304 +136,6 @@ TEST(visitor, insuf_bytes) bool ret = msgpack::v2::parse(data, sizeof(data), off, v); EXPECT_FALSE(ret); EXPECT_TRUE(called); - EXPECT_EQ(3u, off); } -struct return_false_array_val_visitor : msgpack::v2::null_visitor { - return_false_array_val_visitor(std::size_t& times):m_times(times) {} - bool visit_positive_integer(uint64_t) { - if (++m_times == 2) return false; - return true; - } - std::size_t& m_times; -}; - -TEST(visitor, return_false_array_val) -{ - std::size_t times = 0; - return_false_array_val_visitor v(times); - std::size_t off = 0; - char const data[] = { static_cast(0x93u), 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(2u, times); - EXPECT_EQ(2u, off); -} - -struct return_false_start_array_item_visitor : msgpack::v2::null_visitor { - return_false_start_array_item_visitor(std::size_t& times):m_times(times) {} - bool start_array_item() { - if (++m_times == 2) return false; - return true; - } - std::size_t& m_times; -}; - -TEST(visitor, return_false_start_array_item) -{ - std::size_t times = 0; - return_false_start_array_item_visitor v(times); - std::size_t off = 0; - char const data[] = { static_cast(0x93u), 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(2u, times); - EXPECT_EQ(2u, off); -} - -struct return_false_end_array_item_visitor : msgpack::v2::null_visitor { - return_false_end_array_item_visitor(std::size_t& times):m_times(times) {} - bool end_array_item() { - if (++m_times == 2) return false; - return true; - } - std::size_t& m_times; -}; - -TEST(visitor, return_false_end_array_item) -{ - std::size_t times = 0; - return_false_end_array_item_visitor v(times); - std::size_t off = 0; - char const data[] = { static_cast(0x93u), 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(2u, times); - EXPECT_EQ(2u, off); -} - -struct return_false_start_array_visitor : msgpack::v2::null_visitor { - bool start_array(uint32_t) { - return false; - } -}; - -TEST(visitor, return_false_start_array) -{ - return_false_start_array_visitor v; - std::size_t off = 0; - char const data[] = { static_cast(0x93u), 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(0u, off); -} - -struct return_false_start_array0_visitor : msgpack::v2::null_visitor { - bool start_array(uint32_t) { - return false; - } -}; - -TEST(visitor, return_false_start_array0) -{ - return_false_start_array0_visitor v; - std::size_t off = 0; - char const data[] = { static_cast(0x90u) }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(0u, off); -} - -struct return_false_end_array_visitor : msgpack::v2::null_visitor { - bool end_array() { - return false; - } -}; - -TEST(visitor, return_false_end_array) -{ - return_false_end_array_visitor v; - std::size_t off = 0; - char const data[] = { static_cast(0x93u), 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(3u, off); -} - -struct return_false_end_array0_visitor : msgpack::v2::null_visitor { - bool end_array() { - return false; - } -}; - -TEST(visitor, return_false_end_array0) -{ - return_false_end_array0_visitor v; - std::size_t off = 0; - char const data[] = { static_cast(0x90u) }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(0u, off); -} - -struct return_false_map_val_visitor : msgpack::v2::null_visitor { - return_false_map_val_visitor(std::size_t& times):m_times(times) {} - bool visit_positive_integer(uint64_t) { - if (++m_times == 2) return false; - return true; - } - std::size_t& m_times; -}; - -TEST(visitor, return_false_map_val) -{ - std::size_t times = 0; - return_false_map_val_visitor v(times); - std::size_t off = 0; - char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(2u, times); - EXPECT_EQ(2u, off); -} - -struct return_false_start_map_key_visitor : msgpack::v2::null_visitor { - return_false_start_map_key_visitor(std::size_t& times):m_times(times) {} - bool start_map_key() { - if (++m_times == 2) return false; - return true; - } - std::size_t& m_times; -}; - -TEST(visitor, return_false_start_map_key) -{ - std::size_t times = 0; - return_false_start_map_key_visitor v(times); - std::size_t off = 0; - char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(2u, times); - EXPECT_EQ(3u, off); -} - -struct return_false_end_map_key_visitor : msgpack::v2::null_visitor { - return_false_end_map_key_visitor(std::size_t& times):m_times(times) {} - bool end_map_key() { - if (++m_times == 2) return false; - return true; - } - std::size_t& m_times; -}; - -TEST(visitor, return_false_end_map_key) -{ - std::size_t times = 0; - return_false_end_map_key_visitor v(times); - std::size_t off = 0; - char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(2u, times); - EXPECT_EQ(3u, off); -} - -struct return_false_start_map_value_visitor : msgpack::v2::null_visitor { - return_false_start_map_value_visitor(std::size_t& times):m_times(times) {} - bool start_map_value() { - if (++m_times == 2) return false; - return true; - } - std::size_t& m_times; -}; - -TEST(visitor, return_false_start_map_value) -{ - std::size_t times = 0; - return_false_start_map_value_visitor v(times); - std::size_t off = 0; - char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(2u, times); - EXPECT_EQ(4u, off); -} - -struct return_false_end_map_value_visitor : msgpack::v2::null_visitor { - return_false_end_map_value_visitor(std::size_t& times):m_times(times) {} - bool end_map_value() { - if (++m_times == 2) return false; - return true; - } - std::size_t& m_times; -}; - -TEST(visitor, return_false_end_map_value) -{ - std::size_t times = 0; - return_false_end_map_value_visitor v(times); - std::size_t off = 0; - char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(2u, times); - EXPECT_EQ(4u, off); -} - -struct return_false_start_map_visitor : msgpack::v2::null_visitor { - bool start_map(uint32_t) { - return false; - } -}; - -TEST(visitor, return_false_start_map) -{ - return_false_start_map_visitor v; - std::size_t off = 0; - char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(0u, off); -} - -struct return_false_start_map0_visitor : msgpack::v2::null_visitor { - bool start_map(uint32_t) { - return false; - } -}; - -TEST(visitor, return_false_start_map0) -{ - return_false_start_map0_visitor v; - std::size_t off = 0; - char const data[] = { static_cast(0x80u) }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(0u, off); -} - -struct return_false_end_map_visitor : msgpack::v2::null_visitor { - bool end_map() { - return false; - } -}; - -TEST(visitor, return_false_end_map) -{ - return_false_end_map_visitor v; - std::size_t off = 0; - char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(6u, off); -} - -struct return_false_end_map0_visitor : msgpack::v2::null_visitor { - bool end_map() { - return false; - } -}; - -TEST(visitor, return_false_end_map0) -{ - return_false_end_map0_visitor v; - std::size_t off = 0; - char const data[] = { static_cast(0x80u) }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); - EXPECT_FALSE(ret); - EXPECT_EQ(0u, off); -} - - #endif // MSGPACK_DEFAULT_API_VERSION >= 1 From 347658cdc1082f78791b0b989a2dac5272706512 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Fri, 6 Apr 2018 08:15:09 +0900 Subject: [PATCH 2/4] Updated the version to 3.0.0. See https://github.com/msgpack/msgpack-c/pull/639#issuecomment-353786498 So I updated the version to 3.0.0. In the version 2.x, it keeps the original behavior. --- .travis.yml | 6 +- CMakeLists.txt | 2 +- appveyor.yml | 2 +- example/x3/CMakeLists.txt | 2 +- include/msgpack.hpp | 4 + include/msgpack/adaptor/adaptor_base.hpp | 1 + include/msgpack/adaptor/adaptor_base_decl.hpp | 1 + include/msgpack/adaptor/array_ref_decl.hpp | 1 + .../adaptor/boost/msgpack_variant_decl.hpp | 1 + .../adaptor/check_container_size_decl.hpp | 1 + include/msgpack/adaptor/define_decl.hpp | 1 + include/msgpack/adaptor/ext_decl.hpp | 1 + include/msgpack/adaptor/fixint_decl.hpp | 1 + include/msgpack/adaptor/int_decl.hpp | 1 + include/msgpack/adaptor/map_decl.hpp | 1 + .../msgpack/adaptor/msgpack_tuple_decl.hpp | 1 + include/msgpack/adaptor/nil_decl.hpp | 1 + include/msgpack/adaptor/raw_decl.hpp | 1 + .../msgpack/adaptor/size_equal_only_decl.hpp | 1 + include/msgpack/adaptor/v4raw_decl.hpp | 1 + include/msgpack/cpp_config_decl.hpp | 1 + include/msgpack/create_object_visitor.hpp | 17 + .../msgpack/create_object_visitor_decl.hpp | 16 + include/msgpack/fbuffer_decl.hpp | 1 + include/msgpack/iterator_decl.hpp | 3 +- include/msgpack/meta_decl.hpp | 1 + include/msgpack/null_visitor.hpp | 17 + include/msgpack/null_visitor_decl.hpp | 16 + include/msgpack/object_decl.hpp | 1 + include/msgpack/object_fwd.hpp | 1 + include/msgpack/object_fwd_decl.hpp | 1 + include/msgpack/pack_decl.hpp | 1 + include/msgpack/parse.hpp | 18 + include/msgpack/parse_decl.hpp | 16 + include/msgpack/parse_return.hpp | 1 + include/msgpack/sbuffer_decl.hpp | 1 + include/msgpack/unpack.hpp | 2 +- include/msgpack/unpack_decl.hpp | 1 + include/msgpack/v2/create_object_visitor.hpp | 1 + .../msgpack/v2/create_object_visitor_decl.hpp | 33 + include/msgpack/v2/null_visitor.hpp | 3 +- include/msgpack/v2/null_visitor_decl.hpp | 29 + include/msgpack/v2/pack_decl.hpp | 1 + include/msgpack/v2/parse.hpp | 21 +- include/msgpack/v2/parse_decl.hpp | 79 ++ include/msgpack/v2/unpack.hpp | 61 +- include/msgpack/v2/unpack_decl.hpp | 72 +- include/msgpack/v2/x3_parse.hpp | 1 + include/msgpack/v2/x3_parse_decl.hpp | 36 + include/msgpack/v2/x3_unpack.hpp | 25 +- include/msgpack/v2/x3_unpack_decl.hpp | 71 ++ include/msgpack/v3/adaptor/adaptor_base.hpp | 58 ++ .../msgpack/v3/adaptor/adaptor_base_decl.hpp | 52 ++ include/msgpack/v3/adaptor/array_ref_decl.hpp | 36 + .../v3/adaptor/boost/msgpack_variant_decl.hpp | 42 ++ .../v3/adaptor/check_container_size_decl.hpp | 39 + include/msgpack/v3/adaptor/define_decl.hpp | 23 + .../detail/cpp03_define_array_decl.hpp | 31 + .../adaptor/detail/cpp03_define_map_decl.hpp | 31 + .../detail/cpp03_msgpack_tuple_decl.hpp | 43 ++ .../detail/cpp11_define_array_decl.hpp | 32 + .../adaptor/detail/cpp11_define_map_decl.hpp | 31 + .../detail/cpp11_msgpack_tuple_decl.hpp | 59 ++ include/msgpack/v3/adaptor/ext_decl.hpp | 34 + include/msgpack/v3/adaptor/fixint_decl.hpp | 43 ++ include/msgpack/v3/adaptor/int_decl.hpp | 54 ++ include/msgpack/v3/adaptor/map_decl.hpp | 33 + .../msgpack/v3/adaptor/msgpack_tuple_decl.hpp | 21 + include/msgpack/v3/adaptor/nil_decl.hpp | 42 ++ include/msgpack/v3/adaptor/raw_decl.hpp | 33 + .../v3/adaptor/size_equal_only_decl.hpp | 35 + include/msgpack/v3/adaptor/v4raw_decl.hpp | 34 + include/msgpack/v3/cpp_config_decl.hpp | 84 +++ .../msgpack/v3/create_object_visitor_decl.hpp | 33 + include/msgpack/v3/detail/cpp03_zone_decl.hpp | 31 + include/msgpack/v3/detail/cpp11_zone_decl.hpp | 31 + include/msgpack/v3/fbuffer_decl.hpp | 32 + include/msgpack/v3/iterator_decl.hpp | 33 + include/msgpack/v3/meta_decl.hpp | 50 ++ include/msgpack/v3/null_visitor_decl.hpp | 29 + include/msgpack/v3/object_decl.hpp | 49 ++ include/msgpack/v3/object_fwd.hpp | 70 ++ include/msgpack/v3/object_fwd_decl.hpp | 75 ++ include/msgpack/v3/pack_decl.hpp | 55 ++ include/msgpack/v3/parse.hpp | 676 ++++++++++++++++++ include/msgpack/v3/parse_decl.hpp | 49 ++ include/msgpack/v3/parse_return.hpp | 35 + include/msgpack/v3/sbuffer_decl.hpp | 33 + include/msgpack/v3/unpack.hpp | 192 +++++ include/msgpack/v3/unpack_decl.hpp | 304 ++++++++ include/msgpack/v3/vrefbuffer_decl.hpp | 29 + include/msgpack/v3/x3_parse_decl.hpp | 34 + include/msgpack/v3/x3_unpack.hpp | 97 +++ include/msgpack/v3/x3_unpack_decl.hpp | 65 ++ include/msgpack/v3/zbuffer_decl.hpp | 29 + include/msgpack/v3/zone_decl.hpp | 21 + include/msgpack/version_master.h | 6 +- include/msgpack/versioning.hpp | 4 +- include/msgpack/vrefbuffer_decl.hpp | 1 + include/msgpack/x3_parse.hpp | 15 + include/msgpack/x3_parse_decl.hpp | 16 + include/msgpack/x3_unpack.hpp | 16 + include/msgpack/x3_unpack_decl.hpp | 16 + include/msgpack/zbuffer_decl.hpp | 1 + include/msgpack/zone_decl.hpp | 1 + src/unpack.c | 6 +- test/msgpack_x3_parse.cpp | 12 +- test/pack_unpack.cpp | 12 + test/pack_unpack_c.cpp | 2 +- test/visitor.cpp | 356 ++++++++- 110 files changed, 3862 insertions(+), 123 deletions(-) create mode 100644 include/msgpack/create_object_visitor.hpp create mode 100644 include/msgpack/create_object_visitor_decl.hpp create mode 100644 include/msgpack/null_visitor.hpp create mode 100644 include/msgpack/null_visitor_decl.hpp create mode 100644 include/msgpack/parse.hpp create mode 100644 include/msgpack/parse_decl.hpp create mode 100644 include/msgpack/v2/create_object_visitor_decl.hpp create mode 100644 include/msgpack/v2/null_visitor_decl.hpp create mode 100644 include/msgpack/v2/parse_decl.hpp create mode 100644 include/msgpack/v2/x3_parse_decl.hpp create mode 100644 include/msgpack/v2/x3_unpack_decl.hpp create mode 100644 include/msgpack/v3/adaptor/adaptor_base.hpp create mode 100644 include/msgpack/v3/adaptor/adaptor_base_decl.hpp create mode 100644 include/msgpack/v3/adaptor/array_ref_decl.hpp create mode 100644 include/msgpack/v3/adaptor/boost/msgpack_variant_decl.hpp create mode 100644 include/msgpack/v3/adaptor/check_container_size_decl.hpp create mode 100644 include/msgpack/v3/adaptor/define_decl.hpp create mode 100644 include/msgpack/v3/adaptor/detail/cpp03_define_array_decl.hpp create mode 100644 include/msgpack/v3/adaptor/detail/cpp03_define_map_decl.hpp create mode 100644 include/msgpack/v3/adaptor/detail/cpp03_msgpack_tuple_decl.hpp create mode 100644 include/msgpack/v3/adaptor/detail/cpp11_define_array_decl.hpp create mode 100644 include/msgpack/v3/adaptor/detail/cpp11_define_map_decl.hpp create mode 100644 include/msgpack/v3/adaptor/detail/cpp11_msgpack_tuple_decl.hpp create mode 100644 include/msgpack/v3/adaptor/ext_decl.hpp create mode 100644 include/msgpack/v3/adaptor/fixint_decl.hpp create mode 100644 include/msgpack/v3/adaptor/int_decl.hpp create mode 100644 include/msgpack/v3/adaptor/map_decl.hpp create mode 100644 include/msgpack/v3/adaptor/msgpack_tuple_decl.hpp create mode 100644 include/msgpack/v3/adaptor/nil_decl.hpp create mode 100644 include/msgpack/v3/adaptor/raw_decl.hpp create mode 100644 include/msgpack/v3/adaptor/size_equal_only_decl.hpp create mode 100644 include/msgpack/v3/adaptor/v4raw_decl.hpp create mode 100644 include/msgpack/v3/cpp_config_decl.hpp create mode 100644 include/msgpack/v3/create_object_visitor_decl.hpp create mode 100644 include/msgpack/v3/detail/cpp03_zone_decl.hpp create mode 100644 include/msgpack/v3/detail/cpp11_zone_decl.hpp create mode 100644 include/msgpack/v3/fbuffer_decl.hpp create mode 100644 include/msgpack/v3/iterator_decl.hpp create mode 100644 include/msgpack/v3/meta_decl.hpp create mode 100644 include/msgpack/v3/null_visitor_decl.hpp create mode 100644 include/msgpack/v3/object_decl.hpp create mode 100644 include/msgpack/v3/object_fwd.hpp create mode 100644 include/msgpack/v3/object_fwd_decl.hpp create mode 100644 include/msgpack/v3/pack_decl.hpp create mode 100644 include/msgpack/v3/parse.hpp create mode 100644 include/msgpack/v3/parse_decl.hpp create mode 100644 include/msgpack/v3/parse_return.hpp create mode 100644 include/msgpack/v3/sbuffer_decl.hpp create mode 100644 include/msgpack/v3/unpack.hpp create mode 100644 include/msgpack/v3/unpack_decl.hpp create mode 100644 include/msgpack/v3/vrefbuffer_decl.hpp create mode 100644 include/msgpack/v3/x3_parse_decl.hpp create mode 100644 include/msgpack/v3/x3_unpack.hpp create mode 100644 include/msgpack/v3/x3_unpack_decl.hpp create mode 100644 include/msgpack/v3/zbuffer_decl.hpp create mode 100644 include/msgpack/v3/zone_decl.hpp create mode 100644 include/msgpack/x3_parse.hpp create mode 100644 include/msgpack/x3_parse_decl.hpp create mode 100644 include/msgpack/x3_unpack.hpp create mode 100644 include/msgpack/x3_unpack_decl.hpp diff --git a/.travis.yml b/.travis.yml index b02c56f9..17e89bab 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,7 +39,7 @@ matrix: env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="1" - os: osx compiler: clang - env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2" + env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="3" - os: osx compiler: clang env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2" @@ -87,7 +87,7 @@ matrix: - libc6-dbg - os: linux compiler: clang - env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2" X3_PARSE="ON" + env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="3" X3_PARSE="ON" addons: apt: sources: @@ -140,7 +140,7 @@ matrix: - libc6-dbg - os: linux compiler: gcc - env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="32" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="2" X3_PARSE="ON" + env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="32" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="3" X3_PARSE="ON" addons: apt: sources: diff --git a/CMakeLists.txt b/CMakeLists.txt index 000e9ab5..8d3c50de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,7 +124,7 @@ ENDIF () IF (MSGPACK_DEFAULT_API_VERSION) SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=${MSGPACK_DEFAULT_API_VERSION} ${CMAKE_CXX_FLAGS}") ELSE () - SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=2 ${CMAKE_CXX_FLAGS}") + SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=3 ${CMAKE_CXX_FLAGS}") ENDIF () FILE (GLOB_RECURSE PREDEF_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/*.h) diff --git a/appveyor.yml b/appveyor.yml index 8a196c36..6375ef48 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: 2.1.5.{build} +version: 3.0.0.{build} image: - Visual Studio 2015 diff --git a/example/x3/CMakeLists.txt b/example/x3/CMakeLists.txt index c6368bf8..05725fb1 100644 --- a/example/x3/CMakeLists.txt +++ b/example/x3/CMakeLists.txt @@ -1,4 +1,4 @@ -IF (MSGPACK_USE_X3_PARSE) +IF (MSGPACK_USE_X3_PARSE AND MSGPACK_DEFAULT_API_VERSION VERSION_GREATER 1) INCLUDE_DIRECTORIES ( ../include ) diff --git a/include/msgpack.hpp b/include/msgpack.hpp index c793ab6b..74ae1f66 100644 --- a/include/msgpack.hpp +++ b/include/msgpack.hpp @@ -11,7 +11,11 @@ #include "msgpack/iterator.hpp" #include "msgpack/zone.hpp" #include "msgpack/pack.hpp" +#include "msgpack/null_visitor.hpp" +#include "msgpack/parse.hpp" #include "msgpack/unpack.hpp" +#include "msgpack/x3_parse.hpp" +#include "msgpack/x3_unpack.hpp" #include "msgpack/sbuffer.hpp" #include "msgpack/vrefbuffer.hpp" #include "msgpack/version.hpp" diff --git a/include/msgpack/adaptor/adaptor_base.hpp b/include/msgpack/adaptor/adaptor_base.hpp index 88257ed5..4cf4fd44 100644 --- a/include/msgpack/adaptor/adaptor_base.hpp +++ b/include/msgpack/adaptor/adaptor_base.hpp @@ -14,5 +14,6 @@ #include "msgpack/v1/adaptor/adaptor_base.hpp" #include "msgpack/v2/adaptor/adaptor_base.hpp" +#include "msgpack/v3/adaptor/adaptor_base.hpp" #endif // MSGPACK_ADAPTOR_BASE_HPP diff --git a/include/msgpack/adaptor/adaptor_base_decl.hpp b/include/msgpack/adaptor/adaptor_base_decl.hpp index b1526ca5..753cfb91 100644 --- a/include/msgpack/adaptor/adaptor_base_decl.hpp +++ b/include/msgpack/adaptor/adaptor_base_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/adaptor_base_decl.hpp" #include "msgpack/v2/adaptor/adaptor_base_decl.hpp" +#include "msgpack/v3/adaptor/adaptor_base_decl.hpp" #endif // MSGPACK_ADAPTOR_BASE_DECL_HPP diff --git a/include/msgpack/adaptor/array_ref_decl.hpp b/include/msgpack/adaptor/array_ref_decl.hpp index 2cb1ace7..43eaa98d 100644 --- a/include/msgpack/adaptor/array_ref_decl.hpp +++ b/include/msgpack/adaptor/array_ref_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/array_ref_decl.hpp" #include "msgpack/v2/adaptor/array_ref_decl.hpp" +#include "msgpack/v3/adaptor/array_ref_decl.hpp" #endif // MSGPACK_TYPE_ARRAY_REF_DECL_HPP diff --git a/include/msgpack/adaptor/boost/msgpack_variant_decl.hpp b/include/msgpack/adaptor/boost/msgpack_variant_decl.hpp index 64bf98f1..ada6c913 100644 --- a/include/msgpack/adaptor/boost/msgpack_variant_decl.hpp +++ b/include/msgpack/adaptor/boost/msgpack_variant_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/boost/msgpack_variant_decl.hpp" #include "msgpack/v2/adaptor/boost/msgpack_variant_decl.hpp" +#include "msgpack/v3/adaptor/boost/msgpack_variant_decl.hpp" #endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_DECL_HPP diff --git a/include/msgpack/adaptor/check_container_size_decl.hpp b/include/msgpack/adaptor/check_container_size_decl.hpp index 73518226..e61334af 100644 --- a/include/msgpack/adaptor/check_container_size_decl.hpp +++ b/include/msgpack/adaptor/check_container_size_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/check_container_size_decl.hpp" #include "msgpack/v2/adaptor/check_container_size_decl.hpp" +#include "msgpack/v3/adaptor/check_container_size_decl.hpp" #endif // MSGPACK_CHECK_CONTAINER_SIZE_DECL_HPP diff --git a/include/msgpack/adaptor/define_decl.hpp b/include/msgpack/adaptor/define_decl.hpp index d25363cc..eff12bd9 100644 --- a/include/msgpack/adaptor/define_decl.hpp +++ b/include/msgpack/adaptor/define_decl.hpp @@ -139,5 +139,6 @@ #include "msgpack/v1/adaptor/define_decl.hpp" #include "msgpack/v2/adaptor/define_decl.hpp" +#include "msgpack/v3/adaptor/define_decl.hpp" #endif // MSGPACK_DEFINE_DECL_HPP diff --git a/include/msgpack/adaptor/ext_decl.hpp b/include/msgpack/adaptor/ext_decl.hpp index 29bfd617..7da30427 100644 --- a/include/msgpack/adaptor/ext_decl.hpp +++ b/include/msgpack/adaptor/ext_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/ext_decl.hpp" #include "msgpack/v2/adaptor/ext_decl.hpp" +#include "msgpack/v3/adaptor/ext_decl.hpp" #endif // MSGPACK_TYPE_EXT_DECL_HPP diff --git a/include/msgpack/adaptor/fixint_decl.hpp b/include/msgpack/adaptor/fixint_decl.hpp index 999fdd61..3e73ded2 100644 --- a/include/msgpack/adaptor/fixint_decl.hpp +++ b/include/msgpack/adaptor/fixint_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/fixint_decl.hpp" #include "msgpack/v2/adaptor/fixint_decl.hpp" +#include "msgpack/v3/adaptor/fixint_decl.hpp" #endif // MSGPACK_TYPE_FIXINT_DECL_HPP diff --git a/include/msgpack/adaptor/int_decl.hpp b/include/msgpack/adaptor/int_decl.hpp index cb5e3498..f68ef8bc 100644 --- a/include/msgpack/adaptor/int_decl.hpp +++ b/include/msgpack/adaptor/int_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/int_decl.hpp" #include "msgpack/v2/adaptor/int_decl.hpp" +#include "msgpack/v3/adaptor/int_decl.hpp" #endif // MSGPACK_TYPE_INT_DECL_HPP diff --git a/include/msgpack/adaptor/map_decl.hpp b/include/msgpack/adaptor/map_decl.hpp index 2ce545f7..757688ec 100644 --- a/include/msgpack/adaptor/map_decl.hpp +++ b/include/msgpack/adaptor/map_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/map_decl.hpp" #include "msgpack/v2/adaptor/map_decl.hpp" +#include "msgpack/v3/adaptor/map_decl.hpp" #endif // MSGPACK_TYPE_MAP_DECL_HPP diff --git a/include/msgpack/adaptor/msgpack_tuple_decl.hpp b/include/msgpack/adaptor/msgpack_tuple_decl.hpp index 2892b14f..0c70b226 100644 --- a/include/msgpack/adaptor/msgpack_tuple_decl.hpp +++ b/include/msgpack/adaptor/msgpack_tuple_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/msgpack_tuple_decl.hpp" #include "msgpack/v2/adaptor/msgpack_tuple_decl.hpp" +#include "msgpack/v3/adaptor/msgpack_tuple_decl.hpp" #endif // MSGPACK_MSGPACK_TUPLE_DECL_HPP diff --git a/include/msgpack/adaptor/nil_decl.hpp b/include/msgpack/adaptor/nil_decl.hpp index a5bdf436..d45f45bb 100644 --- a/include/msgpack/adaptor/nil_decl.hpp +++ b/include/msgpack/adaptor/nil_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/nil_decl.hpp" #include "msgpack/v2/adaptor/nil_decl.hpp" +#include "msgpack/v3/adaptor/nil_decl.hpp" #endif // MSGPACK_TYPE_NIL_DECL_HPP diff --git a/include/msgpack/adaptor/raw_decl.hpp b/include/msgpack/adaptor/raw_decl.hpp index eb3b96b8..60777bdd 100644 --- a/include/msgpack/adaptor/raw_decl.hpp +++ b/include/msgpack/adaptor/raw_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/raw_decl.hpp" #include "msgpack/v2/adaptor/raw_decl.hpp" +#include "msgpack/v3/adaptor/raw_decl.hpp" #endif // MSGPACK_TYPE_RAW_DECL_HPP diff --git a/include/msgpack/adaptor/size_equal_only_decl.hpp b/include/msgpack/adaptor/size_equal_only_decl.hpp index 3735d16d..d3e5dcf7 100644 --- a/include/msgpack/adaptor/size_equal_only_decl.hpp +++ b/include/msgpack/adaptor/size_equal_only_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/size_equal_only_decl.hpp" #include "msgpack/v2/adaptor/size_equal_only_decl.hpp" +#include "msgpack/v3/adaptor/size_equal_only_decl.hpp" #endif // MSGPACK_TYPE_SIZE_EQUAL_ONLY_DECL_HPP diff --git a/include/msgpack/adaptor/v4raw_decl.hpp b/include/msgpack/adaptor/v4raw_decl.hpp index 5e591df0..98935183 100644 --- a/include/msgpack/adaptor/v4raw_decl.hpp +++ b/include/msgpack/adaptor/v4raw_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/adaptor/v4raw_decl.hpp" #include "msgpack/v2/adaptor/v4raw_decl.hpp" +#include "msgpack/v3/adaptor/v4raw_decl.hpp" #endif // MSGPACK_TYPE_V4RAW_DECL_HPP diff --git a/include/msgpack/cpp_config_decl.hpp b/include/msgpack/cpp_config_decl.hpp index 70179c09..332e2a81 100644 --- a/include/msgpack/cpp_config_decl.hpp +++ b/include/msgpack/cpp_config_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/cpp_config_decl.hpp" #include "msgpack/v2/cpp_config_decl.hpp" +#include "msgpack/v3/cpp_config_decl.hpp" #endif // MSGPACK_CPP_CONFIG_DECL_HPP diff --git a/include/msgpack/create_object_visitor.hpp b/include/msgpack/create_object_visitor.hpp new file mode 100644 index 00000000..40d69974 --- /dev/null +++ b/include/msgpack/create_object_visitor.hpp @@ -0,0 +1,17 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_CREATE_OBJECT_VISITOR_HPP +#define MSGPACK_CREATE_OBJECT_VISITOR_HPP + +#include "msgpack/create_object_visitor_decl.hpp" + +#include "msgpack/v2/create_object_visitor.hpp" + +#endif // MSGPACK_CREATE_OBJECT_VISITOR_HPP diff --git a/include/msgpack/create_object_visitor_decl.hpp b/include/msgpack/create_object_visitor_decl.hpp new file mode 100644 index 00000000..56e81e1b --- /dev/null +++ b/include/msgpack/create_object_visitor_decl.hpp @@ -0,0 +1,16 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_CREATE_OBJECT_VISITOR_DECL_HPP +#define MSGPACK_CREATE_OBJECT_VISITOR_DECL_HPP + +#include "msgpack/v2/create_object_visitor_decl.hpp" +#include "msgpack/v3/create_object_visitor_decl.hpp" + +#endif // MSGPACK_CREATE_OBJECT_VISITOR_DECL_HPP diff --git a/include/msgpack/fbuffer_decl.hpp b/include/msgpack/fbuffer_decl.hpp index a630ed08..d1a5a6a5 100644 --- a/include/msgpack/fbuffer_decl.hpp +++ b/include/msgpack/fbuffer_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/fbuffer_decl.hpp" #include "msgpack/v2/fbuffer_decl.hpp" +#include "msgpack/v3/fbuffer_decl.hpp" #endif // MSGPACK_FBUFFER_DECL_HPP diff --git a/include/msgpack/iterator_decl.hpp b/include/msgpack/iterator_decl.hpp index 8835e58e..5bf28cb1 100644 --- a/include/msgpack/iterator_decl.hpp +++ b/include/msgpack/iterator_decl.hpp @@ -13,5 +13,6 @@ #include #include +#include -#endif // MSGPACK_V1_ITERATOR_DECL_HPP +#endif // MSGPACK_ITERATOR_DECL_HPP diff --git a/include/msgpack/meta_decl.hpp b/include/msgpack/meta_decl.hpp index c574c13f..54380f8c 100644 --- a/include/msgpack/meta_decl.hpp +++ b/include/msgpack/meta_decl.hpp @@ -13,5 +13,6 @@ #include "msgpack/v1/meta_decl.hpp" #include "msgpack/v2/meta_decl.hpp" +#include "msgpack/v3/meta_decl.hpp" #endif // MSGPACK_META_DECL_HPP diff --git a/include/msgpack/null_visitor.hpp b/include/msgpack/null_visitor.hpp new file mode 100644 index 00000000..523d0dd1 --- /dev/null +++ b/include/msgpack/null_visitor.hpp @@ -0,0 +1,17 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_NULL_VISITOR_HPP +#define MSGPACK_NULL_VISITOR_HPP + +#include "msgpack/null_visitor_decl.hpp" + +#include "msgpack/v2/null_visitor.hpp" + +#endif // MSGPACK_NULL_VISITOR_HPP diff --git a/include/msgpack/null_visitor_decl.hpp b/include/msgpack/null_visitor_decl.hpp new file mode 100644 index 00000000..b398ed24 --- /dev/null +++ b/include/msgpack/null_visitor_decl.hpp @@ -0,0 +1,16 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_NULL_VISITOR_DECL_HPP +#define MSGPACK_NULL_VISITOR_DECL_HPP + +#include "msgpack/v2/null_visitor_decl.hpp" +#include "msgpack/v3/null_visitor_decl.hpp" + +#endif // MSGPACK_NULL_VISITOR_DECL_HPP diff --git a/include/msgpack/object_decl.hpp b/include/msgpack/object_decl.hpp index d1b46345..7aab1288 100644 --- a/include/msgpack/object_decl.hpp +++ b/include/msgpack/object_decl.hpp @@ -13,5 +13,6 @@ #include "msgpack/v1/object_decl.hpp" #include "msgpack/v2/object_decl.hpp" +#include "msgpack/v3/object_decl.hpp" #endif // MSGPACK_OBJECT_DECL_HPP diff --git a/include/msgpack/object_fwd.hpp b/include/msgpack/object_fwd.hpp index 17a7c6e4..515df9dc 100644 --- a/include/msgpack/object_fwd.hpp +++ b/include/msgpack/object_fwd.hpp @@ -15,5 +15,6 @@ #include "msgpack/v1/object_fwd.hpp" #include "msgpack/v2/object_fwd.hpp" +#include "msgpack/v3/object_fwd.hpp" #endif // MSGPACK_OBJECT_FWD_HPP diff --git a/include/msgpack/object_fwd_decl.hpp b/include/msgpack/object_fwd_decl.hpp index 70e10a5c..c933c345 100644 --- a/include/msgpack/object_fwd_decl.hpp +++ b/include/msgpack/object_fwd_decl.hpp @@ -13,5 +13,6 @@ #include "msgpack/v1/object_fwd_decl.hpp" #include "msgpack/v2/object_fwd_decl.hpp" +#include "msgpack/v3/object_fwd_decl.hpp" #endif // MSGPACK_OBJECT_FWD_DECL_HPP diff --git a/include/msgpack/pack_decl.hpp b/include/msgpack/pack_decl.hpp index 39ffa772..5aaec94a 100644 --- a/include/msgpack/pack_decl.hpp +++ b/include/msgpack/pack_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/pack_decl.hpp" #include "msgpack/v2/pack_decl.hpp" +#include "msgpack/v3/pack_decl.hpp" #endif // MSGPACK_PACK_DECL_HPP diff --git a/include/msgpack/parse.hpp b/include/msgpack/parse.hpp new file mode 100644 index 00000000..90e14027 --- /dev/null +++ b/include/msgpack/parse.hpp @@ -0,0 +1,18 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_PARSE_HPP +#define MSGPACK_PARSE_HPP + +#include "msgpack/parse_decl.hpp" + +#include "msgpack/v2/parse.hpp" +#include "msgpack/v3/parse.hpp" + +#endif // MSGPACK_PARSE_HPP diff --git a/include/msgpack/parse_decl.hpp b/include/msgpack/parse_decl.hpp new file mode 100644 index 00000000..381aa1a4 --- /dev/null +++ b/include/msgpack/parse_decl.hpp @@ -0,0 +1,16 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_PARSE_DECL_HPP +#define MSGPACK_PARSE_DECL_HPP + +#include "msgpack/v2/parse_decl.hpp" +#include "msgpack/v3/parse_decl.hpp" + +#endif // MSGPACK_PARSE_DECL_HPP diff --git a/include/msgpack/parse_return.hpp b/include/msgpack/parse_return.hpp index 33ddcd7b..c06d1891 100644 --- a/include/msgpack/parse_return.hpp +++ b/include/msgpack/parse_return.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/parse_return.hpp" #include "msgpack/v2/parse_return.hpp" +#include "msgpack/v3/parse_return.hpp" #endif // MSGPACK_PARSE_RETURN_HPP diff --git a/include/msgpack/sbuffer_decl.hpp b/include/msgpack/sbuffer_decl.hpp index 985ed404..58efec46 100644 --- a/include/msgpack/sbuffer_decl.hpp +++ b/include/msgpack/sbuffer_decl.hpp @@ -12,6 +12,7 @@ #include "msgpack/v1/sbuffer_decl.hpp" #include "msgpack/v2/sbuffer_decl.hpp" +#include "msgpack/v3/sbuffer_decl.hpp" #endif // MSGPACK_SBUFFER_DECL_HPP diff --git a/include/msgpack/unpack.hpp b/include/msgpack/unpack.hpp index 7ea44086..d1e42929 100644 --- a/include/msgpack/unpack.hpp +++ b/include/msgpack/unpack.hpp @@ -14,6 +14,6 @@ #include "msgpack/v1/unpack.hpp" #include "msgpack/v2/unpack.hpp" -#include "msgpack/v2/x3_unpack.hpp" +#include "msgpack/v3/unpack.hpp" #endif // MSGPACK_UNPACK_HPP diff --git a/include/msgpack/unpack_decl.hpp b/include/msgpack/unpack_decl.hpp index d3b11746..69a751d0 100644 --- a/include/msgpack/unpack_decl.hpp +++ b/include/msgpack/unpack_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/unpack_decl.hpp" #include "msgpack/v2/unpack_decl.hpp" +#include "msgpack/v3/unpack_decl.hpp" #endif // MSGPACK_UNPACK_DECL_HPP diff --git a/include/msgpack/v2/create_object_visitor.hpp b/include/msgpack/v2/create_object_visitor.hpp index 9868a994..78c47ea8 100644 --- a/include/msgpack/v2/create_object_visitor.hpp +++ b/include/msgpack/v2/create_object_visitor.hpp @@ -12,6 +12,7 @@ #include "msgpack/unpack_decl.hpp" #include "msgpack/unpack_exception.hpp" +#include "msgpack/v2/create_object_visitor_decl.hpp" #include "msgpack/v2/null_visitor.hpp" namespace msgpack { diff --git a/include/msgpack/v2/create_object_visitor_decl.hpp b/include/msgpack/v2/create_object_visitor_decl.hpp new file mode 100644 index 00000000..c6dc84f8 --- /dev/null +++ b/include/msgpack/v2/create_object_visitor_decl.hpp @@ -0,0 +1,33 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2017 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V2_CREATE_OBJECT_VISITOR_DECL_HPP +#define MSGPACK_V2_CREATE_OBJECT_VISITOR_DECL_HPP + +#include "msgpack/versioning.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v2) { +/// @endcond + +namespace detail { + +class create_object_visitor; + +} // detail + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v2) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V2_CREATE_OBJECT_VISITOR_DECL_HPP diff --git a/include/msgpack/v2/null_visitor.hpp b/include/msgpack/v2/null_visitor.hpp index 0694839d..c9a1fdb9 100644 --- a/include/msgpack/v2/null_visitor.hpp +++ b/include/msgpack/v2/null_visitor.hpp @@ -10,8 +10,7 @@ #ifndef MSGPACK_V2_NULL_VISITOR_HPP #define MSGPACK_V2_NULL_VISITOR_HPP -#include "msgpack/versioning.hpp" -#include "msgpack/cpp_config.hpp" +#include "msgpack/v2/null_visitor_decl.hpp" namespace msgpack { diff --git a/include/msgpack/v2/null_visitor_decl.hpp b/include/msgpack/v2/null_visitor_decl.hpp new file mode 100644 index 00000000..58c52a01 --- /dev/null +++ b/include/msgpack/v2/null_visitor_decl.hpp @@ -0,0 +1,29 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V2_NULL_VISITOR_DECL_HPP +#define MSGPACK_V2_NULL_VISITOR_DECL_HPP + +#include "msgpack/versioning.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v2) { +/// @endcond + +struct null_visitor; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v2) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V2_NULL_VISITOR_DECL_HPP diff --git a/include/msgpack/v2/pack_decl.hpp b/include/msgpack/v2/pack_decl.hpp index a05091c9..8f668dd0 100644 --- a/include/msgpack/v2/pack_decl.hpp +++ b/include/msgpack/v2/pack_decl.hpp @@ -22,6 +22,7 @@ using v1::packer; using v1::pack; + #if MSGPACK_ENDIAN_LITTLE_BYTE using v1::take8_8; diff --git a/include/msgpack/v2/parse.hpp b/include/msgpack/v2/parse.hpp index 345dc80c..becbed45 100644 --- a/include/msgpack/v2/parse.hpp +++ b/include/msgpack/v2/parse.hpp @@ -10,8 +10,14 @@ #ifndef MSGPACK_V2_PARSE_HPP #define MSGPACK_V2_PARSE_HPP +#if MSGPACK_DEFAULT_API_VERSION >= 2 + +#include + +#include "msgpack/unpack_define.h" +#include "msgpack/parse_return.hpp" +#include "msgpack/unpack_exception.hpp" #include "msgpack/unpack_decl.hpp" -#include "msgpack/v2/create_object_visitor.hpp" namespace msgpack { @@ -21,6 +27,10 @@ MSGPACK_API_VERSION_NAMESPACE(v2) { namespace detail { +using v1::detail::fix_tag; +using v1::detail::value; +using v1::detail::load; + template class context { public: @@ -998,23 +1008,23 @@ inline void parser::remove_nonparsed_buffer template inline bool parse(const char* data, size_t len, size_t& off, Visitor& v) { - parse_return ret = detail::parse_imp(data, len, off, v); + parse_return ret = msgpack::detail::parse_imp(data, len, off, v); return ret == PARSE_SUCCESS || ret == PARSE_EXTRA_BYTES; } template inline bool parse(const char* data, size_t len, Visitor& v) { std::size_t off = 0; - return parse(data, len, off, v); + return msgpack::parse(data, len, off, v); } namespace detail { template -struct parse_helper : context > { +struct parse_helper : detail::context > { parse_helper(Visitor& v):m_visitor(v) {} parse_return execute(const char* data, std::size_t len, std::size_t& off) { - return context >::execute(data, len, off); + return detail::context >::execute(data, len, off); } Visitor& visitor() const { return m_visitor; } Visitor& m_visitor; @@ -1057,5 +1067,6 @@ parse_imp(const char* data, size_t len, size_t& off, Visitor& v) { } // namespace msgpack +#endif // MSGPACK_DEFAULT_API_VERSION >= 2 #endif // MSGPACK_V2_PARSE_HPP diff --git a/include/msgpack/v2/parse_decl.hpp b/include/msgpack/v2/parse_decl.hpp new file mode 100644 index 00000000..ba221765 --- /dev/null +++ b/include/msgpack/v2/parse_decl.hpp @@ -0,0 +1,79 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V2_PARSE_DECL_HPP +#define MSGPACK_V2_PARSE_DECL_HPP + +#include "msgpack/parse_return.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v2) { +/// @endcond + +namespace detail { + +template +class context; + +} // detail + + +/// Parsing class for a stream deserialization. + +template +class parser; + + +/// Unpack msgpack formatted data via a visitor +/** + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param off The offset position of the buffer. It is read and overwritten. + * @param v The visitor that satisfies visitor concept. https://github.com/msgpack/msgpack-c/wiki/v2_0_cpp_visitor#visitor-concept + * + * @return if unpacking process finishs without error then return true, otherwise return false. + * + */ +template +bool parse(const char* data, size_t len, size_t& off, Visitor& v); + + +/// Unpack msgpack formatted data via a visitor +/** + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param v The visitor that satisfies visitor concept. https://github.com/msgpack/msgpack-c/wiki/v2_0_cpp_visitor#visitor-concept + * + * @return if unpacking process finishs without error then return true, otherwise return false. + * + */ +template +bool parse(const char* data, size_t len, Visitor& v); + +namespace detail { + +template +struct parse_helper; + +template +inline parse_return +parse_imp(const char* data, size_t len, size_t& off, Visitor& v); + +} // detail + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v2) +/// @endcond + +} // namespace msgpack + + +#endif // MSGPACK_V2_PARSE_DECL_HPP diff --git a/include/msgpack/v2/unpack.hpp b/include/msgpack/v2/unpack.hpp index 56560c5b..2cf80846 100644 --- a/include/msgpack/v2/unpack.hpp +++ b/include/msgpack/v2/unpack.hpp @@ -10,9 +10,11 @@ #ifndef MSGPACK_V2_UNPACK_HPP #define MSGPACK_V2_UNPACK_HPP +#if MSGPACK_DEFAULT_API_VERSION >= 2 + #include "msgpack/unpack_decl.hpp" -#include "msgpack/v2/create_object_visitor.hpp" -#include "msgpack/v2/parse.hpp" +#include "msgpack/parse.hpp" +#include "msgpack/create_object_visitor.hpp" namespace msgpack { @@ -34,10 +36,10 @@ class unpacker : public parser, public detail::create_object_visitor { typedef parser parser_t; public: - unpacker(unpack_reference_func f = &unpacker::default_reference_func, + unpacker(msgpack::v2::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()) + msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()) :parser_t(m_finalizer, initial_buffer_size), detail::create_object_visitor(f, user_data, limit), m_z(new msgpack::zone), @@ -145,8 +147,8 @@ inline bool unpacker::flush_zone() inline 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 + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit ) { msgpack::object obj; @@ -171,8 +173,8 @@ inline msgpack::object_handle unpack( inline msgpack::object_handle unpack( const char* data, std::size_t len, std::size_t& off, - unpack_reference_func f, void* user_data, - unpack_limit const& limit) + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit) { bool referenced; return msgpack::v2::unpack(data, len, off, referenced, f, user_data, limit); @@ -180,8 +182,8 @@ inline msgpack::object_handle unpack( inline msgpack::object_handle unpack( const char* data, std::size_t len, bool& referenced, - unpack_reference_func f, void* user_data, - unpack_limit const& limit) + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit) { std::size_t off = 0; return msgpack::v2::unpack(data, len, off, referenced, f, user_data, limit); @@ -189,8 +191,8 @@ inline msgpack::object_handle unpack( inline msgpack::object_handle unpack( const char* data, std::size_t len, - unpack_reference_func f, void* user_data, - unpack_limit const& limit) + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit) { bool referenced; std::size_t off = 0; @@ -200,8 +202,8 @@ inline msgpack::object_handle unpack( inline void unpack( msgpack::object_handle& result, const char* data, std::size_t len, std::size_t& off, bool& referenced, - unpack_reference_func f, void* user_data, - unpack_limit const& limit) + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit) { msgpack::object obj; msgpack::unique_ptr z(new msgpack::zone); @@ -230,7 +232,7 @@ inline void unpack( msgpack::object_handle& result, const char* data, std::size_t len, std::size_t& off, msgpack::v2::unpack_reference_func f, void* user_data, - unpack_limit const& limit) + msgpack::v2::unpack_limit const& limit) { bool referenced; msgpack::v2::unpack(result, data, len, off, referenced, f, user_data, limit); @@ -239,8 +241,8 @@ inline void unpack( inline void unpack( msgpack::object_handle& result, const char* data, std::size_t len, bool& referenced, - unpack_reference_func f, void* user_data, - unpack_limit const& limit) + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit) { std::size_t off = 0; msgpack::v2::unpack(result, data, len, off, referenced, f, user_data, limit); @@ -249,8 +251,8 @@ inline void unpack( inline void unpack( msgpack::object_handle& result, const char* data, std::size_t len, - unpack_reference_func f, void* user_data, - unpack_limit const& limit) + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit) { bool referenced; std::size_t off = 0; @@ -261,8 +263,8 @@ inline void unpack( inline msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, std::size_t& off, bool& referenced, - unpack_reference_func f, void* user_data, - unpack_limit const& limit) + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit) { msgpack::object obj; std::size_t noff = off; @@ -286,8 +288,8 @@ inline msgpack::object unpack( inline msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, std::size_t& off, - unpack_reference_func f, void* user_data, - unpack_limit const& limit) + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit) { bool referenced; return msgpack::v2::unpack(z, data, len, off, referenced, f, user_data, limit); @@ -296,8 +298,8 @@ inline msgpack::object unpack( inline msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, bool& referenced, - unpack_reference_func f, void* user_data, - unpack_limit const& limit) + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit) { std::size_t off = 0; return msgpack::v2::unpack(z, data, len, off, referenced, f, user_data, limit); @@ -306,8 +308,8 @@ inline msgpack::object unpack( inline msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, - unpack_reference_func f, void* user_data, - unpack_limit const& limit) + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit) { bool referenced; std::size_t off = 0; @@ -319,8 +321,8 @@ namespace detail { inline 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()) + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, + msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()) { create_object_visitor v(f, user_data, limit); v.set_zone(result_zone); @@ -341,5 +343,6 @@ unpack_imp(const char* data, std::size_t len, std::size_t& off, } // namespace msgpack +#endif // MSGPACK_DEFAULT_API_VERSION >= 2 #endif // MSGPACK_V2_UNPACK_HPP diff --git a/include/msgpack/v2/unpack_decl.hpp b/include/msgpack/v2/unpack_decl.hpp index 0e3ceda2..b592236e 100644 --- a/include/msgpack/v2/unpack_decl.hpp +++ b/include/msgpack/v2/unpack_decl.hpp @@ -100,9 +100,9 @@ class basic_unpacker; * @return object_handle that contains unpacked data. * */ -object_handle unpack( +msgpack::object_handle unpack( const char* data, std::size_t len, std::size_t& off, bool& referenced, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -116,9 +116,9 @@ object_handle unpack( * @return object_handle that contains unpacked data. * */ -object_handle unpack( +msgpack::object_handle unpack( const char* data, std::size_t len, std::size_t& off, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -132,9 +132,9 @@ object_handle unpack( * @return object_handle that contains unpacked data. * */ -object_handle unpack( +msgpack::object_handle unpack( const char* data, std::size_t len, bool& referenced, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -147,9 +147,9 @@ object_handle unpack( * @return object_handle that contains unpacked data. * */ -object_handle unpack( +msgpack::object_handle unpack( const char* data, std::size_t len, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); /// Unpack msgpack::object from a buffer. @@ -166,9 +166,9 @@ object_handle unpack( * */ void unpack( - object_handle& result, + msgpack::object_handle& result, const char* data, std::size_t len, std::size_t& off, bool& referenced, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -183,9 +183,9 @@ void unpack( * */ void unpack( - object_handle& result, + msgpack::object_handle& result, const char* data, std::size_t len, std::size_t& off, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -200,9 +200,9 @@ void unpack( * */ void unpack( - object_handle& result, + msgpack::object_handle& result, const char* data, std::size_t len, bool& referenced, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -216,9 +216,9 @@ void unpack( * */ void unpack( - object_handle& result, + msgpack::object_handle& result, const char* data, std::size_t len, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -237,7 +237,7 @@ void unpack( msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, std::size_t& off, bool& referenced, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -255,7 +255,7 @@ msgpack::object unpack( msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, std::size_t& off, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -273,7 +273,7 @@ msgpack::object unpack( msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, bool& referenced, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -290,44 +290,16 @@ msgpack::object unpack( msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); - -/// Unpack msgpack formatted data via a visitor -/** - * @param data The pointer to the buffer. - * @param len The length of the buffer. - * @param off The offset position of the buffer. It is read and overwritten. - * @param v The visitor that satisfies visitor concept. https://github.com/msgpack/msgpack-c/wiki/v2_0_cpp_visitor#visitor-concept - * - * @return if unpacking process finishs without error then return true, otherwise return false. - * - */ -template -bool parse(const char* data, size_t len, size_t& off, Visitor& v); - -/// Unpack msgpack formatted data via a visitor -/** - * @param data The pointer to the buffer. - * @param len The length of the buffer. - * @param v The visitor that satisfies visitor concept. https://github.com/msgpack/msgpack-c/wiki/v2_0_cpp_visitor#visitor-concept - * - * @return if unpacking process finishs without error then return true, otherwise return false. - * - */ -template -bool parse(const char* data, size_t len, Visitor& v); + msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); namespace detail { 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, void* user_data, - unpack_limit const& limit); + msgpack::v2::unpack_reference_func f, void* user_data, + msgpack::v2::unpack_limit const& limit); -template -parse_return -parse_imp(const char* data, size_t len, size_t& off, UnpackVisitor& v); } // detail diff --git a/include/msgpack/v2/x3_parse.hpp b/include/msgpack/v2/x3_parse.hpp index d3bc98f9..09612f58 100644 --- a/include/msgpack/v2/x3_parse.hpp +++ b/include/msgpack/v2/x3_parse.hpp @@ -17,6 +17,7 @@ #if BOOST_VERSION >= 106100 #include "msgpack/versioning.hpp" +#include "msgpack/x3_parse_decl.hpp" #if __GNUC__ >= 4 #pragma GCC diagnostic push diff --git a/include/msgpack/v2/x3_parse_decl.hpp b/include/msgpack/v2/x3_parse_decl.hpp new file mode 100644 index 00000000..d146a353 --- /dev/null +++ b/include/msgpack/v2/x3_parse_decl.hpp @@ -0,0 +1,36 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2017 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V2_X3_PARSE_DECL_HPP +#define MSGPACK_V2_X3_PARSE_DECL_HPP + +#if defined(MSGPACK_USE_X3_PARSE) + +#include "msgpack/versioning.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v2) { +/// @endcond + + +template +bool parse(Iterator&& begin, Iterator&& end, Visitor&& vis); + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v2) +/// @endcond + +} // namespace msgpack + + +#endif // defined(MSGPACK_USE_X3_PARSE) + +#endif // MSGPACK_V2_X3_PARSE_DECL_HPP diff --git a/include/msgpack/v2/x3_unpack.hpp b/include/msgpack/v2/x3_unpack.hpp index 16576ac2..54ca98ea 100644 --- a/include/msgpack/v2/x3_unpack.hpp +++ b/include/msgpack/v2/x3_unpack.hpp @@ -17,8 +17,9 @@ #if BOOST_VERSION >= 106100 #include "msgpack/versioning.hpp" -#include "msgpack/v2/create_object_visitor.hpp" -#include "msgpack/v2/x3_parse.hpp" +#include "msgpack/create_object_visitor.hpp" +#include "msgpack/x3_unpack_decl.hpp" +#include "msgpack/x3_parse.hpp" namespace msgpack { @@ -32,8 +33,8 @@ template inline void unpack_imp(Iterator&& begin, Iterator&& end, 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()) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { create_object_visitor v(f, user_data, limit); v.set_zone(result_zone); @@ -53,8 +54,8 @@ template inline msgpack::object_handle unpack( Iterator&& begin, Iterator&& end, bool& referenced, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, - unpack_limit const& limit = unpack_limit()) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { msgpack::object obj; msgpack::unique_ptr z(new msgpack::zone); @@ -67,8 +68,8 @@ inline msgpack::object_handle unpack( template inline msgpack::object_handle unpack( Iterator&& begin, Iterator&& end, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, - unpack_limit const& limit = unpack_limit()) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { bool referenced; return unpack(std::forward(begin), std::forward(end), referenced, f, user_data, limit); @@ -79,8 +80,8 @@ inline msgpack::object unpack( msgpack::zone& z, Iterator&& begin, Iterator&& end, bool& referenced, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, - unpack_limit const& limit = unpack_limit()) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { msgpack::object obj; referenced = false; @@ -93,8 +94,8 @@ template inline msgpack::object unpack( msgpack::zone& z, Iterator&& begin, Iterator&& end, - unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, - unpack_limit const& limit = unpack_limit()) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { bool referenced; return unpack( diff --git a/include/msgpack/v2/x3_unpack_decl.hpp b/include/msgpack/v2/x3_unpack_decl.hpp new file mode 100644 index 00000000..baaf71eb --- /dev/null +++ b/include/msgpack/v2/x3_unpack_decl.hpp @@ -0,0 +1,71 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V2_X3_UNPACK_DECL_HPP +#define MSGPACK_V2_X3_UNPACK_DECL_HPP + +#if defined(MSGPACK_USE_X3_PARSE) + +#include "msgpack/versioning.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v2) { +/// @endcond + +namespace detail { + +template +void +unpack_imp(Iterator&& begin, Iterator&& end, + 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()); + +} // namespace detail + +template +msgpack::object_handle unpack( + Iterator&& begin, Iterator&& end, + bool& referenced, + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, + unpack_limit const& limit = unpack_limit()); + +template +msgpack::object_handle unpack( + Iterator&& begin, Iterator&& end, + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, + unpack_limit const& limit = unpack_limit()); + +template +msgpack::object unpack( + msgpack::zone& z, + Iterator&& begin, Iterator&& end, + bool& referenced, + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, + unpack_limit const& limit = unpack_limit()); + +template +msgpack::object unpack( + msgpack::zone& z, + Iterator&& begin, Iterator&& end, + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, + unpack_limit const& limit = unpack_limit()); + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v2) +/// @endcond + +} // namespace msgpack + + +#endif // defined(MSGPACK_USE_X3_PARSE) + +#endif // MSGPACK_V2_X3_UNPACK_DECL_HPP diff --git a/include/msgpack/v3/adaptor/adaptor_base.hpp b/include/msgpack/v3/adaptor/adaptor_base.hpp new file mode 100644 index 00000000..180cca99 --- /dev/null +++ b/include/msgpack/v3/adaptor/adaptor_base.hpp @@ -0,0 +1,58 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2015-2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_ADAPTOR_BASE_HPP +#define MSGPACK_V3_ADAPTOR_BASE_HPP + +#include "msgpack/v3/adaptor/adaptor_base_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + + +namespace adaptor { + +// Adaptor functors + +template +struct convert : v2::adaptor::convert { +}; + +template +struct pack : v2::adaptor::pack { +}; + +template +struct object< + T, + Enabler, + typename msgpack::enable_if< + !msgpack::is_same::value && + !msgpack::is_array::value + >::type> + : v2::adaptor::object { +}; + +template +struct object_with_zone : v2::adaptor::object_with_zone { +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + + +#endif // MSGPACK_V3_ADAPTOR_BASE_HPP diff --git a/include/msgpack/v3/adaptor/adaptor_base_decl.hpp b/include/msgpack/v3/adaptor/adaptor_base_decl.hpp new file mode 100644 index 00000000..f339f661 --- /dev/null +++ b/include/msgpack/v3/adaptor/adaptor_base_decl.hpp @@ -0,0 +1,52 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_ADAPTOR_BASE_DECL_HPP +#define MSGPACK_V3_ADAPTOR_BASE_DECL_HPP + +#include "msgpack/v2/adaptor/adaptor_base_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::packer; + +namespace adaptor { + +// Adaptor functors + +template +struct convert; + +template +struct pack; + +template +struct object; + +template +struct object_with_zone; + +} // namespace adaptor + +// operators + +using v2::operator>>; +using v2::operator<<; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_ADAPTOR_BASE_DECL_HPP diff --git a/include/msgpack/v3/adaptor/array_ref_decl.hpp b/include/msgpack/v3/adaptor/array_ref_decl.hpp new file mode 100644 index 00000000..2d5f4124 --- /dev/null +++ b/include/msgpack/v3/adaptor/array_ref_decl.hpp @@ -0,0 +1,36 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_TYPE_ARRAY_REF_DECL_HPP +#define MSGPACK_V3_TYPE_ARRAY_REF_DECL_HPP + +#include "msgpack/v2/adaptor/array_ref_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { + +using v2::type::array_ref; + +using v2::type::make_array_ref; + + +} // namespace type + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_TYPE_ARRAY_REF_DECL_HPP diff --git a/include/msgpack/v3/adaptor/boost/msgpack_variant_decl.hpp b/include/msgpack/v3/adaptor/boost/msgpack_variant_decl.hpp new file mode 100644 index 00000000..e9cf7001 --- /dev/null +++ b/include/msgpack/v3/adaptor/boost/msgpack_variant_decl.hpp @@ -0,0 +1,42 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_TYPE_BOOST_MSGPACK_VARIANT_DECL_HPP +#define MSGPACK_V3_TYPE_BOOST_MSGPACK_VARIANT_DECL_HPP + +#if defined(MSGPACK_USE_BOOST) + +#include "msgpack/v2/adaptor/boost/msgpack_variant_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { + +using v2::type::basic_variant; +using v2::type::variant; +using v2::type::variant_ref; + +using v2::type::operator<; + +using v2::type::operator==; + +} // namespace type + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_USE_BOOST +#endif // MSGPACK_V3_TYPE_BOOST_MSGPACK_VARIANT_DECL_HPP diff --git a/include/msgpack/v3/adaptor/check_container_size_decl.hpp b/include/msgpack/v3/adaptor/check_container_size_decl.hpp new file mode 100644 index 00000000..c92050b2 --- /dev/null +++ b/include/msgpack/v3/adaptor/check_container_size_decl.hpp @@ -0,0 +1,39 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_CHECK_CONTAINER_SIZE_DECL_HPP +#define MSGPACK_V3_CHECK_CONTAINER_SIZE_DECL_HPP + +#include "msgpack/v2/adaptor/check_container_size_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::container_size_overflow; + +namespace detail { + +using v2::detail::check_container_size; + +using v2::detail::check_container_size_for_ext; + +} // namespace detail + +using v2::checked_get_container_size; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_CHECK_CONTAINER_SIZE_DECL_HPP diff --git a/include/msgpack/v3/adaptor/define_decl.hpp b/include/msgpack/v3/adaptor/define_decl.hpp new file mode 100644 index 00000000..da9062f1 --- /dev/null +++ b/include/msgpack/v3/adaptor/define_decl.hpp @@ -0,0 +1,23 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_DEFINE_DECL_HPP +#define MSGPACK_V3_DEFINE_DECL_HPP + +#include "msgpack/cpp_config.hpp" + +#if defined(MSGPACK_USE_CPP03) +#include "msgpack/v3/adaptor/detail/cpp03_define_array_decl.hpp" +#include "msgpack/v3/adaptor/detail/cpp03_define_map_decl.hpp" +#else // MSGPACK_USE_CPP03 +#include "msgpack/v3/adaptor/detail/cpp11_define_array_decl.hpp" +#include "msgpack/v3/adaptor/detail/cpp11_define_map_decl.hpp" +#endif // MSGPACK_USE_CPP03 + +#endif // MSGPACK_V3_DEFINE_DECL_HPP diff --git a/include/msgpack/v3/adaptor/detail/cpp03_define_array_decl.hpp b/include/msgpack/v3/adaptor/detail/cpp03_define_array_decl.hpp new file mode 100644 index 00000000..5907bfcc --- /dev/null +++ b/include/msgpack/v3/adaptor/detail/cpp03_define_array_decl.hpp @@ -0,0 +1,31 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_CPP03_DEFINE_ARRAY_DECL_HPP +#define MSGPACK_V3_CPP03_DEFINE_ARRAY_DECL_HPP + +#include "msgpack/v2/adaptor/detail/cpp03_define_array_decl.hpp" + +namespace msgpack { +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond +namespace type { + +using v2::type::define_array; + +using v2::type::make_define_array; + +} // namespace type +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond +} // namespace msgpack + +#endif // MSGPACK_V3_CPP03_DEFINE_ARRAY_DECL_HPP diff --git a/include/msgpack/v3/adaptor/detail/cpp03_define_map_decl.hpp b/include/msgpack/v3/adaptor/detail/cpp03_define_map_decl.hpp new file mode 100644 index 00000000..b98010eb --- /dev/null +++ b/include/msgpack/v3/adaptor/detail/cpp03_define_map_decl.hpp @@ -0,0 +1,31 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2015-2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_CPP03_DEFINE_MAP_DECL_HPP +#define MSGPACK_V3_CPP03_DEFINE_MAP_DECL_HPP + +#include "msgpack/v2/adaptor/detail/cpp03_define_map_decl.hpp" + +namespace msgpack { +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond +namespace type { + +using v2::type::define_map; + +using v2::type::make_define_map; + +} // namespace type +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond +} // namespace msgpack + +#endif // MSGPACK_V3_CPP03_DEFINE_MAP_DECL_HPP diff --git a/include/msgpack/v3/adaptor/detail/cpp03_msgpack_tuple_decl.hpp b/include/msgpack/v3/adaptor/detail/cpp03_msgpack_tuple_decl.hpp new file mode 100644 index 00000000..f81fad9d --- /dev/null +++ b/include/msgpack/v3/adaptor/detail/cpp03_msgpack_tuple_decl.hpp @@ -0,0 +1,43 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_CPP03_MSGPACK_TUPLE_DECL_HPP +#define MSGPACK_V3_CPP03_MSGPACK_TUPLE_DECL_HPP + +#include "msgpack/v2/adaptor/detail/cpp03_msgpack_tuple_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { + +using v2::type::tuple; + +using v2::type::tuple_element; + +using v2::type::const_tuple_element; + +using v2::type::tuple_type; + +using v2::type::get; + +using v2::type::make_tuple; + +} // namespace type + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_CPP03_MSGPACK_TUPLE_DECL_HPP diff --git a/include/msgpack/v3/adaptor/detail/cpp11_define_array_decl.hpp b/include/msgpack/v3/adaptor/detail/cpp11_define_array_decl.hpp new file mode 100644 index 00000000..d6a128b2 --- /dev/null +++ b/include/msgpack/v3/adaptor/detail/cpp11_define_array_decl.hpp @@ -0,0 +1,32 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_CPP11_DEFINE_ARRAY_DECL_HPP +#define MSGPACK_V3_CPP11_DEFINE_ARRAY_DECL_HPP + +#include "msgpack/v2/adaptor/detail/cpp11_define_array_decl.hpp" + +namespace msgpack { +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond +namespace type { + +using v2::type::define_array_imp; +using v2::type::define_array; + +using v2::type::make_define_array; + +} // namespace type +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond +} // namespace msgpack + +#endif // MSGPACK_V3_CPP11_DEFINE_ARRAY_DECL_HPP diff --git a/include/msgpack/v3/adaptor/detail/cpp11_define_map_decl.hpp b/include/msgpack/v3/adaptor/detail/cpp11_define_map_decl.hpp new file mode 100644 index 00000000..d14fa9a3 --- /dev/null +++ b/include/msgpack/v3/adaptor/detail/cpp11_define_map_decl.hpp @@ -0,0 +1,31 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_CPP11_DEFINE_MAP_DECL_HPP +#define MSGPACK_V3_CPP11_DEFINE_MAP_DECL_HPP + +#include "msgpack/v2/adaptor/detail/cpp11_define_map_decl.hpp" + +namespace msgpack { +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond +namespace type { + +using v2::type::define_map_imp; +using v2::type::define_map; +using v2::type::make_define_map; + +} // namespace type +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond +} // namespace msgpack + +#endif // MSGPACK_V3_CPP11_DEFINE_MAP_DECL_HPP diff --git a/include/msgpack/v3/adaptor/detail/cpp11_msgpack_tuple_decl.hpp b/include/msgpack/v3/adaptor/detail/cpp11_msgpack_tuple_decl.hpp new file mode 100644 index 00000000..76ab6c7f --- /dev/null +++ b/include/msgpack/v3/adaptor/detail/cpp11_msgpack_tuple_decl.hpp @@ -0,0 +1,59 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_CPP11_MSGPACK_TUPLE_DECL_HPP +#define MSGPACK_V3_CPP11_MSGPACK_TUPLE_DECL_HPP + +#include "msgpack/v2/adaptor/detail/cpp11_msgpack_tuple_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { + +using v2::type::get; +using v2::type::tuple_size; +using v2::type::tuple_element; +using v2::type::uses_allocator; +using v2::type::ignore; +using v2::type::swap; + +using v2::type::tuple; + +using v2::type::make_tuple; +using v2::type::forward_as_tuple; +using v2::type::tuple_cat; +using v2::type::tie; + +} // namespace type + +// --- Pack from tuple to packer stream --- + +using v2::MsgpackTuplePacker; + +// --- Convert from tuple to object --- +using v2::MsgpackTupleAs; + +using v2::MsgpackTupleAsImpl; + +using v2::MsgpackTupleConverter; + +// --- Convert from tuple to object with zone --- +using v2::MsgpackTupleToObjectWithZone; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +///@endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_CPP11_MSGPACK_TUPLE_DECL_HPP diff --git a/include/msgpack/v3/adaptor/ext_decl.hpp b/include/msgpack/v3/adaptor/ext_decl.hpp new file mode 100644 index 00000000..6d97f671 --- /dev/null +++ b/include/msgpack/v3/adaptor/ext_decl.hpp @@ -0,0 +1,34 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_TYPE_EXT_DECL_HPP +#define MSGPACK_V3_TYPE_EXT_DECL_HPP + +#include "msgpack/v2/adaptor/ext_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { + +using v2::type::ext_ref; +using v2::type::ext; + +} // namespace type + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_TYPE_EXT_DECL_HPP diff --git a/include/msgpack/v3/adaptor/fixint_decl.hpp b/include/msgpack/v3/adaptor/fixint_decl.hpp new file mode 100644 index 00000000..67813e59 --- /dev/null +++ b/include/msgpack/v3/adaptor/fixint_decl.hpp @@ -0,0 +1,43 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_TYPE_FIXINT_DECL_HPP +#define MSGPACK_V3_TYPE_FIXINT_DECL_HPP + +#include "msgpack/v2/adaptor/fixint_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { + +using v2::type::fix_int; + +using v2::type::fix_uint8; +using v2::type::fix_uint16; +using v2::type::fix_uint32; +using v2::type::fix_uint64; + +using v2::type::fix_int8; +using v2::type::fix_int16; +using v2::type::fix_int32; +using v2::type::fix_int64; + +} // namespace type + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_TYPE_FIXINT_DECL_HPP diff --git a/include/msgpack/v3/adaptor/int_decl.hpp b/include/msgpack/v3/adaptor/int_decl.hpp new file mode 100644 index 00000000..3a3438ce --- /dev/null +++ b/include/msgpack/v3/adaptor/int_decl.hpp @@ -0,0 +1,54 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_TYPE_INT_DECL_HPP +#define MSGPACK_V3_TYPE_INT_DECL_HPP + +#include "msgpack/v2/adaptor/int_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3){ +/// @endcond + +namespace type { +namespace detail { + + +template +struct convert_integer_sign; + +template +struct is_signed; + + +template +struct object_char_sign; + +//using v2::type::detail::convert_integer_sign; + +//using v2::type::detail::is_signed; + +using v2::type::detail::convert_integer; + +//using v2::type::detail::object_char_sign; + +using v2::type::detail::object_char; + +} // namespace detail +} // namespace type + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_TYPE_INT_DECL_HPP diff --git a/include/msgpack/v3/adaptor/map_decl.hpp b/include/msgpack/v3/adaptor/map_decl.hpp new file mode 100644 index 00000000..3be2f3b2 --- /dev/null +++ b/include/msgpack/v3/adaptor/map_decl.hpp @@ -0,0 +1,33 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_TYPE_MAP_DECL_HPP +#define MSGPACK_V3_TYPE_MAP_DECL_HPP + +#include "msgpack/v2/adaptor/map_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { + +using v2::type::assoc_vector; + +} //namespace type + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_TYPE_MAP_DECL_HPP diff --git a/include/msgpack/v3/adaptor/msgpack_tuple_decl.hpp b/include/msgpack/v3/adaptor/msgpack_tuple_decl.hpp new file mode 100644 index 00000000..5de62b8d --- /dev/null +++ b/include/msgpack/v3/adaptor/msgpack_tuple_decl.hpp @@ -0,0 +1,21 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_MSGPACK_TUPLE_DECL_HPP +#define MSGPACK_V3_MSGPACK_TUPLE_DECL_HPP + +#include "msgpack/cpp_config.hpp" + +#if defined(MSGPACK_USE_CPP03) +#include "msgpack/v3/adaptor/detail/cpp03_msgpack_tuple_decl.hpp" +#else // MSGPACK_USE_CPP03 +#include "msgpack/v3/adaptor/detail/cpp11_msgpack_tuple_decl.hpp" +#endif // MSGPACK_USE_CPP03 + +#endif // MSGPACK_V3_MSGPACK_TUPLE_DECL_HPP diff --git a/include/msgpack/v3/adaptor/nil_decl.hpp b/include/msgpack/v3/adaptor/nil_decl.hpp new file mode 100644 index 00000000..1948edae --- /dev/null +++ b/include/msgpack/v3/adaptor/nil_decl.hpp @@ -0,0 +1,42 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_TYPE_NIL_DECL_HPP +#define MSGPACK_V3_TYPE_NIL_DECL_HPP + +#include "msgpack/v2/adaptor/nil_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { + +using v2::type::nil_t; + +#if defined(MSGPACK_USE_LEGACY_NIL) + +typedef nil_t nil; + +#endif // defined(MSGPACK_USE_LEGACY_NIL) + +using v2::type::operator<; +using v2::type::operator==; + +} // namespace type + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_TYPE_NIL_DECL_HPP diff --git a/include/msgpack/v3/adaptor/raw_decl.hpp b/include/msgpack/v3/adaptor/raw_decl.hpp new file mode 100644 index 00000000..e0133608 --- /dev/null +++ b/include/msgpack/v3/adaptor/raw_decl.hpp @@ -0,0 +1,33 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_TYPE_RAW_DECL_HPP +#define MSGPACK_V3_TYPE_RAW_DECL_HPP + +#include "msgpack/v2/adaptor/raw_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { + +using v2::type::raw_ref; + +} // namespace type + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_TYPE_RAW_DECL_HPP diff --git a/include/msgpack/v3/adaptor/size_equal_only_decl.hpp b/include/msgpack/v3/adaptor/size_equal_only_decl.hpp new file mode 100644 index 00000000..fb21934f --- /dev/null +++ b/include/msgpack/v3/adaptor/size_equal_only_decl.hpp @@ -0,0 +1,35 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_TYPE_SIZE_EQUAL_ONLY_DECL_HPP +#define MSGPACK_V3_TYPE_SIZE_EQUAL_ONLY_DECL_HPP + +#include "msgpack/v2/adaptor/size_equal_only_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { + +using v2::type::size_equal_only; +using v2::type::make_size_equal_only; +using v2::type::size; + +} // namespace type + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_TYPE_SIZE_EQUAL_ONLY_DECL_HPP diff --git a/include/msgpack/v3/adaptor/v4raw_decl.hpp b/include/msgpack/v3/adaptor/v4raw_decl.hpp new file mode 100644 index 00000000..cc4f841f --- /dev/null +++ b/include/msgpack/v3/adaptor/v4raw_decl.hpp @@ -0,0 +1,34 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_TYPE_V4RAW_DECL_HPP +#define MSGPACK_V3_TYPE_V4RAW_DECL_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { + +using v2::type::v4raw_ref; + +} // namespace type + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_TYPE_V4RAW_DECL_HPP diff --git a/include/msgpack/v3/cpp_config_decl.hpp b/include/msgpack/v3/cpp_config_decl.hpp new file mode 100644 index 00000000..2a33dc54 --- /dev/null +++ b/include/msgpack/v3/cpp_config_decl.hpp @@ -0,0 +1,84 @@ +// +// MessagePack for C++ C++03/C++11 Adaptation +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_CPP_CONFIG_DECL_HPP +#define MSGPACK_V3_CPP_CONFIG_DECL_HPP + +#include "msgpack/v2/cpp_config_decl.hpp" + +#if defined(MSGPACK_USE_CPP03) + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::unique_ptr; + +using v2::move; + +using v2::enable_if; + +using v2::integral_constant; + +using v2::is_same; + +using v2::underlying_type; + +using v2::is_array; + +using v2::remove_const; +using v2::remove_volatile; +using v2::remove_cv; + +using v2::is_pointer; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + + +#else // MSGPACK_USE_CPP03 + +namespace msgpack { +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +// unique_ptr +using v2::unique_ptr; +// using v2::make_unique; // since C++14 +using v2::hash; + +// utility +using v2::move; +using v2::swap; +using v2::enable_if; +using v2::is_same; +using v2::underlying_type; +using v2::is_array; + +using v2::remove_const; +using v2::remove_volatile; +using v2::remove_cv; + +using v2::is_pointer; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond +} // namespace msgpack + + +#endif // MSGPACK_USE_CPP03 + +#endif // MSGPACK_V3_CPP_CONFIG_DECL_HPP diff --git a/include/msgpack/v3/create_object_visitor_decl.hpp b/include/msgpack/v3/create_object_visitor_decl.hpp new file mode 100644 index 00000000..b3ebb98f --- /dev/null +++ b/include/msgpack/v3/create_object_visitor_decl.hpp @@ -0,0 +1,33 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_CREATE_OBJECT_VISITOR_DECL_HPP +#define MSGPACK_V3_CREATE_OBJECT_VISITOR_DECL_HPP + +#include "msgpack/v2/create_object_visitor_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace detail { + +using v2::detail::create_object_visitor; + +} // detail + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_CREATE_OBJECT_VISITOR_DECL_HPP diff --git a/include/msgpack/v3/detail/cpp03_zone_decl.hpp b/include/msgpack/v3/detail/cpp03_zone_decl.hpp new file mode 100644 index 00000000..64e91eb3 --- /dev/null +++ b/include/msgpack/v3/detail/cpp03_zone_decl.hpp @@ -0,0 +1,31 @@ +// +// MessagePack for C++ memory pool +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_CPP03_ZONE_DECL_HPP +#define MSGPACK_V3_CPP03_ZONE_DECL_HPP + +#include "msgpack/v2/detail/cpp03_zone_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::zone; + +using v2::aligned_size; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_CPP03_ZONE_DECL_HPP diff --git a/include/msgpack/v3/detail/cpp11_zone_decl.hpp b/include/msgpack/v3/detail/cpp11_zone_decl.hpp new file mode 100644 index 00000000..f1169d91 --- /dev/null +++ b/include/msgpack/v3/detail/cpp11_zone_decl.hpp @@ -0,0 +1,31 @@ +// +// MessagePack for C++ memory pool +// +// Copyright (C) 2016 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_CPP11_ZONE_DECL_HPP +#define MSGPACK_V3_CPP11_ZONE_DECL_HPP + +#include "msgpack/v2/zone_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::zone; + +using v2::aligned_size; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_CPP11_ZONE_DECL_HPP diff --git a/include/msgpack/v3/fbuffer_decl.hpp b/include/msgpack/v3/fbuffer_decl.hpp new file mode 100644 index 00000000..071b0f6a --- /dev/null +++ b/include/msgpack/v3/fbuffer_decl.hpp @@ -0,0 +1,32 @@ +// +// MessagePack for C++ FILE* buffer adaptor +// +// Copyright (C) 2013-2018 Vladimir Volodko and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_FBUFFER_DECL_HPP +#define MSGPACK_V3_FBUFFER_DECL_HPP + +#include "msgpack/v2/fbuffer_decl.hpp" + +#include +#include + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::fbuffer; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_FBUFFER_DECL_HPP diff --git a/include/msgpack/v3/iterator_decl.hpp b/include/msgpack/v3/iterator_decl.hpp new file mode 100644 index 00000000..999eb3be --- /dev/null +++ b/include/msgpack/v3/iterator_decl.hpp @@ -0,0 +1,33 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef MSGPACK_V3_ITERATOR_DECL_HPP +#define MSGPACK_V3_ITERATOR_DECL_HPP +#if !defined(MSGPACK_USE_CPP03) + +#include + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::begin; +using v2::end; + +/// @cond +} +/// @endcond + +} + +#endif // !defined(MSGPACK_USE_CPP03) +#endif // MSGPACK_V3_ITERATOR_DECL_HPP diff --git a/include/msgpack/v3/meta_decl.hpp b/include/msgpack/v3/meta_decl.hpp new file mode 100644 index 00000000..e47db93d --- /dev/null +++ b/include/msgpack/v3/meta_decl.hpp @@ -0,0 +1,50 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2015-2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef MSGPACK_V3_META_DECL_HPP +#define MSGPACK_V3_META_DECL_HPP + +#if !defined(MSGPACK_USE_CPP03) + +#include "msgpack/v2/meta_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace detail { + +using v2::detail::bool_pack; + +using v2::detail::all_of_imp; + +using v2::detail::any_of_imp; + +} // namespace detail + +using v2::all_of; + +using v2::any_of; + +using v2::seq; + +using v2::gen_seq; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // !defined(MSGPACK_USE_CPP03) + +#endif // MSGPACK_V3_META_DECL_HPP diff --git a/include/msgpack/v3/null_visitor_decl.hpp b/include/msgpack/v3/null_visitor_decl.hpp new file mode 100644 index 00000000..f4c1fc3c --- /dev/null +++ b/include/msgpack/v3/null_visitor_decl.hpp @@ -0,0 +1,29 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2017 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_NULL_VISITOR_DECL_HPP +#define MSGPACK_V3_NULL_VISITOR_DECL_HPP + +#include "msgpack/v2/null_visitor_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::null_visitor; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_NULL_VISITOR_DECL_HPP diff --git a/include/msgpack/v3/object_decl.hpp b/include/msgpack/v3/object_decl.hpp new file mode 100644 index 00000000..28941b27 --- /dev/null +++ b/include/msgpack/v3/object_decl.hpp @@ -0,0 +1,49 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_OBJECT_DECL_HPP +#define MSGPACK_V3_OBJECT_DECL_HPP + +#include "msgpack/v2/object_decl.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::object_handle; + +namespace detail { + +using v2::detail::add_ext_type_size; + +} // namespace detail + +using v2::aligned_zone_size; + +using v2::clone; + +namespace detail { + +using v2::detail::packer_serializer; + +} // namespace detail + +using v2::operator==; +using v2::operator!=; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_OBJECT_DECL_HPP diff --git a/include/msgpack/v3/object_fwd.hpp b/include/msgpack/v3/object_fwd.hpp new file mode 100644 index 00000000..e8ab7e90 --- /dev/null +++ b/include/msgpack/v3/object_fwd.hpp @@ -0,0 +1,70 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2018 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef MSGPACK_V3_OBJECT_FWD_HPP +#define MSGPACK_V3_OBJECT_FWD_HPP + +#include "msgpack/v3/object_fwd_decl.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +#if !defined(MSGPACK_USE_CPP03) + +namespace adaptor { + +// If v2 has as specialization for T, then dispatch v2::adaptor::as. +// So I call v2::has_as meta function intentionally. +template +struct as::value>::type> : v2::adaptor::as { +}; + +} // namespace adaptor + +template +struct has_as { +private: + template + static auto check(U*) -> + typename std::enable_if< + // check v3 specialization + std::is_same< + decltype(adaptor::as()(std::declval())), + U + >::value + || + // check v2 specialization + v2::has_as::value + || + // check v1 specialization + v1::has_as::value, + std::true_type + >::type; + template + static std::false_type check(...); +public: + using type = decltype(check(MSGPACK_NULLPTR)); + static constexpr bool value = type::value; +}; + +#endif // !defined(MSGPACK_USE_CPP03) + + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_OBJECT_FWD_HPP diff --git a/include/msgpack/v3/object_fwd_decl.hpp b/include/msgpack/v3/object_fwd_decl.hpp new file mode 100644 index 00000000..9c4ca466 --- /dev/null +++ b/include/msgpack/v3/object_fwd_decl.hpp @@ -0,0 +1,75 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2018 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef MSGPACK_V3_OBJECT_FWD_DECL_HPP +#define MSGPACK_V3_OBJECT_FWD_DECL_HPP + +#include "msgpack/v2/object_fwd_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace type { +using v2::type::object_type; +using v2::type::NIL; +using v2::type::BOOLEAN; +using v2::type::POSITIVE_INTEGER; +using v2::type::NEGATIVE_INTEGER; +using v2::type::FLOAT32; +using v2::type::FLOAT64; +using v2::type::FLOAT; +#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT) +using v2::type::DOUBLE; +#endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT +using v2::type::STR; +using v2::type::BIN; +using v2::type::ARRAY; +using v2::type::MAP; +using v2::type::EXT; +} // namespace type + +using v2::object; + +using v2::object_kv; + +using v2::object_array; +using v2::object_map; + +using v2::object_str; +using v2::object_bin; +using v2::object_ext; + +using v2::type_error; + + +#if !defined(MSGPACK_USE_CPP03) + +namespace adaptor { + +template +struct as; + +} // namespace adaptor + +template +struct has_as; + +#endif // !defined(MSGPACK_USE_CPP03) + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_OBJECT_FWD_DECL_HPP diff --git a/include/msgpack/v3/pack_decl.hpp b/include/msgpack/v3/pack_decl.hpp new file mode 100644 index 00000000..c0296174 --- /dev/null +++ b/include/msgpack/v3/pack_decl.hpp @@ -0,0 +1,55 @@ +// +// MessagePack for C++ serializing routine +// +// Copyright (C) 2008-2018 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_PACK_DECL_HPP +#define MSGPACK_V3_PACK_DECL_HPP + +#include "msgpack/v2/pack_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::packer; + +using v2::pack; + +#if MSGPACK_ENDIAN_LITTLE_BYTE + +using v2::take8_8; + +using v2::take8_16; + +using v2::take8_32; + +using v2::take8_64; + +#elif MSGPACK_ENDIAN_BIG_BYTE + +using v2::take8_8; + +using v2::take8_16; + +using v2::take8_32; + +using v2::take8_64; + +#else +#error msgpack-c supports only big endian and little endian +#endif + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_PACK_DECL_HPP diff --git a/include/msgpack/v3/parse.hpp b/include/msgpack/v3/parse.hpp new file mode 100644 index 00000000..9b0b0a29 --- /dev/null +++ b/include/msgpack/v3/parse.hpp @@ -0,0 +1,676 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_PARSE_HPP +#define MSGPACK_V3_PARSE_HPP + +#if MSGPACK_DEFAULT_API_VERSION >= 2 + +#include + +#include "msgpack/parse_return.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace detail { + +template +class context { +public: + context() + :m_trail(0), m_cs(MSGPACK_CS_HEADER) + { + } + + void init() + { + m_cs = MSGPACK_CS_HEADER; + m_trail = 0; + m_stack.clear(); + holder().visitor().init(); + } + + parse_return execute(const char* data, std::size_t len, std::size_t& off); + +private: + template + static uint32_t next_cs(T p) + { + return static_cast(*p) & 0x1f; + } + + VisitorHolder& holder() { + return static_cast(*this); + } + + template + parse_return start_aggregate( + StartVisitor const& sv, + EndVisitor const& ev, + const char* load_pos, + std::size_t& off) { + typename value::type size; + load(size, load_pos); + if (size == 0) { + if (!sv(size)) { + off = m_current - m_start; + return PARSE_STOP_VISITOR; + } + if (!ev()) { + off = m_current - m_start; + return PARSE_STOP_VISITOR; + } + parse_return ret = m_stack.consume(holder(), m_current); + if (ret != PARSE_CONTINUE) { + off = m_current - m_start; + return ret; + } + } + else { + if (!sv(size)) { + off = m_current - m_start; + return PARSE_STOP_VISITOR; + } + parse_return ret = m_stack.push(holder(), sv.type(), static_cast(size)); + if (ret != PARSE_CONTINUE) { + off = m_current - m_start; + return ret; + } + } + ++m_current; + m_cs = MSGPACK_CS_HEADER; + return PARSE_CONTINUE; + } + + parse_return after_visit_proc(bool visit_result, std::size_t& off) { + if (!visit_result) { + off = m_current - m_start; + return PARSE_STOP_VISITOR; + } + parse_return ret = m_stack.consume(holder(), m_current); + ++m_current; + if (ret != PARSE_CONTINUE) { + off = m_current - m_start; + } + m_cs = MSGPACK_CS_HEADER; + return ret; + } + + struct array_sv { + array_sv(VisitorHolder& visitor_holder):m_visitor_holder(visitor_holder) {} + bool operator()(uint32_t size) const { + return m_visitor_holder.visitor().start_array(size); + } + msgpack_container_type type() const { return MSGPACK_CT_ARRAY_ITEM; } + private: + VisitorHolder& m_visitor_holder; + }; + struct array_ev { + array_ev(VisitorHolder& visitor_holder):m_visitor_holder(visitor_holder) {} + bool operator()() const { + return m_visitor_holder.visitor().end_array(); + } + private: + VisitorHolder& m_visitor_holder; + }; + struct map_sv { + map_sv(VisitorHolder& visitor_holder):m_visitor_holder(visitor_holder) {} + bool operator()(uint32_t size) const { + return m_visitor_holder.visitor().start_map(size); + } + msgpack_container_type type() const { return MSGPACK_CT_MAP_KEY; } + private: + VisitorHolder& m_visitor_holder; + }; + struct map_ev { + map_ev(VisitorHolder& visitor_holder):m_visitor_holder(visitor_holder) {} + bool operator()() const { + return m_visitor_holder.visitor().end_map(); + } + private: + VisitorHolder& m_visitor_holder; + }; + + struct unpack_stack { + struct stack_elem { + stack_elem(msgpack_container_type type, uint32_t rest):m_type(type), m_rest(rest) {} + msgpack_container_type m_type; + uint32_t m_rest; + }; + unpack_stack() { + m_stack.reserve(MSGPACK_EMBED_STACK_SIZE); + } + parse_return push(VisitorHolder& visitor_holder, msgpack_container_type type, uint32_t rest) { + m_stack.push_back(stack_elem(type, rest)); + switch (type) { + case MSGPACK_CT_ARRAY_ITEM: + return visitor_holder.visitor().start_array_item() ? PARSE_CONTINUE : PARSE_STOP_VISITOR; + case MSGPACK_CT_MAP_KEY: + return visitor_holder.visitor().start_map_key() ? PARSE_CONTINUE : PARSE_STOP_VISITOR; + case MSGPACK_CT_MAP_VALUE: + assert(0); + return PARSE_STOP_VISITOR; + } + assert(0); + return PARSE_STOP_VISITOR; + } + parse_return consume(VisitorHolder& visitor_holder, char const*& current) { + while (!m_stack.empty()) { + stack_elem& e = m_stack.back(); + switch (e.m_type) { + case MSGPACK_CT_ARRAY_ITEM: + if (!visitor_holder.visitor().end_array_item()) { + --current; + return PARSE_STOP_VISITOR; + } + if (--e.m_rest == 0) { + m_stack.pop_back(); + if (!visitor_holder.visitor().end_array()) { + --current; + return PARSE_STOP_VISITOR; + } + } + else { + if (!visitor_holder.visitor().start_array_item()) return PARSE_STOP_VISITOR; + return PARSE_CONTINUE; + } + break; + case MSGPACK_CT_MAP_KEY: + if (!visitor_holder.visitor().end_map_key()) { + --current; + return PARSE_STOP_VISITOR; + } + if (!visitor_holder.visitor().start_map_value()) return PARSE_STOP_VISITOR; + e.m_type = MSGPACK_CT_MAP_VALUE; + return PARSE_CONTINUE; + case MSGPACK_CT_MAP_VALUE: + if (!visitor_holder.visitor().end_map_value()) { + --current; + return PARSE_STOP_VISITOR; + } + if (--e.m_rest == 0) { + m_stack.pop_back(); + if (!visitor_holder.visitor().end_map()) { + --current; + return PARSE_STOP_VISITOR; + } + } + else { + e.m_type = MSGPACK_CT_MAP_KEY; + if (!visitor_holder.visitor().start_map_key()) return PARSE_STOP_VISITOR; + return PARSE_CONTINUE; + } + break; + } + } + return PARSE_SUCCESS; + } + bool empty() const { return m_stack.empty(); } + void clear() { m_stack.clear(); } + private: + std::vector m_stack; + }; + + char const* m_start; + char const* m_current; + + std::size_t m_trail; + uint32_t m_cs; + uint32_t m_num_elements; + unpack_stack m_stack; +}; + +template +inline void check_ext_size(std::size_t /*size*/) { +} + +template <> +inline void check_ext_size<4>(std::size_t size) { + if (size == 0xffffffff) throw msgpack::ext_size_overflow("ext size overflow"); +} + +template +inline parse_return context::execute(const char* data, std::size_t len, std::size_t& off) +{ + assert(len >= off); + + m_start = data; + m_current = data + off; + const char* const pe = data + len; + const char* n = MSGPACK_NULLPTR; + + msgpack::object obj; + + if(m_current == pe) { + off = m_current - m_start; + return PARSE_CONTINUE; + } + bool fixed_trail_again = false; + do { + if (m_cs == MSGPACK_CS_HEADER) { + fixed_trail_again = false; + int selector = *reinterpret_cast(m_current); + if (0x00 <= selector && selector <= 0x7f) { // Positive Fixnum + uint8_t tmp = *reinterpret_cast(m_current); + bool visret = holder().visitor().visit_positive_integer(tmp); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } else if(0xe0 <= selector && selector <= 0xff) { // Negative Fixnum + int8_t tmp = *reinterpret_cast(m_current); + bool visret = holder().visitor().visit_negative_integer(tmp); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } else if (0xc4 <= selector && selector <= 0xdf) { + const uint32_t trail[] = { + 1, // bin 8 0xc4 + 2, // bin 16 0xc5 + 4, // bin 32 0xc6 + 1, // ext 8 0xc7 + 2, // ext 16 0xc8 + 4, // ext 32 0xc9 + 4, // float 32 0xca + 8, // float 64 0xcb + 1, // uint 8 0xcc + 2, // uint 16 0xcd + 4, // uint 32 0xce + 8, // uint 64 0xcf + 1, // int 8 0xd0 + 2, // int 16 0xd1 + 4, // int 32 0xd2 + 8, // int 64 0xd3 + 2, // fixext 1 0xd4 + 3, // fixext 2 0xd5 + 5, // fixext 4 0xd6 + 9, // fixext 8 0xd7 + 17,// fixext 16 0xd8 + 1, // str 8 0xd9 + 2, // str 16 0xda + 4, // str 32 0xdb + 2, // array 16 0xdc + 4, // array 32 0xdd + 2, // map 16 0xde + 4, // map 32 0xdf + }; + m_trail = trail[selector - 0xc4]; + m_cs = next_cs(m_current); + fixed_trail_again = true; + } else if(0xa0 <= selector && selector <= 0xbf) { // FixStr + m_trail = static_cast(*m_current) & 0x1f; + if(m_trail == 0) { + bool visret = holder().visitor().visit_str(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } + else { + m_cs = MSGPACK_ACS_STR_VALUE; + fixed_trail_again = true; + } + } else if(0x90 <= selector && selector <= 0x9f) { // FixArray + parse_return ret = start_aggregate(array_sv(holder()), array_ev(holder()), m_current, off); + if (ret != PARSE_CONTINUE) return ret; + } else if(0x80 <= selector && selector <= 0x8f) { // FixMap + parse_return ret = start_aggregate(map_sv(holder()), map_ev(holder()), m_current, off); + if (ret != PARSE_CONTINUE) return ret; + } else if(selector == 0xc2) { // false + bool visret = holder().visitor().visit_boolean(false); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } else if(selector == 0xc3) { // true + bool visret = holder().visitor().visit_boolean(true); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } else if(selector == 0xc0) { // nil + bool visret = holder().visitor().visit_nil(); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } else { + off = m_current - m_start; + holder().visitor().parse_error(off - 1, off); + return PARSE_PARSE_ERROR; + } + // end MSGPACK_CS_HEADER + } + if (m_cs != MSGPACK_CS_HEADER || fixed_trail_again) { + if (fixed_trail_again) { + ++m_current; + fixed_trail_again = false; + } + if(static_cast(pe - m_current) < m_trail) { + off = m_current - m_start; + return PARSE_CONTINUE; + } + n = m_current; + m_current += m_trail - 1; + switch(m_cs) { + //case MSGPACK_CS_ + //case MSGPACK_CS_ + case MSGPACK_CS_FLOAT: { + union { uint32_t i; float f; } mem; + load(mem.i, n); + bool visret = holder().visitor().visit_float32(mem.f); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_DOUBLE: { + union { uint64_t i; double f; } mem; + load(mem.i, n); +#if defined(TARGET_OS_IPHONE) + // ok +#elif defined(__arm__) && !(__ARM_EABI__) // arm-oabi + // https://github.com/msgpack/msgpack-perl/pull/1 + mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL); +#endif + bool visret = holder().visitor().visit_float64(mem.f); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_UINT_8: { + uint8_t tmp; + load(tmp, n); + bool visret = holder().visitor().visit_positive_integer(tmp); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_UINT_16: { + uint16_t tmp; + load(tmp, n); + bool visret = holder().visitor().visit_positive_integer(tmp); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_UINT_32: { + uint32_t tmp; + load(tmp, n); + bool visret = holder().visitor().visit_positive_integer(tmp); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_UINT_64: { + uint64_t tmp; + load(tmp, n); + bool visret = holder().visitor().visit_positive_integer(tmp); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_INT_8: { + int8_t tmp; + load(tmp, n); + bool visret = holder().visitor().visit_negative_integer(tmp); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_INT_16: { + int16_t tmp; + load(tmp, n); + bool visret = holder().visitor().visit_negative_integer(tmp); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_INT_32: { + int32_t tmp; + load(tmp, n); + bool visret = holder().visitor().visit_negative_integer(tmp); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_INT_64: { + int64_t tmp; + load(tmp, n); + bool visret = holder().visitor().visit_negative_integer(tmp); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_FIXEXT_1: { + bool visret = holder().visitor().visit_ext(n, 1+1); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_FIXEXT_2: { + bool visret = holder().visitor().visit_ext(n, 2+1); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_FIXEXT_4: { + bool visret = holder().visitor().visit_ext(n, 4+1); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_FIXEXT_8: { + bool visret = holder().visitor().visit_ext(n, 8+1); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_FIXEXT_16: { + bool visret = holder().visitor().visit_ext(n, 16+1); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_STR_8: { + uint8_t tmp; + load(tmp, n); + m_trail = tmp; + if(m_trail == 0) { + bool visret = holder().visitor().visit_str(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } + else { + m_cs = MSGPACK_ACS_STR_VALUE; + fixed_trail_again = true; + } + } break; + case MSGPACK_CS_BIN_8: { + uint8_t tmp; + load(tmp, n); + m_trail = tmp; + if(m_trail == 0) { + bool visret = holder().visitor().visit_bin(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } + else { + m_cs = MSGPACK_ACS_BIN_VALUE; + fixed_trail_again = true; + } + } break; + case MSGPACK_CS_EXT_8: { + uint8_t tmp; + load(tmp, n); + m_trail = tmp + 1; + if(m_trail == 0) { + bool visret = holder().visitor().visit_ext(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } + else { + m_cs = MSGPACK_ACS_EXT_VALUE; + fixed_trail_again = true; + } + } break; + case MSGPACK_CS_STR_16: { + uint16_t tmp; + load(tmp, n); + m_trail = tmp; + if(m_trail == 0) { + bool visret = holder().visitor().visit_str(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } + else { + m_cs = MSGPACK_ACS_STR_VALUE; + fixed_trail_again = true; + } + } break; + case MSGPACK_CS_BIN_16: { + uint16_t tmp; + load(tmp, n); + m_trail = tmp; + if(m_trail == 0) { + bool visret = holder().visitor().visit_bin(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } + else { + m_cs = MSGPACK_ACS_BIN_VALUE; + fixed_trail_again = true; + } + } break; + case MSGPACK_CS_EXT_16: { + uint16_t tmp; + load(tmp, n); + m_trail = tmp + 1; + if(m_trail == 0) { + bool visret = holder().visitor().visit_ext(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } + else { + m_cs = MSGPACK_ACS_EXT_VALUE; + fixed_trail_again = true; + } + } break; + case MSGPACK_CS_STR_32: { + uint32_t tmp; + load(tmp, n); + m_trail = tmp; + if(m_trail == 0) { + bool visret = holder().visitor().visit_str(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } + else { + m_cs = MSGPACK_ACS_STR_VALUE; + fixed_trail_again = true; + } + } break; + case MSGPACK_CS_BIN_32: { + uint32_t tmp; + load(tmp, n); + m_trail = tmp; + if(m_trail == 0) { + bool visret = holder().visitor().visit_bin(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } + else { + m_cs = MSGPACK_ACS_BIN_VALUE; + fixed_trail_again = true; + } + } break; + case MSGPACK_CS_EXT_32: { + uint32_t tmp; + load(tmp, n); + check_ext_size(tmp); + m_trail = tmp; + ++m_trail; + if(m_trail == 0) { + bool visret = holder().visitor().visit_ext(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } + else { + m_cs = MSGPACK_ACS_EXT_VALUE; + fixed_trail_again = true; + } + } break; + case MSGPACK_ACS_STR_VALUE: { + bool visret = holder().visitor().visit_str(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_ACS_BIN_VALUE: { + bool visret = holder().visitor().visit_bin(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_ACS_EXT_VALUE: { + bool visret = holder().visitor().visit_ext(n, static_cast(m_trail)); + parse_return upr = after_visit_proc(visret, off); + if (upr != PARSE_CONTINUE) return upr; + } break; + case MSGPACK_CS_ARRAY_16: { + parse_return ret = start_aggregate(array_sv(holder()), array_ev(holder()), n, off); + if (ret != PARSE_CONTINUE) return ret; + + } break; + case MSGPACK_CS_ARRAY_32: { + parse_return ret = start_aggregate(array_sv(holder()), array_ev(holder()), n, off); + if (ret != PARSE_CONTINUE) return ret; + } break; + case MSGPACK_CS_MAP_16: { + parse_return ret = start_aggregate(map_sv(holder()), map_ev(holder()), n, off); + if (ret != PARSE_CONTINUE) return ret; + } break; + case MSGPACK_CS_MAP_32: { + parse_return ret = start_aggregate(map_sv(holder()), map_ev(holder()), n, off); + if (ret != PARSE_CONTINUE) return ret; + } break; + default: + off = m_current - m_start; + holder().visitor().parse_error(n - m_start - 1, n - m_start); + return PARSE_PARSE_ERROR; + } + } + } while(m_current != pe); + + off = m_current - m_start; + return PARSE_CONTINUE; +} + +template +struct parse_helper : detail::context > { + parse_helper(Visitor& v):m_visitor(v) {} + parse_return execute(const char* data, std::size_t len, std::size_t& off) { + return detail::context >::execute(data, len, off); + } + Visitor& visitor() const { return m_visitor; } + Visitor& m_visitor; +}; + +template +inline parse_return +parse_imp(const char* data, size_t len, size_t& off, Visitor& v) { + std::size_t noff = off; + if(len <= noff) { + // FIXME + v.insufficient_bytes(noff, noff); + return PARSE_CONTINUE; + } + detail::parse_helper h(v); + parse_return ret = h.execute(data, len, noff); + off = noff; + switch (ret) { + case PARSE_CONTINUE: + v.insufficient_bytes(noff - 1, noff); + return ret; + case PARSE_SUCCESS: + if(noff < len) { + return PARSE_EXTRA_BYTES; + } + return ret; + default: + return ret; + } +} + +} // detail + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_DEFAULT_API_VERSION >= 2 + +#endif // MSGPACK_V3_PARSE_HPP diff --git a/include/msgpack/v3/parse_decl.hpp b/include/msgpack/v3/parse_decl.hpp new file mode 100644 index 00000000..f1c2d7ad --- /dev/null +++ b/include/msgpack/v3/parse_decl.hpp @@ -0,0 +1,49 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018-2017 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_PARSE_DECL_HPP +#define MSGPACK_V3_PARSE_DECL_HPP + +#include "msgpack/v2/parse_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace detail { + +template +class context; + +} // detail + +using v2::parser; +using v2::parse; + +namespace detail { + +template +struct parse_helper; + +template +inline parse_return +parse_imp(const char* data, size_t len, size_t& off, Visitor& v); + +} // detail + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + + +#endif // MSGPACK_V3_PARSE_DECL_HPP diff --git a/include/msgpack/v3/parse_return.hpp b/include/msgpack/v3/parse_return.hpp new file mode 100644 index 00000000..0c79c6fa --- /dev/null +++ b/include/msgpack/v3/parse_return.hpp @@ -0,0 +1,35 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2008-2018 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_PARSE_RETURN_HPP +#define MSGPACK_V3_PARSE_RETURN_HPP + +#include "msgpack/v2/parse_return.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::parse_return; + +using v2::PARSE_SUCCESS; +using v2::PARSE_EXTRA_BYTES; +using v2::PARSE_CONTINUE; +using v2::PARSE_PARSE_ERROR; +using v2::PARSE_STOP_VISITOR; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_PARSE_RETURN_HPP diff --git a/include/msgpack/v3/sbuffer_decl.hpp b/include/msgpack/v3/sbuffer_decl.hpp new file mode 100644 index 00000000..c713c850 --- /dev/null +++ b/include/msgpack/v3/sbuffer_decl.hpp @@ -0,0 +1,33 @@ +// +// MessagePack for C++ simple buffer implementation +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_SBUFFER_DECL_HPP +#define MSGPACK_V3_SBUFFER_DECL_HPP + +#include "msgpack/versioning.hpp" + +#ifndef MSGPACK_SBUFFER_INIT_SIZE +#define MSGPACK_SBUFFER_INIT_SIZE 8192 +#endif + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::sbuffer; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_SBUFFER_DECL_HPP diff --git a/include/msgpack/v3/unpack.hpp b/include/msgpack/v3/unpack.hpp new file mode 100644 index 00000000..659411b6 --- /dev/null +++ b/include/msgpack/v3/unpack.hpp @@ -0,0 +1,192 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_UNPACK_HPP +#define MSGPACK_V3_UNPACK_HPP + +#include "msgpack/unpack_decl.hpp" +#include "msgpack/parse.hpp" +#include "msgpack/create_object_visitor.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +inline msgpack::object_handle unpack( + const char* data, std::size_t len, std::size_t& off, bool& referenced, + msgpack::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit +) +{ + msgpack::object obj; + msgpack::unique_ptr z(new msgpack::zone); + referenced = false; + parse_return ret = detail::unpack_imp( + data, len, off, *z, obj, referenced, f, user_data, limit); + + switch(ret) { + case msgpack::PARSE_SUCCESS: + return msgpack::object_handle(obj, msgpack::move(z)); + case msgpack::PARSE_EXTRA_BYTES: + return msgpack::object_handle(obj, msgpack::move(z)); + default: + break; + } + return msgpack::object_handle(); +} + +inline msgpack::object_handle unpack( + const char* data, std::size_t len, std::size_t& off, + msgpack::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit) +{ + bool referenced; + return msgpack::v3::unpack(data, len, off, referenced, f, user_data, limit); +} + +inline msgpack::object_handle unpack( + const char* data, std::size_t len, bool& referenced, + msgpack::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit) +{ + std::size_t off = 0; + return msgpack::v3::unpack(data, len, off, referenced, f, user_data, limit); +} + +inline msgpack::object_handle unpack( + const char* data, std::size_t len, + msgpack::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit) +{ + bool referenced; + std::size_t off = 0; + return msgpack::v3::unpack(data, len, off, referenced, f, user_data, limit); +} + +inline void unpack( + msgpack::object_handle& result, + const char* data, std::size_t len, std::size_t& off, bool& referenced, + msgpack::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit) +{ + msgpack::object obj; + msgpack::unique_ptr z(new msgpack::zone); + referenced = false; + parse_return ret = detail::unpack_imp( + data, len, off, *z, obj, referenced, f, user_data, limit); + + switch(ret) { + case msgpack::PARSE_SUCCESS: + result.set(obj); + result.zone() = msgpack::move(z); + return; + case msgpack::PARSE_EXTRA_BYTES: + result.set(obj); + result.zone() = msgpack::move(z); + return; + default: + return; + } +} + +inline void unpack( + msgpack::object_handle& result, + const char* data, std::size_t len, std::size_t& off, + msgpack::v3::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit) +{ + bool referenced; + msgpack::v3::unpack(result, data, len, off, referenced, f, user_data, limit); +} + +inline void unpack( + msgpack::object_handle& result, + const char* data, std::size_t len, bool& referenced, + msgpack::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit) +{ + std::size_t off = 0; + msgpack::v3::unpack(result, data, len, off, referenced, f, user_data, limit); +} + +inline void unpack( + msgpack::object_handle& result, + const char* data, std::size_t len, + msgpack::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit) +{ + bool referenced; + std::size_t off = 0; + msgpack::v3::unpack(result, data, len, off, referenced, f, user_data, limit); +} + + +inline msgpack::object unpack( + msgpack::zone& z, + const char* data, std::size_t len, std::size_t& off, bool& referenced, + msgpack::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit) +{ + msgpack::object obj; + referenced = false; + parse_return ret = detail::unpack_imp( + data, len, off, z, obj, referenced, f, user_data, limit); + + switch(ret) { + case msgpack::PARSE_SUCCESS: + return obj; + case msgpack::PARSE_EXTRA_BYTES: + return obj; + default: + break; + } + return obj; +} + +inline msgpack::object unpack( + msgpack::zone& z, + const char* data, std::size_t len, std::size_t& off, + msgpack::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit) +{ + bool referenced; + return msgpack::v3::unpack(z, data, len, off, referenced, f, user_data, limit); +} + +inline msgpack::object unpack( + msgpack::zone& z, + const char* data, std::size_t len, bool& referenced, + msgpack::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit) +{ + std::size_t off = 0; + return msgpack::v3::unpack(z, data, len, off, referenced, f, user_data, limit); +} + +inline msgpack::object unpack( + msgpack::zone& z, + const char* data, std::size_t len, + msgpack::unpack_reference_func f, void* user_data, + msgpack::unpack_limit const& limit) +{ + bool referenced; + std::size_t off = 0; + return msgpack::v3::unpack(z, data, len, off, referenced, f, user_data, limit); +} + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + + +#endif // MSGPACK_V3_UNPACK_HPP diff --git a/include/msgpack/v3/unpack_decl.hpp b/include/msgpack/v3/unpack_decl.hpp new file mode 100644 index 00000000..5ae8831f --- /dev/null +++ b/include/msgpack/v3/unpack_decl.hpp @@ -0,0 +1,304 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_UNPACK_DECL_HPP +#define MSGPACK_V3_UNPACK_DECL_HPP + +#include "msgpack/v2/unpack_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::unpack_reference_func; + +using v2::unpack_error; +using v2::parse_error; +using v2::insufficient_bytes; +using v2::size_overflow; +using v2::array_size_overflow; +using v2::map_size_overflow; +using v2::str_size_overflow; +using v2::bin_size_overflow; +using v2::ext_size_overflow; +using v2::depth_size_overflow; +using v2::unpack_limit; + +namespace detail { + +using v2::detail::unpack_user; + +using v2::detail::unpack_uint8; +using v2::detail::unpack_uint16; +using v2::detail::unpack_uint32; +using v2::detail::unpack_uint64; + +using v2::detail::unpack_int8; +using v2::detail::unpack_int16; +using v2::detail::unpack_int32; +using v2::detail::unpack_int64; + +using v2::detail::unpack_float; +using v2::detail::unpack_double; + +using v2::detail::unpack_nil; + +using v2::detail::unpack_true; +using v2::detail::unpack_false; + +using v2::detail::unpack_array; +using v2::detail::unpack_array_item; +using v2::detail::unpack_map; +using v2::detail::unpack_map_item; +using v2::detail::unpack_str; +using v2::detail::unpack_bin; +using v2::detail::unpack_ext; + +using v2::detail::unpack_stack; + +using v2::detail::init_count; +using v2::detail::decr_count; +using v2::detail::incr_count; + +using v2::detail::get_count; + +using v2::detail::fix_tag; + +using v2::detail::value; + +using v2::detail::load; + +} // detail + + +using v2::unpacked; +using v2::unpacker; +using v2::basic_unpacker; + +namespace detail { + +using v2::detail::unpack_imp; + +} // detail + +/// Unpack msgpack::object from a buffer. +/** + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param off The offset position of the buffer. It is read and overwritten. + * @param referenced If the unpacked object contains reference of the buffer, then set as true, otherwise false. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * @return object_handle that contains unpacked data. + * + */ +msgpack::object_handle unpack( + const char* data, std::size_t len, std::size_t& off, bool& referenced, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + +/// Unpack msgpack::object from a buffer. +/** + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param off The offset position of the buffer. It is read and overwritten. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * @return object_handle that contains unpacked data. + * + */ +msgpack::object_handle unpack( + const char* data, std::size_t len, std::size_t& off, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + +/// Unpack msgpack::object from a buffer. +/** + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param referenced If the unpacked object contains reference of the buffer, then set as true, otherwise false. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * @return object_handle that contains unpacked data. + * + */ +msgpack::object_handle unpack( + const char* data, std::size_t len, bool& referenced, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + +/// Unpack msgpack::object from a buffer. +/** + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * @return object_handle that contains unpacked data. + * + */ +msgpack::object_handle unpack( + const char* data, std::size_t len, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + + +/// Unpack msgpack::object from a buffer. +/** + * @param result The object_handle that contains unpacked data. + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param off The offset position of the buffer. It is read and overwritten. + * @param referenced If the unpacked object contains reference of the buffer, then set as true, otherwise false. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * + */ +void unpack( + msgpack::object_handle& result, + const char* data, std::size_t len, std::size_t& off, bool& referenced, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + +/// Unpack msgpack::object from a buffer. +/** + * @param result The object_handle that contains unpacked data. + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param off The offset position of the buffer. It is read and overwritten. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * + */ +void unpack( + msgpack::object_handle& result, + const char* data, std::size_t len, std::size_t& off, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + +/// Unpack msgpack::object from a buffer. +/** + * @param result The object_handle that contains unpacked data. + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param referenced If the unpacked object contains reference of the buffer, then set as true, otherwise false. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * + */ +void unpack( + msgpack::object_handle& result, + const char* data, std::size_t len, bool& referenced, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + +/// Unpack msgpack::object from a buffer. +/** + * @param result The object_handle that contains unpacked data. + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * + */ +void unpack( + msgpack::object_handle& result, + const char* data, std::size_t len, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + +/// Unpack msgpack::object from a buffer. +/** + * @param z The msgpack::zone that is used as a memory of unpacked msgpack objects. + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param off The offset position of the buffer. It is read and overwritten. + * @param referenced If the unpacked object contains reference of the buffer, then set as true, otherwise false. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * @return msgpack::object that contains unpacked data. + * + */ +msgpack::object unpack( + msgpack::zone& z, + const char* data, std::size_t len, std::size_t& off, bool& referenced, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + +/// Unpack msgpack::object from a buffer. +/** + * @param z The msgpack::zone that is used as a memory of unpacked msgpack objects. + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param off The offset position of the buffer. It is read and overwritten. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * @return msgpack::object that contains unpacked data. + * + */ +msgpack::object unpack( + msgpack::zone& z, + const char* data, std::size_t len, std::size_t& off, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + +/// Unpack msgpack::object from a buffer. +/** + * @param z The msgpack::zone that is used as a memory of unpacked msgpack objects. + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param referenced If the unpacked object contains reference of the buffer, then set as true, otherwise false. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * @return msgpack::object that contains unpacked data. + * + */ +msgpack::object unpack( + msgpack::zone& z, + const char* data, std::size_t len, bool& referenced, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + +/// Unpack msgpack::object from a buffer. +/** + * @param z The msgpack::zone that is used as a memory of unpacked msgpack objects. + * @param data The pointer to the buffer. + * @param len The length of the buffer. + * @param f A judging function that msgpack::object refer to the buffer. + * @param user_data This parameter is passed to f. + * @param limit The size limit information of msgpack::object. + * + * @return msgpack::object that contains unpacked data. + * + */ +msgpack::object unpack( + msgpack::zone& z, + const char* data, std::size_t len, + msgpack::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::unpack_limit const& limit = unpack_limit()); + + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_UNPACK_DECL_HPP diff --git a/include/msgpack/v3/vrefbuffer_decl.hpp b/include/msgpack/v3/vrefbuffer_decl.hpp new file mode 100644 index 00000000..9791904b --- /dev/null +++ b/include/msgpack/v3/vrefbuffer_decl.hpp @@ -0,0 +1,29 @@ +// +// MessagePack for C++ zero-copy buffer implementation +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_VREFBUFFER_DECL_HPP +#define MSGPACK_V3_VREFBUFFER_DECL_HPP + +#include "msgpack/v2/vrefbuffer_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::vrefbuffer; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_VREFBUFFER_DECL_HPP diff --git a/include/msgpack/v3/x3_parse_decl.hpp b/include/msgpack/v3/x3_parse_decl.hpp new file mode 100644 index 00000000..ded9d25a --- /dev/null +++ b/include/msgpack/v3/x3_parse_decl.hpp @@ -0,0 +1,34 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_X3_PARSE_DECL_HPP +#define MSGPACK_V3_X3_PARSE_DECL_HPP + +#if defined(MSGPACK_USE_X3_PARSE) + +#include "msgpack/v2/x3_parse_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::parse; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v2) +/// @endcond + +} // namespace msgpack + + +#endif // defined(MSGPACK_USE_X3_PARSE) + +#endif // MSGPACK_V3_X3_PARSE_DECL_HPP diff --git a/include/msgpack/v3/x3_unpack.hpp b/include/msgpack/v3/x3_unpack.hpp new file mode 100644 index 00000000..bdadcf16 --- /dev/null +++ b/include/msgpack/v3/x3_unpack.hpp @@ -0,0 +1,97 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_X3_UNPACK_HPP +#define MSGPACK_V3_X3_UNPACK_HPP + +#if defined(MSGPACK_USE_X3_PARSE) + +#include + +#if BOOST_VERSION >= 106100 + +#include "msgpack/versioning.hpp" +#include "msgpack/create_object_visitor.hpp" +#include "msgpack/x3_unpack_decl.hpp" +#include "msgpack/x3_parse.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + + +template +inline msgpack::object_handle unpack( + Iterator&& begin, Iterator&& end, + bool& referenced, + unpack_reference_func f, void* user_data, + unpack_limit const& limit) +{ + msgpack::object obj; + msgpack::unique_ptr z(new msgpack::zone); + referenced = false; + detail::unpack_imp( + std::forward(begin), std::forward(end), *z, obj, referenced, f, user_data, limit); + return msgpack::object_handle(obj, msgpack::move(z)); +} + +template +inline msgpack::object_handle unpack( + Iterator&& begin, Iterator&& end, + unpack_reference_func f, void* user_data, + unpack_limit const& limit) +{ + bool referenced; + return unpack(std::forward(begin), std::forward(end), referenced, f, user_data, limit); +} + +template +inline msgpack::object unpack( + msgpack::zone& z, + Iterator&& begin, Iterator&& end, + bool& referenced, + unpack_reference_func f, void* user_data, + unpack_limit const& limit) +{ + msgpack::object obj; + referenced = false; + detail::unpack_imp( + std::forward(begin), std::forward(end), z, obj, referenced, f, user_data, limit); + return obj; +} + +template +inline msgpack::object unpack( + msgpack::zone& z, + Iterator&& begin, Iterator&& end, + unpack_reference_func f, void* user_data, + unpack_limit const& limit) +{ + bool referenced; + return unpack( + z, std::forward(begin), std::forward(end), referenced, f, user_data, limit); +} + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#else // BOOST_VERSION >= 106100 + +#error Boost 1.61.0 or later is required to use x3 parse + +#endif // BOOST_VERSION >= 106100 + +#endif // defined(MSGPACK_USE_X3_PARSE) + +#endif // MSGPACK_V3_X3_UNPACK_HPP diff --git a/include/msgpack/v3/x3_unpack_decl.hpp b/include/msgpack/v3/x3_unpack_decl.hpp new file mode 100644 index 00000000..b6994476 --- /dev/null +++ b/include/msgpack/v3/x3_unpack_decl.hpp @@ -0,0 +1,65 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2017 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_X3_UNPACK_DECL_HPP +#define MSGPACK_V3_X3_UNPACK_DECL_HPP + +#if defined(MSGPACK_USE_X3_PARSE) + +#include "msgpack/v2/x3_unpack_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +namespace detail { + +using v2::detail::unpack_imp; + +} // detail + +template +msgpack::object_handle unpack( + Iterator&& begin, Iterator&& end, + bool& referenced, + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, + unpack_limit const& limit = unpack_limit()); + +template +msgpack::object_handle unpack( + Iterator&& begin, Iterator&& end, + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, + unpack_limit const& limit = unpack_limit()); + +template +msgpack::object unpack( + msgpack::zone& z, + Iterator&& begin, Iterator&& end, + bool& referenced, + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, + unpack_limit const& limit = unpack_limit()); + +template +msgpack::object unpack( + msgpack::zone& z, + Iterator&& begin, Iterator&& end, + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, + unpack_limit const& limit = unpack_limit()); + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // defined(MSGPACK_USE_X3_PARSE) + +#endif // MSGPACK_V3_X3_UNPACK_DECL_HPP diff --git a/include/msgpack/v3/zbuffer_decl.hpp b/include/msgpack/v3/zbuffer_decl.hpp new file mode 100644 index 00000000..ef7a8989 --- /dev/null +++ b/include/msgpack/v3/zbuffer_decl.hpp @@ -0,0 +1,29 @@ +// +// MessagePack for C++ deflate buffer implementation +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_ZBUFFER_DECL_HPP +#define MSGPACK_V3_ZBUFFER_DECL_HPP + +#include "msgpack/v2/zbuffer_decl.hpp" + +namespace msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v3) { +/// @endcond + +using v2::zbuffer; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v3) +/// @endcond + +} // namespace msgpack + +#endif // MSGPACK_V3_ZBUFFER_DECL_HPP diff --git a/include/msgpack/v3/zone_decl.hpp b/include/msgpack/v3/zone_decl.hpp new file mode 100644 index 00000000..ae4f2b27 --- /dev/null +++ b/include/msgpack/v3/zone_decl.hpp @@ -0,0 +1,21 @@ +// +// MessagePack for C++ memory pool +// +// Copyright (C) 2008-2018 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_V3_ZONE_DECL_HPP +#define MSGPACK_V3_ZONE_DECL_HPP + +#include "msgpack/cpp_config.hpp" + +#if defined(MSGPACK_USE_CPP03) +#include "msgpack/v3/detail/cpp03_zone_decl.hpp" +#else // MSGPACK_USE_CPP03 +#include "msgpack/v3/detail/cpp11_zone_decl.hpp" +#endif // MSGPACK_USE_CPP03 + +#endif // MSGPACK_V3_ZONE_DECL_HPP diff --git a/include/msgpack/version_master.h b/include/msgpack/version_master.h index 45569412..08b17ac3 100644 --- a/include/msgpack/version_master.h +++ b/include/msgpack/version_master.h @@ -1,3 +1,3 @@ -#define MSGPACK_VERSION_MAJOR 2 -#define MSGPACK_VERSION_MINOR 1 -#define MSGPACK_VERSION_REVISION 5 +#define MSGPACK_VERSION_MAJOR 3 +#define MSGPACK_VERSION_MINOR 0 +#define MSGPACK_VERSION_REVISION 0 diff --git a/include/msgpack/versioning.hpp b/include/msgpack/versioning.hpp index a8e6b968..379e715c 100644 --- a/include/msgpack/versioning.hpp +++ b/include/msgpack/versioning.hpp @@ -11,7 +11,7 @@ #define MSGPACK_VERSIONING_HPP #if !defined(MSGPACK_DEFAULT_API_VERSION) -#define MSGPACK_DEFAULT_API_VERSION 2 +#define MSGPACK_DEFAULT_API_VERSION 3 #endif #define MSGPACK_DEFAULT_API_NS MSGPACK_DETAIL_PP_CAT(v, MSGPACK_DEFAULT_API_VERSION) @@ -20,6 +20,8 @@ #define MSGPACK_DETAIL_PP_ENABLE_NS_v1 () #elif MSGPACK_DEFAULT_API_VERSION == 2 #define MSGPACK_DETAIL_PP_ENABLE_NS_v2 () +#elif MSGPACK_DEFAULT_API_VERSION == 3 +#define MSGPACK_DETAIL_PP_ENABLE_NS_v3 () #else #error #endif diff --git a/include/msgpack/vrefbuffer_decl.hpp b/include/msgpack/vrefbuffer_decl.hpp index 8d760211..1c32d0e6 100644 --- a/include/msgpack/vrefbuffer_decl.hpp +++ b/include/msgpack/vrefbuffer_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/vrefbuffer_decl.hpp" #include "msgpack/v2/vrefbuffer_decl.hpp" +#include "msgpack/v3/vrefbuffer_decl.hpp" #endif // MSGPACK_VREFBUFFER_DECL_HPP diff --git a/include/msgpack/x3_parse.hpp b/include/msgpack/x3_parse.hpp new file mode 100644 index 00000000..13ac7501 --- /dev/null +++ b/include/msgpack/x3_parse.hpp @@ -0,0 +1,15 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_X3_PARSE_HPP +#define MSGPACK_X3_PARSE_HPP + +#include "msgpack/v2/x3_parse.hpp" + +#endif // MSGPACK_X3_PARSE_HPP diff --git a/include/msgpack/x3_parse_decl.hpp b/include/msgpack/x3_parse_decl.hpp new file mode 100644 index 00000000..9a2258d6 --- /dev/null +++ b/include/msgpack/x3_parse_decl.hpp @@ -0,0 +1,16 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_X3_PARSE_DECL_HPP +#define MSGPACK_X3_PARSE_DECL_HPP + +#include "msgpack/v2/x3_parse_decl.hpp" +#include "msgpack/v3/x3_parse_decl.hpp" + +#endif // MSGPACK_X3_PARSE_DECL_HPP diff --git a/include/msgpack/x3_unpack.hpp b/include/msgpack/x3_unpack.hpp new file mode 100644 index 00000000..7fa956ae --- /dev/null +++ b/include/msgpack/x3_unpack.hpp @@ -0,0 +1,16 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_X3_UNPACK_HPP +#define MSGPACK_X3_UNPACK_HPP + +#include "msgpack/v2/x3_unpack.hpp" +#include "msgpack/v3/x3_unpack.hpp" + +#endif // MSGPACK_X3_UNPACK_HPP diff --git a/include/msgpack/x3_unpack_decl.hpp b/include/msgpack/x3_unpack_decl.hpp new file mode 100644 index 00000000..e67216d9 --- /dev/null +++ b/include/msgpack/x3_unpack_decl.hpp @@ -0,0 +1,16 @@ +// +// MessagePack for C++ deserializing routine +// +// Copyright (C) 2018 KONDO Takatoshi +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef MSGPACK_X3_UNPACK_DECL_HPP +#define MSGPACK_X3_UNPACK_DECL_HPP + +#include "msgpack/v2/x3_unpack_decl.hpp" +#include "msgpack/v3/x3_unpack_decl.hpp" + +#endif // MSGPACK_X3_UNPACK_DECL_HPP diff --git a/include/msgpack/zbuffer_decl.hpp b/include/msgpack/zbuffer_decl.hpp index b47220cd..1c8495c9 100644 --- a/include/msgpack/zbuffer_decl.hpp +++ b/include/msgpack/zbuffer_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/zbuffer_decl.hpp" #include "msgpack/v2/zbuffer_decl.hpp" +#include "msgpack/v3/zbuffer_decl.hpp" #endif // MSGPACK_ZBUFFER_DECL_HPP diff --git a/include/msgpack/zone_decl.hpp b/include/msgpack/zone_decl.hpp index e8d8b3bc..6adef23d 100644 --- a/include/msgpack/zone_decl.hpp +++ b/include/msgpack/zone_decl.hpp @@ -12,5 +12,6 @@ #include "msgpack/v1/zone_decl.hpp" #include "msgpack/v2/zone_decl.hpp" +#include "msgpack/v3/zone_decl.hpp" #endif // MSGPACK_ZONE_DECL_HPP diff --git a/src/unpack.c b/src/unpack.c index e7763864..a40f2aab 100644 --- a/src/unpack.c +++ b/src/unpack.c @@ -649,19 +649,19 @@ msgpack_unpack_next(msgpack_unpacked* result, ctx.user.referenced = false; e = template_execute(&ctx, data, len, &noff); + + if(off != NULL) { *off = noff; } + if(e < 0) { msgpack_zone_free(result->zone); result->zone = NULL; return e; } - if(e == 0) { return MSGPACK_UNPACK_CONTINUE; } - if(off != NULL) { *off = noff; } - result->data = template_data(&ctx); return MSGPACK_UNPACK_SUCCESS; diff --git a/test/msgpack_x3_parse.cpp b/test/msgpack_x3_parse.cpp index d01d5c18..40f61d31 100644 --- a/test/msgpack_x3_parse.cpp +++ b/test/msgpack_x3_parse.cpp @@ -2,11 +2,17 @@ #include #include - -#if defined(MSGPACK_USE_X3_PARSE) +#include #include +// To avoid link error +TEST(MSGPACK_X3_PARSE, dummy) +{ +} + +#if defined(MSGPACK_USE_X3_PARSE) && MSGPACK_DEFAULT_API_VERSION >= 2 + using namespace std; const double kEPS = 1e-10; @@ -826,4 +832,4 @@ TEST(MSGPACK_X3_PARSE, unpack_zone_3) EXPECT_EQ(v, obj.as()); } -#endif // defined(MSGPACK_USE_X3_PARSE) +#endif // defined(MSGPACK_USE_X3_PARSE) && MSGPACK_DEFAULT_API_VERSION >= 2 diff --git a/test/pack_unpack.cpp b/test/pack_unpack.cpp index 68619ca8..2a443ad6 100644 --- a/test/pack_unpack.cpp +++ b/test/pack_unpack.cpp @@ -370,7 +370,11 @@ TEST(unpack, insufficient_bytes_ref) } catch (msgpack::insufficient_bytes const&) { EXPECT_TRUE(true); +#if MSGPACK_DEFAULT_API_VERSION < 3 EXPECT_EQ(off, 0u); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(1u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 } } @@ -387,7 +391,11 @@ TEST(unpack, insufficient_bytes_object_handle) } catch (msgpack::insufficient_bytes const&) { EXPECT_TRUE(true); +#if MSGPACK_DEFAULT_API_VERSION < 3 EXPECT_EQ(off, 0u); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(1u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 } } @@ -405,7 +413,11 @@ TEST(unpack, insufficient_bytes_zone) } catch (msgpack::insufficient_bytes const&) { EXPECT_TRUE(true); +#if MSGPACK_DEFAULT_API_VERSION < 3 EXPECT_EQ(off, 0u); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(1u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 } } diff --git a/test/pack_unpack_c.cpp b/test/pack_unpack_c.cpp index fb3ca8d8..234216fb 100644 --- a/test/pack_unpack_c.cpp +++ b/test/pack_unpack_c.cpp @@ -83,7 +83,7 @@ TEST(pack, insufficient) success = msgpack_unpack_next(&msg, sbuf->data, 1, &offset); EXPECT_EQ(MSGPACK_UNPACK_CONTINUE, success); - EXPECT_EQ(0u, offset); + EXPECT_EQ(1u, offset); msgpack_unpacked_destroy(&msg); diff --git a/test/visitor.cpp b/test/visitor.cpp index 2652b04d..23eecb30 100644 --- a/test/visitor.cpp +++ b/test/visitor.cpp @@ -9,7 +9,7 @@ TEST(visitor, dummy) #if MSGPACK_DEFAULT_API_VERSION >= 2 -struct json_like_visitor : msgpack::v2::null_visitor { +struct json_like_visitor : msgpack::null_visitor { json_like_visitor(std::string& s):m_s(s) {} bool visit_nil() { @@ -91,12 +91,12 @@ TEST(visitor, json_like) std::string json_like; json_like_visitor v(json_like); std::size_t off = 0; - bool ret = msgpack::v2::parse(ss.str().data(), ss.str().size(), off, v); + bool ret = msgpack::parse(ss.str().data(), ss.str().size(), off, v); EXPECT_TRUE(ret); EXPECT_EQ("{\"key\":[42,null,true]}", json_like); } -struct parse_error_check_visitor : msgpack::v2::null_visitor { +struct parse_error_check_visitor : msgpack::null_visitor { parse_error_check_visitor(bool& called):m_called(called) {} void parse_error(size_t parsed_offset, size_t error_offset) { EXPECT_EQ(static_cast(1), parsed_offset); @@ -112,12 +112,17 @@ TEST(visitor, parse_error) parse_error_check_visitor v(called); std::size_t off = 0; char const data[] = { static_cast(0x93u), 0x01u, static_cast(0xc1u), 0x03u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); + bool ret = msgpack::parse(data, sizeof(data), off, v); EXPECT_FALSE(ret); EXPECT_TRUE(called); +#if MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(0u, off); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(2u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 } -struct insuf_bytes_check_visitor : msgpack::v2::null_visitor { +struct insuf_bytes_check_visitor : msgpack::null_visitor { insuf_bytes_check_visitor(bool& called):m_called(called) {} void insufficient_bytes(size_t parsed_offset, size_t error_offset) { EXPECT_EQ(static_cast(2), parsed_offset); @@ -133,9 +138,348 @@ TEST(visitor, insuf_bytes) insuf_bytes_check_visitor v(called); std::size_t off = 0; char const data[] = { static_cast(0x93u), 0x01u, 0x01u }; - bool ret = msgpack::v2::parse(data, sizeof(data), off, v); + bool ret = msgpack::parse(data, sizeof(data), off, v); EXPECT_FALSE(ret); EXPECT_TRUE(called); + // Even if MSGPACK_DEFAULT_API_VERSION is 2, then off is updated + // in the case of insufficient bytes. + EXPECT_EQ(3u, off); +} + +struct return_false_array_val_visitor : msgpack::null_visitor { + return_false_array_val_visitor(std::size_t& times):m_times(times) {} + bool visit_positive_integer(uint64_t) { + if (++m_times == 2) return false; + return true; + } + std::size_t& m_times; +}; + +TEST(visitor, return_false_array_val) +{ + std::size_t times = 0; + return_false_array_val_visitor v(times); + std::size_t off = 0; + char const data[] = { static_cast(0x93u), 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(2u, times); +#if MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(0u, off); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(2u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 +} + +struct return_false_start_array_item_visitor : msgpack::null_visitor { + return_false_start_array_item_visitor(std::size_t& times):m_times(times) {} + bool start_array_item() { + if (++m_times == 2) return false; + return true; + } + std::size_t& m_times; +}; + +TEST(visitor, return_false_start_array_item) +{ + std::size_t times = 0; + return_false_start_array_item_visitor v(times); + std::size_t off = 0; + char const data[] = { static_cast(0x93u), 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(2u, times); +#if MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(0u, off); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(2u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 +} + +struct return_false_end_array_item_visitor : msgpack::null_visitor { + return_false_end_array_item_visitor(std::size_t& times):m_times(times) {} + bool end_array_item() { + if (++m_times == 2) return false; + return true; + } + std::size_t& m_times; +}; + +TEST(visitor, return_false_end_array_item) +{ + std::size_t times = 0; + return_false_end_array_item_visitor v(times); + std::size_t off = 0; + char const data[] = { static_cast(0x93u), 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(2u, times); +#if MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(0u, off); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(2u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 +} + +struct return_false_start_array_visitor : msgpack::null_visitor { + bool start_array(uint32_t) { + return false; + } +}; + +TEST(visitor, return_false_start_array) +{ + return_false_start_array_visitor v; + std::size_t off = 0; + char const data[] = { static_cast(0x93u), 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(0u, off); +} + +struct return_false_start_array0_visitor : msgpack::null_visitor { + bool start_array(uint32_t) { + return false; + } +}; + +TEST(visitor, return_false_start_array0) +{ + return_false_start_array0_visitor v; + std::size_t off = 0; + char const data[] = { static_cast(0x90u) }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(0u, off); +} + +struct return_false_end_array_visitor : msgpack::null_visitor { + bool end_array() { + return false; + } +}; + +TEST(visitor, return_false_end_array) +{ + return_false_end_array_visitor v; + std::size_t off = 0; + char const data[] = { static_cast(0x93u), 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); +#if MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(0u, off); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(3u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 +} + +struct return_false_end_array0_visitor : msgpack::null_visitor { + bool end_array() { + return false; + } +}; + +TEST(visitor, return_false_end_array0) +{ + return_false_end_array0_visitor v; + std::size_t off = 0; + char const data[] = { static_cast(0x90u) }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(0u, off); +} + +struct return_false_map_val_visitor : msgpack::null_visitor { + return_false_map_val_visitor(std::size_t& times):m_times(times) {} + bool visit_positive_integer(uint64_t) { + if (++m_times == 2) return false; + return true; + } + std::size_t& m_times; +}; + +TEST(visitor, return_false_map_val) +{ + std::size_t times = 0; + return_false_map_val_visitor v(times); + std::size_t off = 0; + char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(2u, times); +#if MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(0u, off); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(2u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 +} + +struct return_false_start_map_key_visitor : msgpack::null_visitor { + return_false_start_map_key_visitor(std::size_t& times):m_times(times) {} + bool start_map_key() { + if (++m_times == 2) return false; + return true; + } + std::size_t& m_times; +}; + +TEST(visitor, return_false_start_map_key) +{ + std::size_t times = 0; + return_false_start_map_key_visitor v(times); + std::size_t off = 0; + char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(2u, times); +#if MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(0u, off); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(3u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 +} + +struct return_false_end_map_key_visitor : msgpack::null_visitor { + return_false_end_map_key_visitor(std::size_t& times):m_times(times) {} + bool end_map_key() { + if (++m_times == 2) return false; + return true; + } + std::size_t& m_times; +}; + +TEST(visitor, return_false_end_map_key) +{ + std::size_t times = 0; + return_false_end_map_key_visitor v(times); + std::size_t off = 0; + char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(2u, times); +#if MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(0u, off); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(3u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 +} + +struct return_false_start_map_value_visitor : msgpack::null_visitor { + return_false_start_map_value_visitor(std::size_t& times):m_times(times) {} + bool start_map_value() { + if (++m_times == 2) return false; + return true; + } + std::size_t& m_times; +}; + +TEST(visitor, return_false_start_map_value) +{ + std::size_t times = 0; + return_false_start_map_value_visitor v(times); + std::size_t off = 0; + char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(2u, times); +#if MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(0u, off); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(4u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 +} + +struct return_false_end_map_value_visitor : msgpack::null_visitor { + return_false_end_map_value_visitor(std::size_t& times):m_times(times) {} + bool end_map_value() { + if (++m_times == 2) return false; + return true; + } + std::size_t& m_times; +}; + +TEST(visitor, return_false_end_map_value) +{ + std::size_t times = 0; + return_false_end_map_value_visitor v(times); + std::size_t off = 0; + char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(2u, times); +#if MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(0u, off); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(4u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 +} + +struct return_false_start_map_visitor : msgpack::null_visitor { + bool start_map(uint32_t) { + return false; + } +}; + +TEST(visitor, return_false_start_map) +{ + return_false_start_map_visitor v; + std::size_t off = 0; + char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(0u, off); +} + +struct return_false_start_map0_visitor : msgpack::null_visitor { + bool start_map(uint32_t) { + return false; + } +}; + +TEST(visitor, return_false_start_map0) +{ + return_false_start_map0_visitor v; + std::size_t off = 0; + char const data[] = { static_cast(0x80u) }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(0u, off); +} + +struct return_false_end_map_visitor : msgpack::null_visitor { + bool end_map() { + return false; + } +}; + +TEST(visitor, return_false_end_map) +{ + return_false_end_map_visitor v; + std::size_t off = 0; + char const data[] = { static_cast(0x83u), 0x01u, 0x02u, 0x03u, 0x01u, 0x02u, 0x03u }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); +#if MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(0u, off); +#else // MSGPACK_DEFAULT_API_VERSION < 3 + EXPECT_EQ(6u, off); +#endif // MSGPACK_DEFAULT_API_VERSION < 3 +} + +struct return_false_end_map0_visitor : msgpack::null_visitor { + bool end_map() { + return false; + } +}; + +TEST(visitor, return_false_end_map0) +{ + return_false_end_map0_visitor v; + std::size_t off = 0; + char const data[] = { static_cast(0x80u) }; + bool ret = msgpack::parse(data, sizeof(data), off, v); + EXPECT_FALSE(ret); + EXPECT_EQ(0u, off); } #endif // MSGPACK_DEFAULT_API_VERSION >= 1 From f8dc0f0d046442f046200aa1e7e2322309a4e6fe Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Sun, 8 Apr 2018 21:17:29 +0900 Subject: [PATCH 3/4] Fixed #663. --- include/msgpack/v3/parse.hpp | 3 +- test/pack_unpack.cpp | 84 ++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/include/msgpack/v3/parse.hpp b/include/msgpack/v3/parse.hpp index 9b0b0a29..b833f3e3 100644 --- a/include/msgpack/v3/parse.hpp +++ b/include/msgpack/v3/parse.hpp @@ -71,6 +71,7 @@ private: return PARSE_STOP_VISITOR; } parse_return ret = m_stack.consume(holder(), m_current); + ++m_current; if (ret != PARSE_CONTINUE) { off = m_current - m_start; return ret; @@ -82,12 +83,12 @@ private: return PARSE_STOP_VISITOR; } parse_return ret = m_stack.push(holder(), sv.type(), static_cast(size)); + ++m_current; if (ret != PARSE_CONTINUE) { off = m_current - m_start; return ret; } } - ++m_current; m_cs = MSGPACK_CS_HEADER; return PARSE_CONTINUE; } diff --git a/test/pack_unpack.cpp b/test/pack_unpack.cpp index 2a443ad6..aba452ec 100644 --- a/test/pack_unpack.cpp +++ b/test/pack_unpack.cpp @@ -513,3 +513,87 @@ TEST(unpack, int_off_larger_than_length) EXPECT_TRUE(thrown); EXPECT_EQ(off, 2u); } + +TEST(unpack, empty_array_fix) +{ + std::string buf; + buf.push_back(static_cast(0x90)); + std::size_t off = 0; + + msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off); + EXPECT_EQ(oh.get().type, msgpack::type::ARRAY); + EXPECT_EQ(oh.get().via.array.size, 0u); + EXPECT_EQ(off, 1u); +} + +TEST(unpack, empty_array_16) +{ + std::string buf; + buf.push_back(static_cast(0xdc)); + buf.push_back(static_cast(0x00)); + buf.push_back(static_cast(0x00)); + std::size_t off = 0; + + msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off); + EXPECT_EQ(oh.get().type, msgpack::type::ARRAY); + EXPECT_EQ(oh.get().via.array.size, 0u); + EXPECT_EQ(off, 3u); +} + +TEST(unpack, empty_array_32) +{ + std::string buf; + buf.push_back(static_cast(0xdd)); + buf.push_back(static_cast(0x00)); + buf.push_back(static_cast(0x00)); + buf.push_back(static_cast(0x00)); + buf.push_back(static_cast(0x00)); + std::size_t off = 0; + + msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off); + EXPECT_EQ(oh.get().type, msgpack::type::ARRAY); + EXPECT_EQ(oh.get().via.array.size, 0u); + EXPECT_EQ(off, 5u); +} + +TEST(unpack, empty_map_fix) +{ + std::string buf; + buf.push_back(static_cast(0x80)); + std::size_t off = 0; + + msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off); + EXPECT_EQ(oh.get().type, msgpack::type::MAP); + EXPECT_EQ(oh.get().via.map.size, 0u); + EXPECT_EQ(off, 1u); +} + +TEST(unpack, empty_map_16) +{ + std::string buf; + buf.push_back(static_cast(0xde)); + buf.push_back(static_cast(0x00)); + buf.push_back(static_cast(0x00)); + std::size_t off = 0; + + msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off); + EXPECT_EQ(oh.get().type, msgpack::type::MAP); + EXPECT_EQ(oh.get().via.map.size, 0u); + EXPECT_EQ(off, 3u); +} + +TEST(unpack, empty_map_32) +{ + std::string buf; + buf.push_back(static_cast(0xdf)); + buf.push_back(static_cast(0x00)); + buf.push_back(static_cast(0x00)); + buf.push_back(static_cast(0x00)); + buf.push_back(static_cast(0x00)); + std::size_t off = 0; + + msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off); + EXPECT_EQ(oh.get().type, msgpack::type::MAP); + EXPECT_EQ(oh.get().via.map.size, 0u); + EXPECT_EQ(off, 5u); +} From 458b4c0363f05077015b636cf513f0f9a32566bf Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Sun, 8 Apr 2018 23:24:17 +0900 Subject: [PATCH 4/4] Removed redundant version namespace qualification. --- include/msgpack/v2/unpack.hpp | 56 +++++++++++++++--------------- include/msgpack/v2/unpack_decl.hpp | 28 +++++++-------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/include/msgpack/v2/unpack.hpp b/include/msgpack/v2/unpack.hpp index 2cf80846..993643ab 100644 --- a/include/msgpack/v2/unpack.hpp +++ b/include/msgpack/v2/unpack.hpp @@ -36,10 +36,10 @@ class unpacker : public parser, public detail::create_object_visitor { typedef parser parser_t; public: - unpacker(msgpack::v2::unpack_reference_func f = &unpacker::default_reference_func, + 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, - msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()) + unpack_limit const& limit = unpack_limit()) :parser_t(m_finalizer, initial_buffer_size), detail::create_object_visitor(f, user_data, limit), m_z(new msgpack::zone), @@ -147,8 +147,8 @@ inline bool unpacker::flush_zone() inline msgpack::object_handle unpack( const char* data, std::size_t len, std::size_t& off, bool& referenced, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit + unpack_reference_func f, void* user_data, + unpack_limit const& limit ) { msgpack::object obj; @@ -173,8 +173,8 @@ inline msgpack::object_handle unpack( inline msgpack::object_handle unpack( const char* data, std::size_t len, std::size_t& off, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { bool referenced; return msgpack::v2::unpack(data, len, off, referenced, f, user_data, limit); @@ -182,8 +182,8 @@ inline msgpack::object_handle unpack( inline msgpack::object_handle unpack( const char* data, std::size_t len, bool& referenced, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { std::size_t off = 0; return msgpack::v2::unpack(data, len, off, referenced, f, user_data, limit); @@ -191,8 +191,8 @@ inline msgpack::object_handle unpack( inline msgpack::object_handle unpack( const char* data, std::size_t len, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { bool referenced; std::size_t off = 0; @@ -202,8 +202,8 @@ inline msgpack::object_handle unpack( inline void unpack( msgpack::object_handle& result, const char* data, std::size_t len, std::size_t& off, bool& referenced, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { msgpack::object obj; msgpack::unique_ptr z(new msgpack::zone); @@ -231,8 +231,8 @@ inline void unpack( inline void unpack( msgpack::object_handle& result, const char* data, std::size_t len, std::size_t& off, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { bool referenced; msgpack::v2::unpack(result, data, len, off, referenced, f, user_data, limit); @@ -241,8 +241,8 @@ inline void unpack( inline void unpack( msgpack::object_handle& result, const char* data, std::size_t len, bool& referenced, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { std::size_t off = 0; msgpack::v2::unpack(result, data, len, off, referenced, f, user_data, limit); @@ -251,8 +251,8 @@ inline void unpack( inline void unpack( msgpack::object_handle& result, const char* data, std::size_t len, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { bool referenced; std::size_t off = 0; @@ -263,8 +263,8 @@ inline void unpack( inline msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, std::size_t& off, bool& referenced, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { msgpack::object obj; std::size_t noff = off; @@ -288,8 +288,8 @@ inline msgpack::object unpack( inline msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, std::size_t& off, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { bool referenced; return msgpack::v2::unpack(z, data, len, off, referenced, f, user_data, limit); @@ -298,8 +298,8 @@ inline msgpack::object unpack( inline msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, bool& referenced, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { std::size_t off = 0; return msgpack::v2::unpack(z, data, len, off, referenced, f, user_data, limit); @@ -308,8 +308,8 @@ inline msgpack::object unpack( inline msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit) + unpack_reference_func f, void* user_data, + unpack_limit const& limit) { bool referenced; std::size_t off = 0; @@ -321,8 +321,8 @@ namespace detail { inline parse_return unpack_imp(const char* data, std::size_t len, std::size_t& off, msgpack::zone& result_zone, msgpack::object& result, bool& referenced, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, - msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()) + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, + unpack_limit const& limit = unpack_limit()) { create_object_visitor v(f, user_data, limit); v.set_zone(result_zone); diff --git a/include/msgpack/v2/unpack_decl.hpp b/include/msgpack/v2/unpack_decl.hpp index b592236e..41312dba 100644 --- a/include/msgpack/v2/unpack_decl.hpp +++ b/include/msgpack/v2/unpack_decl.hpp @@ -102,7 +102,7 @@ class basic_unpacker; */ msgpack::object_handle unpack( const char* data, std::size_t len, std::size_t& off, bool& referenced, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -118,7 +118,7 @@ msgpack::object_handle unpack( */ msgpack::object_handle unpack( const char* data, std::size_t len, std::size_t& off, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -134,7 +134,7 @@ msgpack::object_handle unpack( */ msgpack::object_handle unpack( const char* data, std::size_t len, bool& referenced, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -149,7 +149,7 @@ msgpack::object_handle unpack( */ msgpack::object_handle unpack( const char* data, std::size_t len, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); /// Unpack msgpack::object from a buffer. @@ -168,7 +168,7 @@ msgpack::object_handle unpack( void unpack( msgpack::object_handle& result, const char* data, std::size_t len, std::size_t& off, bool& referenced, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -185,7 +185,7 @@ void unpack( void unpack( msgpack::object_handle& result, const char* data, std::size_t len, std::size_t& off, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -202,7 +202,7 @@ void unpack( void unpack( msgpack::object_handle& result, const char* data, std::size_t len, bool& referenced, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -218,7 +218,7 @@ void unpack( void unpack( msgpack::object_handle& result, const char* data, std::size_t len, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -237,7 +237,7 @@ void unpack( msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, std::size_t& off, bool& referenced, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -255,7 +255,7 @@ msgpack::object unpack( msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, std::size_t& off, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -273,7 +273,7 @@ msgpack::object unpack( msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, bool& referenced, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); /// Unpack msgpack::object from a buffer. /** @@ -290,15 +290,15 @@ msgpack::object unpack( msgpack::object unpack( msgpack::zone& z, const char* data, std::size_t len, - msgpack::v2::unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, msgpack::v2::unpack_limit const& limit = msgpack::v2::unpack_limit()); + unpack_reference_func f = MSGPACK_NULLPTR, void* user_data = MSGPACK_NULLPTR, unpack_limit const& limit = unpack_limit()); namespace detail { parse_return unpack_imp(const char* data, std::size_t len, std::size_t& off, msgpack::zone& result_zone, msgpack::object& result, bool& referenced, - msgpack::v2::unpack_reference_func f, void* user_data, - msgpack::v2::unpack_limit const& limit); + unpack_reference_func f, void* user_data, + unpack_limit const& limit); } // detail