summaryrefslogtreecommitdiffstats
path: root/third_party/msgpack/include/msgpack/v3/unpack.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/msgpack/include/msgpack/v3/unpack.hpp')
-rw-r--r--third_party/msgpack/include/msgpack/v3/unpack.hpp192
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