diff options
Diffstat (limited to 'third_party/msgpack/include/msgpack/v3/unpack.hpp')
-rw-r--r-- | third_party/msgpack/include/msgpack/v3/unpack.hpp | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/third_party/msgpack/include/msgpack/v3/unpack.hpp b/third_party/msgpack/include/msgpack/v3/unpack.hpp new file mode 100644 index 0000000000..659411b682 --- /dev/null +++ b/third_party/msgpack/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<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 |