123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- //
- // 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<msgpack::zone> 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<msgpack::zone> 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
|