summaryrefslogtreecommitdiffstats
path: root/third_party/msgpack/include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/msgpack/include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp')
-rw-r--r--third_party/msgpack/include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/third_party/msgpack/include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp b/third_party/msgpack/include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp
new file mode 100644
index 0000000000..9b6d5d4959
--- /dev/null
+++ b/third_party/msgpack/include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp
@@ -0,0 +1,120 @@
+//
+// MessagePack for C++ static resolution routine
+//
+// Copyright (C) 2008-2015 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_V1_CPP11_MSGPACK_TUPLE_DECL_HPP
+#define MSGPACK_V1_CPP11_MSGPACK_TUPLE_DECL_HPP
+
+#include "msgpack/versioning.hpp"
+#include "msgpack/object_fwd.hpp"
+#include "msgpack/meta.hpp"
+
+#include <tuple>
+
+namespace msgpack {
+
+/// @cond
+MSGPACK_API_VERSION_NAMESPACE(v1) {
+/// @endcond
+
+namespace type {
+ // tuple
+ using std::get;
+ using std::tuple_size;
+ using std::tuple_element;
+ using std::uses_allocator;
+ using std::ignore;
+ using std::swap;
+
+ template< class... Types >
+ class tuple : public std::tuple<Types...> {
+ public:
+ using base = std::tuple<Types...>;
+
+ tuple(tuple const&) = default;
+ tuple(tuple&&) = default;
+
+ template<typename... OtherTypes>
+ tuple(OtherTypes&&... other):base(std::forward<OtherTypes>(other)...) {}
+
+ template<typename... OtherTypes>
+ tuple(tuple<OtherTypes...> const& other):base(static_cast<std::tuple<OtherTypes...> const&>(other)) {}
+ template<typename... OtherTypes>
+ tuple(tuple<OtherTypes...> && other):base(static_cast<std::tuple<OtherTypes...> &&>(other)) {}
+
+ tuple& operator=(tuple const&) = default;
+ tuple& operator=(tuple&&) = default;
+
+ template<typename... OtherTypes>
+ tuple& operator=(tuple<OtherTypes...> const& other) {
+ *static_cast<base*>(this) = static_cast<std::tuple<OtherTypes...> const&>(other);
+ return *this;
+ }
+ template<typename... OtherTypes>
+ tuple& operator=(tuple<OtherTypes...> && other) {
+ *static_cast<base*>(this) = static_cast<std::tuple<OtherTypes...> &&>(other);
+ return *this;
+ }
+
+ template< std::size_t I>
+ typename tuple_element<I, base >::type&
+ get() & { return std::get<I>(*this); }
+
+ template< std::size_t I>
+ typename tuple_element<I, base >::type const&
+ get() const& { return std::get<I>(*this); }
+
+ template< std::size_t I>
+ typename tuple_element<I, base >::type&&
+ get() && { return std::get<I>(*this); }
+
+ std::size_t size() const { return sizeof...(Types); }
+ };
+
+ template <class... Args>
+ tuple<Args...> make_tuple(Args&&... args);
+
+ template<class... Args>
+ tuple<Args&&...> forward_as_tuple (Args&&... args) noexcept;
+
+ template <class... Tuples>
+ auto tuple_cat(Tuples&&... args) ->
+ decltype(
+ std::tuple_cat(std::forward<typename std::remove_reference<Tuples>::type::base>(args)...)
+ );
+
+ template <class... Args>
+ tuple<Args&...> tie(Args&... args);
+
+} // namespace type
+
+// --- Pack from tuple to packer stream ---
+template <typename Stream, typename Tuple, std::size_t N>
+struct MsgpackTuplePacker;
+
+// --- Convert from tuple to object ---
+template <typename... Args>
+struct MsgpackTupleAs;
+
+template <typename T, typename... Args>
+struct MsgpackTupleAsImpl;
+
+template <typename Tuple, std::size_t N>
+struct MsgpackTupleConverter;
+
+// --- Convert from tuple to object with zone ---
+template <typename Tuple, std::size_t N>
+struct MsgpackTupleToObjectWithZone;
+
+/// @cond
+} // MSGPACK_API_VERSION_NAMESPACE(v1)
+///@endcond
+
+} // namespace msgpack
+
+#endif // MSGPACK_V1_CPP11_MSGPACK_TUPLE_DECL_HPP