From 3ddeb08e6e33647017bc6c4599e87231e99476c9 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Sun, 12 Oct 2014 22:48:15 +0900 Subject: [PATCH 1/6] Added API versioning. --- CMakeLists.txt | 1 + erb/cpp03_define.hpp.erb | 6 ++ erb/cpp03_msgpack_tuple.hpp.erb | 5 ++ erb/cpp03_zone.hpp.erb | 5 ++ include/msgpack/adaptor/bool.hpp | 4 + include/msgpack/adaptor/char_ptr.hpp | 4 + include/msgpack/adaptor/cpp11/array.hpp | 5 ++ include/msgpack/adaptor/cpp11/array_char.hpp | 5 ++ .../msgpack/adaptor/cpp11/forward_list.hpp | 5 ++ include/msgpack/adaptor/cpp11/tuple.hpp | 8 +- include/msgpack/adaptor/deque.hpp | 3 + .../msgpack/adaptor/detail/cpp03_define.hpp | 6 ++ .../adaptor/detail/cpp03_msgpack_tuple.hpp | 5 ++ .../msgpack/adaptor/detail/cpp11_define.hpp | 6 ++ .../adaptor/detail/cpp11_msgpack_tuple.hpp | 8 +- include/msgpack/adaptor/fixint.hpp | 5 ++ include/msgpack/adaptor/float.hpp | 4 + include/msgpack/adaptor/int.hpp | 4 + include/msgpack/adaptor/list.hpp | 3 + include/msgpack/adaptor/map.hpp | 3 + include/msgpack/adaptor/nil.hpp | 4 + include/msgpack/adaptor/pair.hpp | 3 + include/msgpack/adaptor/raw.hpp | 5 ++ include/msgpack/adaptor/set.hpp | 4 + include/msgpack/adaptor/string.hpp | 3 + include/msgpack/adaptor/tr1/unordered_map.hpp | 3 + include/msgpack/adaptor/tr1/unordered_set.hpp | 3 + include/msgpack/adaptor/vector.hpp | 3 + include/msgpack/adaptor/vector_char.hpp | 5 ++ include/msgpack/cpp_config.hpp | 13 +++- include/msgpack/detail/cpp03_zone.hpp | 5 ++ include/msgpack/detail/cpp11_zone.hpp | 6 ++ include/msgpack/fbuffer.hpp | 5 +- include/msgpack/object.hpp | 4 + include/msgpack/pack.hpp | 6 +- include/msgpack/sbuffer.hpp | 11 ++- include/msgpack/unpack.hpp | 6 ++ include/msgpack/versioning.hpp | 77 +++++++++++++++++++ include/msgpack/vrefbuffer.hpp | 5 ++ include/msgpack/zbuffer.hpp | 5 +- src/Makefile.am | 1 + 41 files changed, 261 insertions(+), 11 deletions(-) create mode 100644 include/msgpack/versioning.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c2dcceb..f984283b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,6 +120,7 @@ IF (MSGPACK_ENABLE_CXX) include/msgpack/type.hpp include/msgpack/unpack.hpp include/msgpack/version.hpp + include/msgpack/versioning.hpp include/msgpack/vrefbuffer.hpp include/msgpack/zbuffer.hpp include/msgpack/zone.hpp diff --git a/erb/cpp03_define.hpp.erb b/erb/cpp03_define.hpp.erb index 27d165e0..2e4a9db6 100644 --- a/erb/cpp03_define.hpp.erb +++ b/erb/cpp03_define.hpp.erb @@ -18,6 +18,8 @@ #ifndef MSGPACK_CPP03_DEFINE_HPP #define MSGPACK_CPP03_DEFINE_HPP +#include "msgpack/versioning.hpp" + #define MSGPACK_DEFINE(...) \ template \ void msgpack_pack(Packer& pk) const \ @@ -37,6 +39,7 @@ // MSGPACK_ADD_ENUM must be used in the global namespace. #define MSGPACK_ADD_ENUM(enum) \ namespace msgpack { \ + MSGPACK_API_VERSION_NAMESPACE(v1) { \ template <> \ inline object const& operator>> (object const& o, enum& v) \ { \ @@ -58,9 +61,11 @@ } \ }; \ } \ + } \ } namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { namespace type { @@ -141,6 +146,7 @@ define, A<%=j%><%}%>> make_define(A0& a0<%1.upto(i) {|j|%>, <%}%> } // namespace type +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/erb/cpp03_msgpack_tuple.hpp.erb b/erb/cpp03_msgpack_tuple.hpp.erb index 930f5368..c3e5006b 100644 --- a/erb/cpp03_msgpack_tuple.hpp.erb +++ b/erb/cpp03_msgpack_tuple.hpp.erb @@ -18,10 +18,13 @@ #ifndef MSGPACK_CPP03_MSGPACK_TUPLE_HPP #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + namespace type { // FIXME operator== @@ -191,6 +194,8 @@ inline void operator<< ( } <%}%> +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack diff --git a/erb/cpp03_zone.hpp.erb b/erb/cpp03_zone.hpp.erb index da1656f5..25d69091 100644 --- a/erb/cpp03_zone.hpp.erb +++ b/erb/cpp03_zone.hpp.erb @@ -22,6 +22,7 @@ #include #include +#include "msgpack/versioning.hpp" #include "msgpack/cpp_config.hpp" #ifndef MSGPACK_ZONE_CHUNK_SIZE @@ -35,6 +36,8 @@ <% GENERATION_LIMIT = 15 %> namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + class zone { struct finalizer { finalizer(void (*func)(void*), void* data):m_func(func), m_data(data) {} @@ -301,6 +304,8 @@ T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>) } <%}%> +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #endif // MSGPACK_CPP03_ZONE_HPP diff --git a/include/msgpack/adaptor/bool.hpp b/include/msgpack/adaptor/bool.hpp index bdfb2408..e2b50a7a 100644 --- a/include/msgpack/adaptor/bool.hpp +++ b/include/msgpack/adaptor/bool.hpp @@ -18,11 +18,13 @@ #ifndef MSGPACK_TYPE_BOOL_HPP #define MSGPACK_TYPE_BOOL_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { inline object const& operator>> (object const& o, bool& v) { @@ -49,6 +51,8 @@ inline void operator<< (object::with_zone& o, bool v) { static_cast(o) << v; } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #endif /* msgpack/type/bool.hpp */ diff --git a/include/msgpack/adaptor/char_ptr.hpp b/include/msgpack/adaptor/char_ptr.hpp index 2ef6c98b..5566040a 100644 --- a/include/msgpack/adaptor/char_ptr.hpp +++ b/include/msgpack/adaptor/char_ptr.hpp @@ -18,11 +18,14 @@ #ifndef MSGPACK_TYPE_CHAR_PTR_HPP #define MSGPACK_TYPE_CHAR_PTR_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + template inline packer& operator<< (packer& o, const char* v) { @@ -50,6 +53,7 @@ inline void operator<< (object& o, const char* v) o.via.str.size = static_cast(size); } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/cpp11/array.hpp b/include/msgpack/adaptor/cpp11/array.hpp index 5c1cb3b0..5f7ac1b7 100644 --- a/include/msgpack/adaptor/cpp11/array.hpp +++ b/include/msgpack/adaptor/cpp11/array.hpp @@ -19,6 +19,8 @@ #ifndef MSGPACK_CPP11_ARRAY_HPP #define MSGPACK_CPP11_ARRAY_HPP +#include "msgpack/versioning.hpp" + #include #include "msgpack/object.hpp" @@ -26,6 +28,8 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + template inline object const& operator>> (object const& o, std::array& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -64,6 +68,7 @@ inline void operator<< (object::with_zone& o, const std::array& v) { } } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/cpp11/array_char.hpp b/include/msgpack/adaptor/cpp11/array_char.hpp index a7cfcc2f..17a8605e 100644 --- a/include/msgpack/adaptor/cpp11/array_char.hpp +++ b/include/msgpack/adaptor/cpp11/array_char.hpp @@ -18,11 +18,14 @@ #ifndef MSGPACK_TYPE_ARRAY_CHAR_HPP #define MSGPACK_TYPE_ARRAY_CHAR_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + template inline object const& operator>> (object const& o, std::array& v) { @@ -69,6 +72,8 @@ inline void operator<< (object::with_zone& o, const std::array& v) std::memcpy(ptr, v.data(), v.size()); } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #endif // MSGPACK_TYPE_ARRAY_CHAR_HPP diff --git a/include/msgpack/adaptor/cpp11/forward_list.hpp b/include/msgpack/adaptor/cpp11/forward_list.hpp index 68e5ac22..f1a442e2 100644 --- a/include/msgpack/adaptor/cpp11/forward_list.hpp +++ b/include/msgpack/adaptor/cpp11/forward_list.hpp @@ -19,6 +19,8 @@ #ifndef MSGPACK_CPP11_FORWARD_LIST_HPP #define MSGPACK_CPP11_FORWARD_LIST_HPP +#include "msgpack/versioning.hpp" + #include #include "msgpack/object.hpp" @@ -26,6 +28,8 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + template inline object const& operator>> (object const& o, std::forward_list& v) { @@ -64,6 +68,7 @@ inline void operator<< (object::with_zone& o, const std::forward_list& v) } } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/cpp11/tuple.hpp b/include/msgpack/adaptor/cpp11/tuple.hpp index 463c11a3..935c9fbf 100644 --- a/include/msgpack/adaptor/cpp11/tuple.hpp +++ b/include/msgpack/adaptor/cpp11/tuple.hpp @@ -18,6 +18,8 @@ #ifndef MSGPACK_CPP11_TUPLE_HPP #define MSGPACK_CPP11_TUPLE_HPP +#include "msgpack/versioning.hpp" + #include #include "msgpack/object.hpp" @@ -25,6 +27,8 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + // --- Pack ( from tuple to packer stream --- template struct StdTuplePacker { @@ -140,6 +144,8 @@ inline void operator<< ( StdTupleToObjectWithZone::convert(o, v); } -} // msgpack +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack #endif // MSGPACK_CPP11_TUPLE_HPP diff --git a/include/msgpack/adaptor/deque.hpp b/include/msgpack/adaptor/deque.hpp index f5609c88..11aad789 100644 --- a/include/msgpack/adaptor/deque.hpp +++ b/include/msgpack/adaptor/deque.hpp @@ -18,11 +18,13 @@ #ifndef MSGPACK_TYPE_DEQUE_HPP #define MSGPACK_TYPE_DEQUE_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { template inline object const& operator>> (object const& o, std::deque& v) @@ -70,6 +72,7 @@ inline void operator<< (object::with_zone& o, const std::deque& v) } } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/detail/cpp03_define.hpp b/include/msgpack/adaptor/detail/cpp03_define.hpp index 8e2b4b2a..5463b3a7 100644 --- a/include/msgpack/adaptor/detail/cpp03_define.hpp +++ b/include/msgpack/adaptor/detail/cpp03_define.hpp @@ -18,6 +18,8 @@ #ifndef MSGPACK_CPP03_DEFINE_HPP #define MSGPACK_CPP03_DEFINE_HPP +#include "msgpack/versioning.hpp" + #define MSGPACK_DEFINE(...) \ template \ void msgpack_pack(Packer& pk) const \ @@ -37,6 +39,7 @@ // MSGPACK_ADD_ENUM must be used in the global namespace. #define MSGPACK_ADD_ENUM(enum) \ namespace msgpack { \ + MSGPACK_API_VERSION_NAMESPACE(v1) { \ template <> \ inline object const& operator>> (object const& o, enum& v) \ { \ @@ -58,9 +61,11 @@ } \ }; \ } \ + } \ } namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { namespace type { @@ -3458,6 +3463,7 @@ define #define MSGPACK_DEFINE(...) \ @@ -39,6 +41,7 @@ // MSGPACK_ADD_ENUM must be used in the global namespace. #define MSGPACK_ADD_ENUM(enum) \ namespace msgpack { \ + MSGPACK_API_VERSION_NAMESPACE(v1) { \ template <> \ inline object const& operator>> (object const& o, enum& v) \ { \ @@ -61,9 +64,11 @@ } \ }; \ } \ + } \ } namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { namespace type { template @@ -165,6 +170,7 @@ define make_define(Args&... args) } } // namespace type +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack #endif // MSGPACK_CPP11_DEFINE_HPP diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp index 8b5aa607..84d4ae0b 100644 --- a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp @@ -18,6 +18,8 @@ #ifndef MSGPACK_CPP11_MSGPACK_TUPLE_HPP #define MSGPACK_CPP11_MSGPACK_TUPLE_HPP +#include "msgpack/versioning.hpp" + #include #include "msgpack/object.hpp" @@ -25,6 +27,8 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + namespace type { // tuple using std::get; @@ -203,6 +207,8 @@ inline void operator<< ( MsgpackTupleToObjectWithZone::convert(o, v); } -} // msgpack +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack #endif // MSGPACK_CPP11_MSGPACK_TUPLE_HPP diff --git a/include/msgpack/adaptor/fixint.hpp b/include/msgpack/adaptor/fixint.hpp index b395850a..e1bc9306 100644 --- a/include/msgpack/adaptor/fixint.hpp +++ b/include/msgpack/adaptor/fixint.hpp @@ -18,11 +18,14 @@ #ifndef MSGPACK_TYPE_FIXINT_HPP #define MSGPACK_TYPE_FIXINT_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include "msgpack/adaptor/int.hpp" namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + namespace type { @@ -202,6 +205,8 @@ inline void operator<< (object::with_zone& o, type::fix_uint64 v) { static_cast(o) << v; } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #endif /* msgpack/type/fixint.hpp */ diff --git a/include/msgpack/adaptor/float.hpp b/include/msgpack/adaptor/float.hpp index 16470e4b..3a5404b9 100644 --- a/include/msgpack/adaptor/float.hpp +++ b/include/msgpack/adaptor/float.hpp @@ -18,11 +18,13 @@ #ifndef MSGPACK_TYPE_FLOAT_HPP #define MSGPACK_TYPE_FLOAT_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { // FIXME check overflow, underflow @@ -96,6 +98,8 @@ inline void operator<< (object::with_zone& o, double v) { static_cast(o) << v; } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #endif /* msgpack/type/float.hpp */ diff --git a/include/msgpack/adaptor/int.hpp b/include/msgpack/adaptor/int.hpp index 305af663..92135cd4 100644 --- a/include/msgpack/adaptor/int.hpp +++ b/include/msgpack/adaptor/int.hpp @@ -18,11 +18,13 @@ #ifndef MSGPACK_TYPE_INT_HPP #define MSGPACK_TYPE_INT_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1){ namespace type { namespace detail { @@ -323,6 +325,8 @@ inline void operator<< (object::with_zone& o, const unsigned long long& v) { static_cast(o) << v; } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #endif /* msgpack/type/int.hpp */ diff --git a/include/msgpack/adaptor/list.hpp b/include/msgpack/adaptor/list.hpp index 048eae00..5d0169d6 100644 --- a/include/msgpack/adaptor/list.hpp +++ b/include/msgpack/adaptor/list.hpp @@ -18,11 +18,13 @@ #ifndef MSGPACK_TYPE_LIST_HPP #define MSGPACK_TYPE_LIST_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { template inline object const& operator>> (object const& o, std::list& v) @@ -70,6 +72,7 @@ inline void operator<< (object::with_zone& o, const std::list& v) } } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/map.hpp b/include/msgpack/adaptor/map.hpp index 5cf61762..be5add20 100644 --- a/include/msgpack/adaptor/map.hpp +++ b/include/msgpack/adaptor/map.hpp @@ -18,6 +18,7 @@ #ifndef MSGPACK_TYPE_MAP_HPP #define MSGPACK_TYPE_MAP_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include #include @@ -25,6 +26,7 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { namespace type { @@ -198,6 +200,7 @@ inline void operator<< (object::with_zone& o, const std::multimap& v) } } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/nil.hpp b/include/msgpack/adaptor/nil.hpp index f52d4ffe..af7f6308 100644 --- a/include/msgpack/adaptor/nil.hpp +++ b/include/msgpack/adaptor/nil.hpp @@ -18,10 +18,13 @@ #ifndef MSGPACK_TYPE_NIL_HPP #define MSGPACK_TYPE_NIL_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + namespace type { struct nil { }; @@ -58,6 +61,7 @@ inline void object::as() const convert(v); } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/pair.hpp b/include/msgpack/adaptor/pair.hpp index 851d00c3..10784af0 100644 --- a/include/msgpack/adaptor/pair.hpp +++ b/include/msgpack/adaptor/pair.hpp @@ -18,11 +18,13 @@ #ifndef MSGPACK_TYPE_PAIR_HPP #define MSGPACK_TYPE_PAIR_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { template inline object const& operator>> (object const& o, std::pair& v) @@ -54,6 +56,7 @@ inline void operator<< (object::with_zone& o, const std::pair& v) p[1] = object(v.second, o.zone); } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/raw.hpp b/include/msgpack/adaptor/raw.hpp index e2268607..c61e8cb5 100644 --- a/include/msgpack/adaptor/raw.hpp +++ b/include/msgpack/adaptor/raw.hpp @@ -18,12 +18,15 @@ #ifndef MSGPACK_TYPE_RAW_HPP #define MSGPACK_TYPE_RAW_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + namespace type { struct raw_ref { @@ -88,6 +91,8 @@ inline void operator<< (object::with_zone& o, const type::raw_ref& v) { static_cast(o) << v; } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #endif /* msgpack/type/raw.hpp */ diff --git a/include/msgpack/adaptor/set.hpp b/include/msgpack/adaptor/set.hpp index f949944e..a714b4db 100644 --- a/include/msgpack/adaptor/set.hpp +++ b/include/msgpack/adaptor/set.hpp @@ -18,11 +18,14 @@ #ifndef MSGPACK_TYPE_SET_HPP #define MSGPACK_TYPE_SET_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" + #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { template inline object const& operator>> (object const& o, std::set& v) @@ -115,6 +118,7 @@ inline void operator<< (object::with_zone& o, const std::multiset& v) } } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/string.hpp b/include/msgpack/adaptor/string.hpp index a1ea2f8c..f3fdd302 100644 --- a/include/msgpack/adaptor/string.hpp +++ b/include/msgpack/adaptor/string.hpp @@ -18,11 +18,13 @@ #ifndef MSGPACK_TYPE_STRING_HPP #define MSGPACK_TYPE_STRING_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { inline object const& operator>> (object const& o, std::string& v) { @@ -64,6 +66,7 @@ inline void operator<< (object& o, const std::string& v) o.via.str.size = static_cast(v.size()); } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/tr1/unordered_map.hpp b/include/msgpack/adaptor/tr1/unordered_map.hpp index 6495fa9b..228cc584 100644 --- a/include/msgpack/adaptor/tr1/unordered_map.hpp +++ b/include/msgpack/adaptor/tr1/unordered_map.hpp @@ -18,6 +18,7 @@ #ifndef MSGPACK_TYPE_TR1_UNORDERED_MAP_HPP #define MSGPACK_TYPE_TR1_UNORDERED_MAP_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) @@ -42,6 +43,7 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { template inline object const& operator>> (object const& o, MSGPACK_STD_TR1::unordered_map& v) @@ -141,6 +143,7 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m } } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/tr1/unordered_set.hpp b/include/msgpack/adaptor/tr1/unordered_set.hpp index e6086c09..045bd0a9 100644 --- a/include/msgpack/adaptor/tr1/unordered_set.hpp +++ b/include/msgpack/adaptor/tr1/unordered_set.hpp @@ -18,6 +18,7 @@ #ifndef MSGPACK_TYPE_TR1_UNORDERED_SET_HPP #define MSGPACK_TYPE_TR1_UNORDERED_SET_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) @@ -41,6 +42,7 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { template inline object const& operator>> (object const& o, MSGPACK_STD_TR1::unordered_set& v) @@ -133,6 +135,7 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m } } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/vector.hpp b/include/msgpack/adaptor/vector.hpp index 73856896..406b32f0 100644 --- a/include/msgpack/adaptor/vector.hpp +++ b/include/msgpack/adaptor/vector.hpp @@ -18,11 +18,13 @@ #ifndef MSGPACK_TYPE_VECTOR_HPP #define MSGPACK_TYPE_VECTOR_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { template inline object const& operator>> (object const& o, std::vector& v) @@ -74,6 +76,7 @@ inline void operator<< (object::with_zone& o, const std::vector& v) } } +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/vector_char.hpp b/include/msgpack/adaptor/vector_char.hpp index d87081d0..8675370b 100644 --- a/include/msgpack/adaptor/vector_char.hpp +++ b/include/msgpack/adaptor/vector_char.hpp @@ -18,11 +18,14 @@ #ifndef MSGPACK_TYPE_VECTOR_CHAR_HPP #define MSGPACK_TYPE_VECTOR_CHAR_HPP +#include "msgpack/versioning.hpp" #include "msgpack/object.hpp" #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + inline object const& operator>> (object const& o, std::vector& v) { switch (o.type) { @@ -66,6 +69,8 @@ inline void operator<< (object::with_zone& o, const std::vector& v) std::memcpy(ptr, v.data(), v.size()); } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #endif // MSGPACK_TYPE_VECTOR_CHAR_HPP diff --git a/include/msgpack/cpp_config.hpp b/include/msgpack/cpp_config.hpp index 72be9817..be00f6ef 100644 --- a/include/msgpack/cpp_config.hpp +++ b/include/msgpack/cpp_config.hpp @@ -18,6 +18,8 @@ #ifndef MSGPACK_CPP_CONFIG_HPP #define MSGPACK_CPP_CONFIG_HPP +#include "msgpack/versioning.hpp" + #if !defined(MSGPACK_USE_CPP03) // If MSVC would support C++11 completely, // then 'defined(_MSC_VER)' would replace with @@ -40,6 +42,8 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + template struct unique_ptr : std::auto_ptr { explicit unique_ptr(T* p = 0) throw() : std::auto_ptr(p) {} @@ -69,7 +73,9 @@ template struct enable_if { }; -} // msgpack +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack #else // __cplusplus < 201103 @@ -78,6 +84,8 @@ struct enable_if { #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + // unique_ptr using std::unique_ptr; // using std::make_unique; // since C++14 @@ -88,7 +96,8 @@ namespace msgpack { using std::swap; using std::enable_if; -} // msgpack +} // MSGPACK_API_VERSION_NAMESPACE(v1) +} // namespace msgpack #endif // __cplusplus < 201103 diff --git a/include/msgpack/detail/cpp03_zone.hpp b/include/msgpack/detail/cpp03_zone.hpp index 989398da..cc09b6a8 100644 --- a/include/msgpack/detail/cpp03_zone.hpp +++ b/include/msgpack/detail/cpp03_zone.hpp @@ -22,6 +22,7 @@ #include #include +#include "msgpack/versioning.hpp" #include "msgpack/cpp_config.hpp" #ifndef MSGPACK_ZONE_CHUNK_SIZE @@ -35,6 +36,8 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + class zone { struct finalizer { finalizer(void (*func)(void*), void* data):m_func(func), m_data(data) {} @@ -631,6 +634,8 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #endif // MSGPACK_CPP03_ZONE_HPP diff --git a/include/msgpack/detail/cpp11_zone.hpp b/include/msgpack/detail/cpp11_zone.hpp index f768f008..f3ec210b 100644 --- a/include/msgpack/detail/cpp11_zone.hpp +++ b/include/msgpack/detail/cpp11_zone.hpp @@ -18,6 +18,8 @@ #ifndef MSGPACK_CPP11_ZONE_HPP #define MSGPACK_CPP11_ZONE_HPP +#include "msgpack/versioning.hpp" + #include #include #include @@ -34,6 +36,8 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + class zone { private: struct finalizer { @@ -341,6 +345,8 @@ T* zone::allocate(Args... args) } } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #endif // MSGPACK_CPP11_ZONE_HPP diff --git a/include/msgpack/fbuffer.hpp b/include/msgpack/fbuffer.hpp index 5d974d6f..39bb4089 100644 --- a/include/msgpack/fbuffer.hpp +++ b/include/msgpack/fbuffer.hpp @@ -18,11 +18,14 @@ #ifndef MSGPACK_FBUFFER_HPP__ #define MSGPACK_FBUFFER_HPP__ +#include "msgpack/versioning.hpp" + #include #include namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { class fbuffer { public: @@ -49,8 +52,8 @@ private: FILE* m_file; }; +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack #endif /* msgpack/fbuffer.hpp */ - diff --git a/include/msgpack/object.hpp b/include/msgpack/object.hpp index f060450b..f96543e2 100644 --- a/include/msgpack/object.hpp +++ b/include/msgpack/object.hpp @@ -18,6 +18,7 @@ #ifndef MSGPACK_OBJECT_HPP #define MSGPACK_OBJECT_HPP +#include "msgpack/versioning.hpp" #include "object.h" #include "pack.hpp" #include "zone.hpp" @@ -29,6 +30,7 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { class type_error : public std::bad_cast { }; @@ -568,6 +570,8 @@ inline std::ostream& operator<< (std::ostream& s, const object& o) return s; } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #include "msgpack/type.hpp" diff --git a/include/msgpack/pack.hpp b/include/msgpack/pack.hpp index bfae2dd2..088d69a6 100644 --- a/include/msgpack/pack.hpp +++ b/include/msgpack/pack.hpp @@ -18,6 +18,8 @@ #ifndef MSGPACK_PACK_HPP #define MSGPACK_PACK_HPP +#include "msgpack/versioning.hpp" + #include #include #include @@ -26,6 +28,7 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { template class packer { @@ -1018,7 +1021,8 @@ inline void packer::pack_imp_int64(T d) } } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack #endif /* msgpack/pack.hpp */ - diff --git a/include/msgpack/sbuffer.hpp b/include/msgpack/sbuffer.hpp index 76f4be25..531f9f16 100644 --- a/include/msgpack/sbuffer.hpp +++ b/include/msgpack/sbuffer.hpp @@ -18,6 +18,8 @@ #ifndef MSGPACK_SBUFFER_HPP #define MSGPACK_SBUFFER_HPP +#include "msgpack/versioning.hpp" + #include #ifndef MSGPACK_SBUFFER_INIT_SIZE @@ -26,6 +28,7 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { class sbuffer { public: @@ -90,14 +93,14 @@ private: { size_t nsize = (m_alloc > 0) ? m_alloc * 2 : MSGPACK_SBUFFER_INIT_SIZE; - + while(nsize < m_size + len) { nsize *= 2; } - + void* tmp = ::realloc(m_data, nsize); if(!tmp) { throw std::bad_alloc(); } - + m_data = static_cast(tmp); m_alloc = nsize; } @@ -110,8 +113,8 @@ private: size_t m_alloc; }; +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack #endif /* msgpack/sbuffer.hpp */ - diff --git a/include/msgpack/unpack.hpp b/include/msgpack/unpack.hpp index e7be9f20..ef0bfa91 100644 --- a/include/msgpack/unpack.hpp +++ b/include/msgpack/unpack.hpp @@ -17,6 +17,8 @@ // #ifndef MSGPACK_UNPACK_HPP #define MSGPACK_UNPACK_HPP + +#include "msgpack/versioning.hpp" #include "object.hpp" #include "zone.hpp" #include "unpack_define.h" @@ -47,6 +49,8 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + typedef bool (*unpack_reference_func)(type::object_type, uint64_t, void*); namespace detail { @@ -1456,6 +1460,8 @@ inline bool unpacker::default_reference_func(type::object_type /*type*/, uint64_ return true; } +} // MSGPACK_API_VERSION_NAMESPACE(v1) + } // namespace msgpack diff --git a/include/msgpack/versioning.hpp b/include/msgpack/versioning.hpp new file mode 100644 index 00000000..cb589ea3 --- /dev/null +++ b/include/msgpack/versioning.hpp @@ -0,0 +1,77 @@ +/* + * MessagePack for C++ version switcher + * + * Copyright (C) 2014 KONDO Takatoshi + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MSGPACK_VERSIONING_HPP +#define MSGPACK_VERSIONING_HPP + +#if !defined(MSGPACK_DEFAULT_API_VERSION) +#define MSGPACK_DEFAULT_API_VERSION 1 +#endif + +#define MSGPACK_DEFAULT_API_NS MSGPACK_PP_CAT(v, MSGPACK_DEFAULT_API_VERSION) + +#if MSGPACK_DEFAULT_API_VERSION == 1 +#define MSGPACK_PP_ENABLE_NS_v1 () +//#elif MSGPACK_DEFAULT_API_VERSION == 2 +//#define MSGPACK_PP_ENABLE_NS_v2 () +#else +#error +#endif + +#define MSGPACK_PP_CAT(a, ...) MSGPACK_PP_PRIMITIVE_CAT(a, __VA_ARGS__) +#define MSGPACK_PP_PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__ + +#define MSGPACK_PP_IIF(c) MSGPACK_PP_PRIMITIVE_CAT(MSGPACK_PP_IIF_, c) +#define MSGPACK_PP_IIF_0(t, ...) __VA_ARGS__ +#define MSGPACK_PP_IIF_1(t, ...) t + +#define MSGPACK_PP_PROBE(x) x, 1 + +#if defined(__MSC_VER) + +#define MSGPACK_PP_MSVC_VA_ARGS_WORKAROUND(define, args) define args +#define MSGPACK_PP_CHECK(...) MSGPACK_PP_MSVC_VA_ARGS_WORKAROUND(MSGPACK_PP_CHECK_N, (__VA_ARGS__, 0)) +#define MSGPACK_PP_CHECK_N(x, n, ...) n + +#else // defined(__MSC_VER) + +#define MSGPACK_PP_CHECK(...) MSGPACK_PP_CHECK_N(__VA_ARGS__, 0) +#define MSGPACK_PP_CHECK_N(x, n, ...) n + +#endif // defined(__MSC_VER) + + +#define MSGPACK_PP_NS_ENABLED_PROBE(ns) MSGPACK_PP_NS_ENABLED_PROBE_PROXY( MSGPACK_PP_ENABLE_NS_##ns ) +#define MSGPACK_PP_NS_ENABLED_PROBE_PROXY(...) MSGPACK_PP_NS_ENABLED_PROBE_PRIMIVIE(__VA_ARGS__) +#define MSGPACK_PP_NS_ENABLED_PROBE_PRIMIVIE(x) MSGPACK_PP_NS_ENABLED_PROBE_COMBINE_ x +#define MSGPACK_PP_NS_ENABLED_PROBE_COMBINE_(...) MSGPACK_PP_PROBE(~) + +#define MSGPACK_PP_IS_NS_ENABLED(ns) MSGPACK_PP_CHECK(MSGPACK_PP_NS_ENABLED_PROBE(ns)) + +#if __cplusplus < 201103 +#define MSGPACK_API_VERSION_NAMESPACE(ns) MSGPACK_PP_IIF(MSGPACK_PP_IS_NS_ENABLED(ns)) \ + (namespace ns{}; using namespace ns; namespace ns, \ + namespace ns) + +#else // __cplusplus < 201103 + +#define MSGPACK_API_VERSION_NAMESPACE(ns) MSGPACK_PP_IIF(MSGPACK_PP_IS_NS_ENABLED(ns)) \ + (inline namespace ns, namespace ns) + +#endif // __cplusplus < 201103 + +#endif // MSGPACK_VERSIONING_HPP diff --git a/include/msgpack/vrefbuffer.hpp b/include/msgpack/vrefbuffer.hpp index 4ce6cb45..28cd31ca 100644 --- a/include/msgpack/vrefbuffer.hpp +++ b/include/msgpack/vrefbuffer.hpp @@ -18,6 +18,8 @@ #ifndef MSGPACK_VREFBUFFER_HPP #define MSGPACK_VREFBUFFER_HPP +#include "msgpack/versioning.hpp" + #include #ifndef MSGPACK_VREFBUFFER_REF_SIZE @@ -39,6 +41,8 @@ struct iovec { namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { + namespace detail { // int64, uint64, double std::size_t const packer_max_buffer_size = 9; @@ -274,6 +278,7 @@ private: }; +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/zbuffer.hpp b/include/msgpack/zbuffer.hpp index 6dd72341..43a9d77b 100644 --- a/include/msgpack/zbuffer.hpp +++ b/include/msgpack/zbuffer.hpp @@ -18,6 +18,8 @@ #ifndef MSGPACK_ZBUFFER_HPP #define MSGPACK_ZBUFFER_HPP +#include "msgpack/versioning.hpp" + #include #include @@ -31,6 +33,7 @@ namespace msgpack { +MSGPACK_API_VERSION_NAMESPACE(v1) { class zbuffer { public: @@ -155,8 +158,8 @@ private: size_t m_init_size; }; +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack #endif /* msgpack/zbuffer.hpp */ - diff --git a/src/Makefile.am b/src/Makefile.am index 039aeacd..b3245236 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -89,6 +89,7 @@ nobase_include_HEADERS += \ ../include/msgpack/type.hpp \ ../include/msgpack/unpack.hpp \ ../include/msgpack/version.hpp \ + ../include/msgpack/versioning.hpp \ ../include/msgpack/vrefbuffer.hpp \ ../include/msgpack/zbuffer.hpp \ ../include/msgpack/zone.hpp From 4c00f448aa2eb1ea781e3b885e33e5a16a570542 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Mon, 13 Oct 2014 00:04:10 +0900 Subject: [PATCH 2/6] Added a minimal forward declaration header file for pack/unpack overloading. --- CMakeLists.txt | 2 + erb/cpp03_define.hpp.erb | 1 + erb/cpp03_msgpack_tuple.hpp.erb | 2 +- erb/cpp03_zone.hpp.erb | 2 +- include/msgpack/adaptor/bool.hpp | 2 +- include/msgpack/adaptor/char_ptr.hpp | 2 +- include/msgpack/adaptor/cpp11/array.hpp | 4 +- include/msgpack/adaptor/cpp11/array_char.hpp | 2 +- .../msgpack/adaptor/cpp11/forward_list.hpp | 4 +- include/msgpack/adaptor/cpp11/tuple.hpp | 4 +- include/msgpack/adaptor/deque.hpp | 2 +- .../msgpack/adaptor/detail/cpp03_define.hpp | 1 + .../adaptor/detail/cpp03_msgpack_tuple.hpp | 2 +- .../msgpack/adaptor/detail/cpp11_define.hpp | 1 + .../adaptor/detail/cpp11_msgpack_tuple.hpp | 4 +- include/msgpack/adaptor/fixint.hpp | 2 +- include/msgpack/adaptor/float.hpp | 2 +- include/msgpack/adaptor/int.hpp | 2 +- include/msgpack/adaptor/list.hpp | 2 +- include/msgpack/adaptor/map.hpp | 2 +- include/msgpack/adaptor/nil.hpp | 2 +- include/msgpack/adaptor/pair.hpp | 2 +- include/msgpack/adaptor/raw.hpp | 2 +- include/msgpack/adaptor/set.hpp | 2 +- include/msgpack/adaptor/string.hpp | 2 +- include/msgpack/adaptor/tr1/unordered_map.hpp | 2 +- include/msgpack/adaptor/tr1/unordered_set.hpp | 2 +- include/msgpack/adaptor/vector.hpp | 2 +- include/msgpack/adaptor/vector_char.hpp | 2 +- include/msgpack/detail/cpp03_zone.hpp | 2 +- include/msgpack/object.hpp | 116 +------------- include/msgpack/object_forward.hpp | 144 ++++++++++++++++++ include/msgpack_forward.hpp | 26 ++++ src/Makefile.am | 2 + 34 files changed, 207 insertions(+), 146 deletions(-) create mode 100644 include/msgpack/object_forward.hpp create mode 100644 include/msgpack_forward.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index f984283b..af1aefe8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,6 +84,7 @@ LIST (APPEND msgpack_HEADERS IF (MSGPACK_ENABLE_CXX) LIST (APPEND msgpack_HEADERS include/msgpack.hpp + include/msgpack_forward.hpp include/msgpack/adaptor/bool.hpp include/msgpack/adaptor/char_ptr.hpp include/msgpack/adaptor/cpp11/array.hpp @@ -115,6 +116,7 @@ IF (MSGPACK_ENABLE_CXX) include/msgpack/detail/cpp11_zone.hpp include/msgpack/fbuffer.hpp include/msgpack/object.hpp + include/msgpack/object_forward.hpp include/msgpack/pack.hpp include/msgpack/sbuffer.hpp include/msgpack/type.hpp diff --git a/erb/cpp03_define.hpp.erb b/erb/cpp03_define.hpp.erb index 2e4a9db6..e4350202 100644 --- a/erb/cpp03_define.hpp.erb +++ b/erb/cpp03_define.hpp.erb @@ -19,6 +19,7 @@ #define MSGPACK_CPP03_DEFINE_HPP #include "msgpack/versioning.hpp" +#include "msgpack_forward.hpp" #define MSGPACK_DEFINE(...) \ template \ diff --git a/erb/cpp03_msgpack_tuple.hpp.erb b/erb/cpp03_msgpack_tuple.hpp.erb index c3e5006b..582762d2 100644 --- a/erb/cpp03_msgpack_tuple.hpp.erb +++ b/erb/cpp03_msgpack_tuple.hpp.erb @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" namespace msgpack { diff --git a/erb/cpp03_zone.hpp.erb b/erb/cpp03_zone.hpp.erb index 25d69091..69261065 100644 --- a/erb/cpp03_zone.hpp.erb +++ b/erb/cpp03_zone.hpp.erb @@ -23,7 +23,7 @@ #include #include "msgpack/versioning.hpp" -#include "msgpack/cpp_config.hpp" +#include "msgpack_forward.hpp" #ifndef MSGPACK_ZONE_CHUNK_SIZE #define MSGPACK_ZONE_CHUNK_SIZE 8192 diff --git a/include/msgpack/adaptor/bool.hpp b/include/msgpack/adaptor/bool.hpp index e2b50a7a..1d794dd1 100644 --- a/include/msgpack/adaptor/bool.hpp +++ b/include/msgpack/adaptor/bool.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_BOOL_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/char_ptr.hpp b/include/msgpack/adaptor/char_ptr.hpp index 5566040a..cf013b34 100644 --- a/include/msgpack/adaptor/char_ptr.hpp +++ b/include/msgpack/adaptor/char_ptr.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_CHAR_PTR_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/cpp11/array.hpp b/include/msgpack/adaptor/cpp11/array.hpp index 5f7ac1b7..e9e1c972 100644 --- a/include/msgpack/adaptor/cpp11/array.hpp +++ b/include/msgpack/adaptor/cpp11/array.hpp @@ -20,12 +20,10 @@ #define MSGPACK_CPP11_ARRAY_HPP #include "msgpack/versioning.hpp" +#include "msgpack_forward.hpp" #include -#include "msgpack/object.hpp" -#include "msgpack/cpp_config.hpp" - namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { diff --git a/include/msgpack/adaptor/cpp11/array_char.hpp b/include/msgpack/adaptor/cpp11/array_char.hpp index 17a8605e..34aa2761 100644 --- a/include/msgpack/adaptor/cpp11/array_char.hpp +++ b/include/msgpack/adaptor/cpp11/array_char.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_ARRAY_CHAR_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/cpp11/forward_list.hpp b/include/msgpack/adaptor/cpp11/forward_list.hpp index f1a442e2..d2dbebb9 100644 --- a/include/msgpack/adaptor/cpp11/forward_list.hpp +++ b/include/msgpack/adaptor/cpp11/forward_list.hpp @@ -20,12 +20,10 @@ #define MSGPACK_CPP11_FORWARD_LIST_HPP #include "msgpack/versioning.hpp" +#include "msgpack_forward.hpp" #include -#include "msgpack/object.hpp" -#include "msgpack/cpp_config.hpp" - namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { diff --git a/include/msgpack/adaptor/cpp11/tuple.hpp b/include/msgpack/adaptor/cpp11/tuple.hpp index 935c9fbf..704d81ab 100644 --- a/include/msgpack/adaptor/cpp11/tuple.hpp +++ b/include/msgpack/adaptor/cpp11/tuple.hpp @@ -19,12 +19,10 @@ #define MSGPACK_CPP11_TUPLE_HPP #include "msgpack/versioning.hpp" +#include "msgpack_forward.hpp" #include -#include "msgpack/object.hpp" -#include "msgpack/cpp_config.hpp" - namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { diff --git a/include/msgpack/adaptor/deque.hpp b/include/msgpack/adaptor/deque.hpp index 11aad789..364baff3 100644 --- a/include/msgpack/adaptor/deque.hpp +++ b/include/msgpack/adaptor/deque.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_DEQUE_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/detail/cpp03_define.hpp b/include/msgpack/adaptor/detail/cpp03_define.hpp index 5463b3a7..d9090236 100644 --- a/include/msgpack/adaptor/detail/cpp03_define.hpp +++ b/include/msgpack/adaptor/detail/cpp03_define.hpp @@ -19,6 +19,7 @@ #define MSGPACK_CPP03_DEFINE_HPP #include "msgpack/versioning.hpp" +#include "msgpack_forward.hpp" #define MSGPACK_DEFINE(...) \ template \ diff --git a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp index ac8c7807..3ffd0e29 100644 --- a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" namespace msgpack { diff --git a/include/msgpack/adaptor/detail/cpp11_define.hpp b/include/msgpack/adaptor/detail/cpp11_define.hpp index 8ec9b469..b8a0979f 100644 --- a/include/msgpack/adaptor/detail/cpp11_define.hpp +++ b/include/msgpack/adaptor/detail/cpp11_define.hpp @@ -19,6 +19,7 @@ #define MSGPACK_CPP11_DEFINE_HPP #include "msgpack/versioning.hpp" +#include "msgpack_forward.hpp" #include diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp index 84d4ae0b..4f190a86 100644 --- a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp @@ -19,12 +19,10 @@ #define MSGPACK_CPP11_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" +#include "msgpack_forward.hpp" #include -#include "msgpack/object.hpp" -#include "msgpack/cpp_config.hpp" - namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { diff --git a/include/msgpack/adaptor/fixint.hpp b/include/msgpack/adaptor/fixint.hpp index e1bc9306..ca5e6b02 100644 --- a/include/msgpack/adaptor/fixint.hpp +++ b/include/msgpack/adaptor/fixint.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_FIXINT_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include "msgpack/adaptor/int.hpp" namespace msgpack { diff --git a/include/msgpack/adaptor/float.hpp b/include/msgpack/adaptor/float.hpp index 3a5404b9..bbace593 100644 --- a/include/msgpack/adaptor/float.hpp +++ b/include/msgpack/adaptor/float.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_FLOAT_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/int.hpp b/include/msgpack/adaptor/int.hpp index 92135cd4..6491d274 100644 --- a/include/msgpack/adaptor/int.hpp +++ b/include/msgpack/adaptor/int.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_INT_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/list.hpp b/include/msgpack/adaptor/list.hpp index 5d0169d6..b7690dd7 100644 --- a/include/msgpack/adaptor/list.hpp +++ b/include/msgpack/adaptor/list.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_LIST_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/map.hpp b/include/msgpack/adaptor/map.hpp index be5add20..de9f825e 100644 --- a/include/msgpack/adaptor/map.hpp +++ b/include/msgpack/adaptor/map.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_MAP_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include #include #include diff --git a/include/msgpack/adaptor/nil.hpp b/include/msgpack/adaptor/nil.hpp index af7f6308..c8f2a0c7 100644 --- a/include/msgpack/adaptor/nil.hpp +++ b/include/msgpack/adaptor/nil.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_NIL_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" namespace msgpack { diff --git a/include/msgpack/adaptor/pair.hpp b/include/msgpack/adaptor/pair.hpp index 10784af0..238abb8e 100644 --- a/include/msgpack/adaptor/pair.hpp +++ b/include/msgpack/adaptor/pair.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_PAIR_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/raw.hpp b/include/msgpack/adaptor/raw.hpp index c61e8cb5..52790519 100644 --- a/include/msgpack/adaptor/raw.hpp +++ b/include/msgpack/adaptor/raw.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_RAW_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include #include diff --git a/include/msgpack/adaptor/set.hpp b/include/msgpack/adaptor/set.hpp index a714b4db..a01b1618 100644 --- a/include/msgpack/adaptor/set.hpp +++ b/include/msgpack/adaptor/set.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_SET_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include diff --git a/include/msgpack/adaptor/string.hpp b/include/msgpack/adaptor/string.hpp index f3fdd302..66068361 100644 --- a/include/msgpack/adaptor/string.hpp +++ b/include/msgpack/adaptor/string.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_STRING_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/tr1/unordered_map.hpp b/include/msgpack/adaptor/tr1/unordered_map.hpp index 228cc584..77399581 100644 --- a/include/msgpack/adaptor/tr1/unordered_map.hpp +++ b/include/msgpack/adaptor/tr1/unordered_map.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_TR1_UNORDERED_MAP_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) diff --git a/include/msgpack/adaptor/tr1/unordered_set.hpp b/include/msgpack/adaptor/tr1/unordered_set.hpp index 045bd0a9..e81fe590 100644 --- a/include/msgpack/adaptor/tr1/unordered_set.hpp +++ b/include/msgpack/adaptor/tr1/unordered_set.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_TR1_UNORDERED_SET_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) diff --git a/include/msgpack/adaptor/vector.hpp b/include/msgpack/adaptor/vector.hpp index 406b32f0..21f2f085 100644 --- a/include/msgpack/adaptor/vector.hpp +++ b/include/msgpack/adaptor/vector.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_VECTOR_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/vector_char.hpp b/include/msgpack/adaptor/vector_char.hpp index 8675370b..a702f445 100644 --- a/include/msgpack/adaptor/vector_char.hpp +++ b/include/msgpack/adaptor/vector_char.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_VECTOR_CHAR_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object.hpp" +#include "msgpack_forward.hpp" #include namespace msgpack { diff --git a/include/msgpack/detail/cpp03_zone.hpp b/include/msgpack/detail/cpp03_zone.hpp index cc09b6a8..b2acd3d8 100644 --- a/include/msgpack/detail/cpp03_zone.hpp +++ b/include/msgpack/detail/cpp03_zone.hpp @@ -23,7 +23,7 @@ #include #include "msgpack/versioning.hpp" -#include "msgpack/cpp_config.hpp" +#include "msgpack_forward.hpp" #ifndef MSGPACK_ZONE_CHUNK_SIZE #define MSGPACK_ZONE_CHUNK_SIZE 8192 diff --git a/include/msgpack/object.hpp b/include/msgpack/object.hpp index f96543e2..7e22426c 100644 --- a/include/msgpack/object.hpp +++ b/include/msgpack/object.hpp @@ -1,7 +1,7 @@ // // MessagePack for C++ static resolution routine // -// Copyright (C) 2008-2010 FURUHASHI Sadayuki +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,9 +19,9 @@ #define MSGPACK_OBJECT_HPP #include "msgpack/versioning.hpp" -#include "object.h" -#include "pack.hpp" -#include "zone.hpp" +#include "msgpack/object_forward.hpp" +#include "msgpack/pack.hpp" +#include "msgpack/zone.hpp" #include #include #include @@ -32,114 +32,6 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -class type_error : public std::bad_cast { }; - - -namespace type { - enum object_type { - NIL = MSGPACK_OBJECT_NIL, - BOOLEAN = MSGPACK_OBJECT_BOOLEAN, - POSITIVE_INTEGER = MSGPACK_OBJECT_POSITIVE_INTEGER, - NEGATIVE_INTEGER = MSGPACK_OBJECT_NEGATIVE_INTEGER, - DOUBLE = MSGPACK_OBJECT_DOUBLE, - STR = MSGPACK_OBJECT_STR, - BIN = MSGPACK_OBJECT_BIN, - ARRAY = MSGPACK_OBJECT_ARRAY, - MAP = MSGPACK_OBJECT_MAP, - EXT = MSGPACK_OBJECT_EXT - }; -} - - -struct object; -struct object_kv; - -struct object_array { - uint32_t size; - object* ptr; -}; - -struct object_map { - uint32_t size; - object_kv* ptr; -}; - -struct object_str { - uint32_t size; - const char* ptr; -}; - -struct object_bin { - uint32_t size; - const char* ptr; -}; - -struct object_ext { - int8_t type() const { return ptr[0]; } - const char* data() const { return &ptr[1]; } - uint32_t size; - const char* ptr; -}; - -struct object { - union union_type { - bool boolean; - uint64_t u64; - int64_t i64; - double dec; - object_array array; - object_map map; - object_str str; - object_bin bin; - object_ext ext; - }; - - type::object_type type; - union_type via; - - bool is_nil() const { return type == type::NIL; } - - template - T as() const; - - template - void convert(T& v) const; - template - void convert(T* v) const; - - object(); - - object(msgpack_object o); - - template - explicit object(const T& v); - - template - object(const T& v, zone& z); - - // obsolete - template - object(const T& v, zone* z); - - template - object& operator=(const T& v); - - operator msgpack_object() const; - - struct with_zone; - -private: - struct implicit_type; - -public: - implicit_type convert() const; -}; - -struct object_kv { - object key; - object val; -}; - struct object::with_zone : object { with_zone(msgpack::zone& zone) : zone(zone) { } msgpack::zone& zone; diff --git a/include/msgpack/object_forward.hpp b/include/msgpack/object_forward.hpp new file mode 100644 index 00000000..cad24f45 --- /dev/null +++ b/include/msgpack/object_forward.hpp @@ -0,0 +1,144 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#ifndef MSGPACK_OBJECT_FORWARD_HPP +#define MSGPACK_OBJECT_FORWARD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/zone.hpp" +#include "msgpack/object.h" + +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + + +namespace type { + enum object_type { + NIL = MSGPACK_OBJECT_NIL, + BOOLEAN = MSGPACK_OBJECT_BOOLEAN, + POSITIVE_INTEGER = MSGPACK_OBJECT_POSITIVE_INTEGER, + NEGATIVE_INTEGER = MSGPACK_OBJECT_NEGATIVE_INTEGER, + DOUBLE = MSGPACK_OBJECT_DOUBLE, + STR = MSGPACK_OBJECT_STR, + BIN = MSGPACK_OBJECT_BIN, + ARRAY = MSGPACK_OBJECT_ARRAY, + MAP = MSGPACK_OBJECT_MAP, + EXT = MSGPACK_OBJECT_EXT + }; +} + + +struct object; +struct object_kv; + +struct object_array { + uint32_t size; + object* ptr; +}; + +struct object_map { + uint32_t size; + object_kv* ptr; +}; + +struct object_str { + uint32_t size; + const char* ptr; +}; + +struct object_bin { + uint32_t size; + const char* ptr; +}; + +struct object_ext { + int8_t type() const { return ptr[0]; } + const char* data() const { return &ptr[1]; } + uint32_t size; + const char* ptr; +}; + +struct object { + union union_type { + bool boolean; + uint64_t u64; + int64_t i64; + double dec; + object_array array; + object_map map; + object_str str; + object_bin bin; + object_ext ext; + }; + + type::object_type type; + union_type via; + + bool is_nil() const { return type == type::NIL; } + + template + T as() const; + + template + void convert(T& v) const; + template + void convert(T* v) const; + + object(); + + object(msgpack_object o); + + template + explicit object(const T& v); + + template + object(const T& v, zone& z); + + // obsolete + template + object(const T& v, zone* z); + + template + object& operator=(const T& v); + + operator msgpack_object() const; + + struct with_zone; + +private: + struct implicit_type; + +public: + implicit_type convert() const; +}; + +class type_error : public std::bad_cast { }; + +struct object_kv { + object key; + object val; +}; + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_OBJECT_FORWARD_HPP diff --git a/include/msgpack_forward.hpp b/include/msgpack_forward.hpp new file mode 100644 index 00000000..90963fe6 --- /dev/null +++ b/include/msgpack_forward.hpp @@ -0,0 +1,26 @@ +/* + * MessagePack for C++ version switcher + * + * Copyright (C) 2014 KONDO Takatoshi + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MSGPACK_FORWARD_HPP +#define MSGPACK_FORWARD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/zone.hpp" +#include "msgpack/object_forward.hpp" +#include "msgpack/pack.hpp" + +#endif // MSGPACK_FORWARD_HPP diff --git a/src/Makefile.am b/src/Makefile.am index b3245236..df0a872c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -53,6 +53,7 @@ nobase_include_HEADERS = \ if ENABLE_CXX nobase_include_HEADERS += \ ../include/msgpack.hpp \ + ../include/msgpack_forward.hpp \ ../include/msgpack/adaptor/bool.hpp \ ../include/msgpack/adaptor/char_ptr.hpp \ ../include/msgpack/adaptor/cpp11/array.hpp \ @@ -84,6 +85,7 @@ nobase_include_HEADERS += \ ../include/msgpack/detail/cpp11_zone.hpp \ ../include/msgpack/fbuffer.hpp \ ../include/msgpack/object.hpp \ + ../include/msgpack/object_forward.hpp \ ../include/msgpack/pack.hpp \ ../include/msgpack/sbuffer.hpp \ ../include/msgpack/type.hpp \ From db8578a62b9fea3f41dc0e0426d16c29628b23d3 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Wed, 15 Oct 2014 17:32:15 +0900 Subject: [PATCH 3/6] Separated adaptor functions' definitions and declarations. --- CMakeLists.txt | 29 +- erb/cpp03_define.hpp.erb | 2 +- erb/cpp03_msgpack_tuple.hpp.erb | 12 +- erb/cpp03_msgpack_tuple_fwd.hpp.erb | 125 + erb/cpp03_zone.hpp.erb | 2 +- include/msgpack/adaptor/bool.hpp | 4 +- include/msgpack/adaptor/bool_fwd.hpp | 39 + include/msgpack/adaptor/char_ptr.hpp | 2 +- include/msgpack/adaptor/char_ptr_fwd.hpp | 38 + include/msgpack/adaptor/cpp11/array.hpp | 2 +- include/msgpack/adaptor/cpp11/array_char.hpp | 2 +- .../msgpack/adaptor/cpp11/array_char_fwd.hpp | 45 + include/msgpack/adaptor/cpp11/array_fwd.hpp | 44 + .../msgpack/adaptor/cpp11/forward_list.hpp | 2 +- .../adaptor/cpp11/forward_list_fwd.hpp | 44 + include/msgpack/adaptor/cpp11/tuple.hpp | 6 +- include/msgpack/adaptor/cpp11/tuple_fwd.hpp | 62 + include/msgpack/adaptor/deque.hpp | 2 +- include/msgpack/adaptor/deque_fwd.hpp | 40 + .../msgpack/adaptor/detail/cpp03_define.hpp | 2 +- .../adaptor/detail/cpp03_msgpack_tuple.hpp | 198 +- .../detail/cpp03_msgpack_tuple_fwd.hpp | 4341 +++++++++++++++++ .../msgpack/adaptor/detail/cpp11_define.hpp | 2 +- .../adaptor/detail/cpp11_msgpack_tuple.hpp | 2 +- .../detail/cpp11_msgpack_tuple_fwd.hpp | 84 + include/msgpack/adaptor/fixint.hpp | 2 +- include/msgpack/adaptor/fixint_fwd.hpp | 100 + include/msgpack/adaptor/float.hpp | 4 +- include/msgpack/adaptor/float_fwd.hpp | 44 + include/msgpack/adaptor/int.hpp | 2 +- include/msgpack/adaptor/int_fwd.hpp | 100 + include/msgpack/adaptor/list.hpp | 4 +- include/msgpack/adaptor/list_fwd.hpp | 40 + include/msgpack/adaptor/map.hpp | 4 +- include/msgpack/adaptor/map_fwd.hpp | 69 + include/msgpack/adaptor/msgpack_tuple_fwd.hpp | 29 + include/msgpack/adaptor/nil.hpp | 4 +- include/msgpack/adaptor/nil_fwd.hpp | 51 + include/msgpack/adaptor/pair.hpp | 4 +- include/msgpack/adaptor/pair_fwd.hpp | 42 + include/msgpack/adaptor/raw.hpp | 4 +- include/msgpack/adaptor/raw_fwd.hpp | 50 + include/msgpack/adaptor/set.hpp | 4 +- include/msgpack/adaptor/set_fwd.hpp | 52 + include/msgpack/adaptor/string.hpp | 4 +- include/msgpack/adaptor/string_fwd.hpp | 42 + include/msgpack/adaptor/tr1/unordered_map.hpp | 4 +- .../msgpack/adaptor/tr1/unordered_map_fwd.hpp | 72 + include/msgpack/adaptor/tr1/unordered_set.hpp | 4 +- .../msgpack/adaptor/tr1/unordered_set_fwd.hpp | 71 + include/msgpack/adaptor/vector.hpp | 4 +- include/msgpack/adaptor/vector_char.hpp | 2 +- include/msgpack/adaptor/vector_char_fwd.hpp | 42 + include/msgpack/adaptor/vector_fwd.hpp | 42 + include/msgpack/detail/cpp03_zone.hpp | 2 +- include/msgpack/object.hpp | 91 +- .../{object_forward.hpp => object_fwd.hpp} | 27 +- .../{msgpack_forward.hpp => msgpack_fwd.hpp} | 8 +- preprocess | 1 + src/Makefile.am | 29 +- 60 files changed, 5994 insertions(+), 191 deletions(-) create mode 100644 erb/cpp03_msgpack_tuple_fwd.hpp.erb create mode 100644 include/msgpack/adaptor/bool_fwd.hpp create mode 100644 include/msgpack/adaptor/char_ptr_fwd.hpp create mode 100644 include/msgpack/adaptor/cpp11/array_char_fwd.hpp create mode 100644 include/msgpack/adaptor/cpp11/array_fwd.hpp create mode 100644 include/msgpack/adaptor/cpp11/forward_list_fwd.hpp create mode 100644 include/msgpack/adaptor/cpp11/tuple_fwd.hpp create mode 100644 include/msgpack/adaptor/deque_fwd.hpp create mode 100644 include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp create mode 100644 include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp create mode 100644 include/msgpack/adaptor/fixint_fwd.hpp create mode 100644 include/msgpack/adaptor/float_fwd.hpp create mode 100644 include/msgpack/adaptor/int_fwd.hpp create mode 100644 include/msgpack/adaptor/list_fwd.hpp create mode 100644 include/msgpack/adaptor/map_fwd.hpp create mode 100644 include/msgpack/adaptor/msgpack_tuple_fwd.hpp create mode 100644 include/msgpack/adaptor/nil_fwd.hpp create mode 100644 include/msgpack/adaptor/pair_fwd.hpp create mode 100644 include/msgpack/adaptor/raw_fwd.hpp create mode 100644 include/msgpack/adaptor/set_fwd.hpp create mode 100644 include/msgpack/adaptor/string_fwd.hpp create mode 100644 include/msgpack/adaptor/tr1/unordered_map_fwd.hpp create mode 100644 include/msgpack/adaptor/tr1/unordered_set_fwd.hpp create mode 100644 include/msgpack/adaptor/vector_char_fwd.hpp create mode 100644 include/msgpack/adaptor/vector_fwd.hpp rename include/msgpack/{object_forward.hpp => object_fwd.hpp} (83%) rename include/{msgpack_forward.hpp => msgpack_fwd.hpp} (86%) diff --git a/CMakeLists.txt b/CMakeLists.txt index af1aefe8..d5311f4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,39 +84,64 @@ LIST (APPEND msgpack_HEADERS IF (MSGPACK_ENABLE_CXX) LIST (APPEND msgpack_HEADERS include/msgpack.hpp - include/msgpack_forward.hpp + include/msgpack_fwd.hpp include/msgpack/adaptor/bool.hpp + include/msgpack/adaptor/bool_fwd.hpp include/msgpack/adaptor/char_ptr.hpp + include/msgpack/adaptor/char_ptr_fwd.hpp include/msgpack/adaptor/cpp11/array.hpp + include/msgpack/adaptor/cpp11/array_fwd.hpp include/msgpack/adaptor/cpp11/array_char.hpp + include/msgpack/adaptor/cpp11/array_char_fwd.hpp include/msgpack/adaptor/cpp11/forward_list.hpp + include/msgpack/adaptor/cpp11/forward_list_fwd.hpp include/msgpack/adaptor/cpp11/tuple.hpp + include/msgpack/adaptor/cpp11/tuple_fwd.hpp include/msgpack/adaptor/define.hpp include/msgpack/adaptor/deque.hpp + include/msgpack/adaptor/deque_fwd.hpp include/msgpack/adaptor/detail/cpp03_define.hpp include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp + include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp include/msgpack/adaptor/detail/cpp11_define.hpp include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp + include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp include/msgpack/adaptor/fixint.hpp + include/msgpack/adaptor/fixint_fwd.hpp include/msgpack/adaptor/float.hpp + include/msgpack/adaptor/float_fwd.hpp include/msgpack/adaptor/int.hpp + include/msgpack/adaptor/int_fwd.hpp include/msgpack/adaptor/list.hpp + include/msgpack/adaptor/list_fwd.hpp include/msgpack/adaptor/map.hpp + include/msgpack/adaptor/map_fwd.hpp include/msgpack/adaptor/msgpack_tuple.hpp + include/msgpack/adaptor/msgpack_tuple_fwd.hpp include/msgpack/adaptor/nil.hpp + include/msgpack/adaptor/nil_fwd.hpp include/msgpack/adaptor/pair.hpp + include/msgpack/adaptor/pair_fwd.hpp include/msgpack/adaptor/raw.hpp + include/msgpack/adaptor/raw_fwd.hpp include/msgpack/adaptor/set.hpp + include/msgpack/adaptor/set_fwd.hpp include/msgpack/adaptor/string.hpp + include/msgpack/adaptor/string_fwd.hpp include/msgpack/adaptor/tr1/unordered_map.hpp + include/msgpack/adaptor/tr1/unordered_map_fwd.hpp include/msgpack/adaptor/tr1/unordered_set.hpp + include/msgpack/adaptor/tr1/unordered_set_fwd.hpp include/msgpack/adaptor/vector.hpp + include/msgpack/adaptor/vector_fwd.hpp + include/msgpack/adaptor/vector_char.hpp + include/msgpack/adaptor/vector_char_fwd.hpp include/msgpack/cpp_config.hpp include/msgpack/detail/cpp03_zone.hpp include/msgpack/detail/cpp11_zone.hpp include/msgpack/fbuffer.hpp include/msgpack/object.hpp - include/msgpack/object_forward.hpp + include/msgpack/object_fwd.hpp include/msgpack/pack.hpp include/msgpack/sbuffer.hpp include/msgpack/type.hpp diff --git a/erb/cpp03_define.hpp.erb b/erb/cpp03_define.hpp.erb index e4350202..d52f8dda 100644 --- a/erb/cpp03_define.hpp.erb +++ b/erb/cpp03_define.hpp.erb @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #define MSGPACK_DEFINE(...) \ template \ diff --git a/erb/cpp03_msgpack_tuple.hpp.erb b/erb/cpp03_msgpack_tuple.hpp.erb index 582762d2..a355dd77 100644 --- a/erb/cpp03_msgpack_tuple.hpp.erb +++ b/erb/cpp03_msgpack_tuple.hpp.erb @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" namespace msgpack { @@ -31,7 +31,7 @@ namespace type { // FIXME operator!= <% GENERATION_LIMIT = 31 %> -template , typename A<%=i%> = void<%}%>> +template , typename A<%=i%><%}%>> struct tuple; template @@ -128,7 +128,7 @@ inline tuple<> make_tuple() } <%0.upto(GENERATION_LIMIT) {|i|%> template , typename A<%=j%><%}%>> -tuple, A<%=j%><%}%>> make_tuple(typename tuple_type::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type>::transparent_reference a<%=j%><%}%>) +inline tuple, A<%=j%><%}%>> make_tuple(typename tuple_type::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type>::transparent_reference a<%=j%><%}%>) { return tuple, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>); } @@ -144,7 +144,7 @@ inline object const& operator>> ( } <%0.upto(GENERATION_LIMIT) {|i|%> template , typename A<%=j%><%}%>> -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple, A<%=j%><%}%>>& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -156,7 +156,7 @@ object const& operator>> ( <%}%> template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple<>&) { o.pack_array(0); @@ -164,7 +164,7 @@ const packer& operator<< ( } <%0.upto(GENERATION_LIMIT) {|i|%> template , typename A<%=j%><%}%>> -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple, A<%=j%><%}%>>& v) { o.pack_array(<%=i+1%>); diff --git a/erb/cpp03_msgpack_tuple_fwd.hpp.erb b/erb/cpp03_msgpack_tuple_fwd.hpp.erb new file mode 100644 index 00000000..99cefff0 --- /dev/null +++ b/erb/cpp03_msgpack_tuple_fwd.hpp.erb @@ -0,0 +1,125 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2013 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP +#define MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + +// FIXME operator== +// FIXME operator!= +<% GENERATION_LIMIT = 31 %> + +template , typename A<%=i%> = void<%}%>> +struct tuple; + +template +struct tuple_element; + +template +struct const_tuple_element; + +template +struct tuple_type; + +<%0.upto(GENERATION_LIMIT) {|i|%> +<%0.upto(i) {|j|%> +template , typename A<%=k%><%}%>> +struct tuple_element, A<%=k%><%}%>>, <%=j%>>; +<%}%> +<%}%> + +<%0.upto(GENERATION_LIMIT) {|i|%> +<%0.upto(i) {|j|%> +template , typename A<%=k%><%}%>> +struct const_tuple_element, A<%=k%><%}%>>, <%=j%>>; +<%}%> +<%}%> + +template <> +struct tuple<>; +<%0.upto(GENERATION_LIMIT) {|i|%> +template , typename A<%=j%><%}%>> +struct tuple, A<%=j%><%}%>>; + +template , typename A<%=j%><%}%>> +typename type::tuple_element, A<%=j%><%}%>>, N>::reference get(type::tuple, A<%=j%><%}%>>& t); +template , typename A<%=j%><%}%>> +typename type::const_tuple_element, A<%=j%><%}%>>, N>::const_reference get(type::tuple, A<%=j%><%}%>> const& t); +<%}%> + +tuple<> make_tuple(); +<%0.upto(GENERATION_LIMIT) {|i|%> +template , typename A<%=j%><%}%>> +tuple, A<%=j%><%}%>> make_tuple(typename tuple_type::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type>::transparent_reference a<%=j%><%}%>); +<%}%> + +} // namespace type + +object const& operator>> ( + object const& o, + type::tuple<>&); + +<%0.upto(GENERATION_LIMIT) {|i|%> +template , typename A<%=j%><%}%>> +object const& operator>> ( + object const& o, + type::tuple, A<%=j%><%}%>>& v); +<%}%> + +template +const packer& operator<< ( + packer& o, + const type::tuple<>&); + +<%0.upto(GENERATION_LIMIT) {|i|%> +template , typename A<%=j%><%}%>> +const packer& operator<< ( + packer& o, + const type::tuple, A<%=j%><%}%>>& v); +<%}%> + +void operator<< ( + object::with_zone& o, + const type::tuple<>&); +<%0.upto(GENERATION_LIMIT) {|i|%> +template , typename A<%=j%><%}%>> +void operator<< ( + object::with_zone& o, + const type::tuple, A<%=j%><%}%>>& v); +<%}%> + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + + +//std::ostream& operator<< (std::ostream& o, const msgpack::type::tuple<>& v); +//<%0.upto(GENERATION_LIMIT) {|i|%> +//template , typename A<%=j%><%}%>> +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple, A<%=j%><%}%>>& v); +//<%}%> + +#endif // MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP diff --git a/erb/cpp03_zone.hpp.erb b/erb/cpp03_zone.hpp.erb index 69261065..ed4d263e 100644 --- a/erb/cpp03_zone.hpp.erb +++ b/erb/cpp03_zone.hpp.erb @@ -23,7 +23,7 @@ #include #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #ifndef MSGPACK_ZONE_CHUNK_SIZE #define MSGPACK_ZONE_CHUNK_SIZE 8192 diff --git a/include/msgpack/adaptor/bool.hpp b/include/msgpack/adaptor/bool.hpp index 1d794dd1..5194b828 100644 --- a/include/msgpack/adaptor/bool.hpp +++ b/include/msgpack/adaptor/bool.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_BOOL_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -55,4 +55,4 @@ inline void operator<< (object::with_zone& o, bool v) } // namespace msgpack -#endif /* msgpack/type/bool.hpp */ +#endif // MSGPACK_TYPE_BOOL_HPP diff --git a/include/msgpack/adaptor/bool_fwd.hpp b/include/msgpack/adaptor/bool_fwd.hpp new file mode 100644 index 00000000..aecde517 --- /dev/null +++ b/include/msgpack/adaptor/bool_fwd.hpp @@ -0,0 +1,39 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_BOOL_FWD_HPP +#define MSGPACK_TYPE_BOOL_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +object const& operator>> (object const& o, bool& v); +template +packer& operator<< (packer& o, const bool& v); +void operator<< (object& o, bool v); +void operator<< (object::with_zone& o, bool v); + + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_BOOL_FWD_HPP diff --git a/include/msgpack/adaptor/char_ptr.hpp b/include/msgpack/adaptor/char_ptr.hpp index cf013b34..c1071462 100644 --- a/include/msgpack/adaptor/char_ptr.hpp +++ b/include/msgpack/adaptor/char_ptr.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_CHAR_PTR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/char_ptr_fwd.hpp b/include/msgpack/adaptor/char_ptr_fwd.hpp new file mode 100644 index 00000000..f6290e6a --- /dev/null +++ b/include/msgpack/adaptor/char_ptr_fwd.hpp @@ -0,0 +1,38 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_CHAR_PTR_FWD_HPP +#define MSGPACK_TYPE_CHAR_PTR_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +packer& operator<< (packer& o, const char* v); +void operator<< (object::with_zone& o, const char* v); +void operator<< (object& o, const char* v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_CHAR_PTR_FWD_HPP diff --git a/include/msgpack/adaptor/cpp11/array.hpp b/include/msgpack/adaptor/cpp11/array.hpp index e9e1c972..573ff2d2 100644 --- a/include/msgpack/adaptor/cpp11/array.hpp +++ b/include/msgpack/adaptor/cpp11/array.hpp @@ -20,7 +20,7 @@ #define MSGPACK_CPP11_ARRAY_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include diff --git a/include/msgpack/adaptor/cpp11/array_char.hpp b/include/msgpack/adaptor/cpp11/array_char.hpp index 34aa2761..9df71bb1 100644 --- a/include/msgpack/adaptor/cpp11/array_char.hpp +++ b/include/msgpack/adaptor/cpp11/array_char.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_ARRAY_CHAR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/cpp11/array_char_fwd.hpp b/include/msgpack/adaptor/cpp11/array_char_fwd.hpp new file mode 100644 index 00000000..5f64e522 --- /dev/null +++ b/include/msgpack/adaptor/cpp11/array_char_fwd.hpp @@ -0,0 +1,45 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_ARRAY_CHAR_FWD_HPP +#define MSGPACK_TYPE_ARRAY_CHAR_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::array& v); + +template +packer& operator<< (packer& o, const std::array& v); + +template +void operator<< (object& o, const std::array& v); + +template +void operator<< (object::with_zone& o, const std::array& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_ARRAY_CHAR_FWD_HPP diff --git a/include/msgpack/adaptor/cpp11/array_fwd.hpp b/include/msgpack/adaptor/cpp11/array_fwd.hpp new file mode 100644 index 00000000..815694b4 --- /dev/null +++ b/include/msgpack/adaptor/cpp11/array_fwd.hpp @@ -0,0 +1,44 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#ifndef MSGPACK_CPP11_ARRAY_FWD_HPP +#define MSGPACK_CPP11_ARRAY_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::array& v); + +template +packer& operator<< (packer& o, const std::array& v); + +template +void operator<< (object::with_zone& o, const std::array& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_CPP11_ARRAY_FWD_HPP diff --git a/include/msgpack/adaptor/cpp11/forward_list.hpp b/include/msgpack/adaptor/cpp11/forward_list.hpp index d2dbebb9..6f52365d 100644 --- a/include/msgpack/adaptor/cpp11/forward_list.hpp +++ b/include/msgpack/adaptor/cpp11/forward_list.hpp @@ -20,7 +20,7 @@ #define MSGPACK_CPP11_FORWARD_LIST_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include diff --git a/include/msgpack/adaptor/cpp11/forward_list_fwd.hpp b/include/msgpack/adaptor/cpp11/forward_list_fwd.hpp new file mode 100644 index 00000000..47ca34a2 --- /dev/null +++ b/include/msgpack/adaptor/cpp11/forward_list_fwd.hpp @@ -0,0 +1,44 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#ifndef MSGPACK_CPP11_FORWARD_LIST_FWD_HPP +#define MSGPACK_CPP11_FORWARD_LIST_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::forward_list& v); + +template +packer& operator<< (packer& o, const std::forward_list& v); + +template +void operator<< (object::with_zone& o, const std::forward_list& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_CPP11_FORWARD_LIST_FWD_HPP diff --git a/include/msgpack/adaptor/cpp11/tuple.hpp b/include/msgpack/adaptor/cpp11/tuple.hpp index 704d81ab..0e1a03cd 100644 --- a/include/msgpack/adaptor/cpp11/tuple.hpp +++ b/include/msgpack/adaptor/cpp11/tuple.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP11_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include @@ -57,7 +57,7 @@ struct StdTuplePacker { template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const std::tuple& v) { o.pack_array(sizeof...(Args)); @@ -95,7 +95,7 @@ struct StdTupleConverter { }; template -object const& operator>> ( +inline object const& operator>> ( object const& o, std::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } diff --git a/include/msgpack/adaptor/cpp11/tuple_fwd.hpp b/include/msgpack/adaptor/cpp11/tuple_fwd.hpp new file mode 100644 index 00000000..f17ac289 --- /dev/null +++ b/include/msgpack/adaptor/cpp11/tuple_fwd.hpp @@ -0,0 +1,62 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_CPP11_TUPLE_FWD_HPP +#define MSGPACK_CPP11_TUPLE_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +// --- Pack ( from tuple to packer stream --- +template +struct StdTuplePacker; + +template +const packer& operator<< ( + packer& o, + const std::tuple& v); + +// --- Convert from tuple to object --- + +template +struct StdTupleConverter; + +template +object const& operator>> ( + object const& o, + std::tuple& v); + +// --- Convert from tuple to object with zone --- +template +struct StdTupleToObjectWithZone; + +template +void operator<< ( + object::with_zone& o, + std::tuple const& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_CPP11_TUPLE_FWD_HPP diff --git a/include/msgpack/adaptor/deque.hpp b/include/msgpack/adaptor/deque.hpp index 364baff3..fc0bbbf7 100644 --- a/include/msgpack/adaptor/deque.hpp +++ b/include/msgpack/adaptor/deque.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_DEQUE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/deque_fwd.hpp b/include/msgpack/adaptor/deque_fwd.hpp new file mode 100644 index 00000000..81a88189 --- /dev/null +++ b/include/msgpack/adaptor/deque_fwd.hpp @@ -0,0 +1,40 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_DEQUE_FWD_HPP +#define MSGPACK_TYPE_DEQUE_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::deque& v); +template +packer& operator<< (packer& o, const std::deque& v); +template +void operator<< (object::with_zone& o, const std::deque& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_DEQUE_FWD_HPP diff --git a/include/msgpack/adaptor/detail/cpp03_define.hpp b/include/msgpack/adaptor/detail/cpp03_define.hpp index d9090236..442837cb 100644 --- a/include/msgpack/adaptor/detail/cpp03_define.hpp +++ b/include/msgpack/adaptor/detail/cpp03_define.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #define MSGPACK_DEFINE(...) \ template \ diff --git a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp index 3ffd0e29..7b9b29a1 100644 --- a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" namespace msgpack { @@ -31,7 +31,7 @@ namespace type { // FIXME operator!= -template +template struct tuple; template @@ -10389,193 +10389,193 @@ inline tuple<> make_tuple() } template -tuple make_tuple(typename tuple_type::transparent_reference a0) +inline tuple make_tuple(typename tuple_type::transparent_reference a0) { return tuple(a0); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1) { return tuple(a0, a1); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2) { return tuple(a0, a1, a2); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3) { return tuple(a0, a1, a2, a3); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4) { return tuple(a0, a1, a2, a3, a4); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5) { return tuple(a0, a1, a2, a3, a4, a5); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6) { return tuple(a0, a1, a2, a3, a4, a5, a6); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30, typename tuple_type::transparent_reference a31) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30, typename tuple_type::transparent_reference a31) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31); } @@ -10591,7 +10591,7 @@ inline object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10602,7 +10602,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10614,7 +10614,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10627,7 +10627,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10641,7 +10641,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10656,7 +10656,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10672,7 +10672,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10689,7 +10689,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10707,7 +10707,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10726,7 +10726,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10746,7 +10746,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10767,7 +10767,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10789,7 +10789,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10812,7 +10812,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10836,7 +10836,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10861,7 +10861,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10887,7 +10887,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10914,7 +10914,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10942,7 +10942,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10971,7 +10971,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11001,7 +11001,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11032,7 +11032,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11064,7 +11064,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11097,7 +11097,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11131,7 +11131,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11166,7 +11166,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11202,7 +11202,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11239,7 +11239,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11277,7 +11277,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11316,7 +11316,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11356,7 +11356,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11397,7 +11397,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11440,7 +11440,7 @@ object const& operator>> ( template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple<>&) { o.pack_array(0); @@ -11448,7 +11448,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(1); @@ -11458,7 +11458,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(2); @@ -11469,7 +11469,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(3); @@ -11481,7 +11481,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(4); @@ -11494,7 +11494,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(5); @@ -11508,7 +11508,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(6); @@ -11523,7 +11523,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(7); @@ -11539,7 +11539,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(8); @@ -11556,7 +11556,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(9); @@ -11574,7 +11574,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(10); @@ -11593,7 +11593,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(11); @@ -11613,7 +11613,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(12); @@ -11634,7 +11634,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(13); @@ -11656,7 +11656,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(14); @@ -11679,7 +11679,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(15); @@ -11703,7 +11703,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(16); @@ -11728,7 +11728,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(17); @@ -11754,7 +11754,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(18); @@ -11781,7 +11781,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(19); @@ -11809,7 +11809,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(20); @@ -11838,7 +11838,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(21); @@ -11868,7 +11868,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(22); @@ -11899,7 +11899,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(23); @@ -11931,7 +11931,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(24); @@ -11964,7 +11964,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(25); @@ -11998,7 +11998,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(26); @@ -12033,7 +12033,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(27); @@ -12069,7 +12069,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(28); @@ -12106,7 +12106,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(29); @@ -12144,7 +12144,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(30); @@ -12183,7 +12183,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(31); @@ -12223,7 +12223,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(32); diff --git a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp new file mode 100644 index 00000000..da8a9f26 --- /dev/null +++ b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp @@ -0,0 +1,4341 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2013 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP +#define MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + +// FIXME operator== +// FIXME operator!= + + +template +struct tuple; + +template +struct tuple_element; + +template +struct const_tuple_element; + +template +struct tuple_type; + + + +template +struct tuple_element, 0>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + +template +struct tuple_element, 27>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + +template +struct tuple_element, 27>; + +template +struct tuple_element, 28>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + +template +struct tuple_element, 27>; + +template +struct tuple_element, 28>; + +template +struct tuple_element, 29>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + +template +struct tuple_element, 27>; + +template +struct tuple_element, 28>; + +template +struct tuple_element, 29>; + +template +struct tuple_element, 30>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + +template +struct tuple_element, 27>; + +template +struct tuple_element, 28>; + +template +struct tuple_element, 29>; + +template +struct tuple_element, 30>; + +template +struct tuple_element, 31>; + + + + + +template +struct const_tuple_element, 0>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + +template +struct const_tuple_element, 27>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + +template +struct const_tuple_element, 27>; + +template +struct const_tuple_element, 28>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + +template +struct const_tuple_element, 27>; + +template +struct const_tuple_element, 28>; + +template +struct const_tuple_element, 29>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + +template +struct const_tuple_element, 27>; + +template +struct const_tuple_element, 28>; + +template +struct const_tuple_element, 29>; + +template +struct const_tuple_element, 30>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + +template +struct const_tuple_element, 27>; + +template +struct const_tuple_element, 28>; + +template +struct const_tuple_element, 29>; + +template +struct const_tuple_element, 30>; + +template +struct const_tuple_element, 31>; + + + +template <> +struct tuple<>; + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + + +tuple<> make_tuple(); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30, typename tuple_type::transparent_reference a31); + + +} // namespace type + +object const& operator>> ( + object const& o, + type::tuple<>&); + + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + + +template +const packer& operator<< ( + packer& o, + const type::tuple<>&); + + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + + +void operator<< ( + object::with_zone& o, + const type::tuple<>&); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + + +//std::ostream& operator<< (std::ostream& o, const msgpack::type::tuple<>& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// + +#endif // MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP diff --git a/include/msgpack/adaptor/detail/cpp11_define.hpp b/include/msgpack/adaptor/detail/cpp11_define.hpp index b8a0979f..2b0b28be 100644 --- a/include/msgpack/adaptor/detail/cpp11_define.hpp +++ b/include/msgpack/adaptor/detail/cpp11_define.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP11_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp index 4f190a86..9532021d 100644 --- a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP11_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp new file mode 100644 index 00000000..b9f148ef --- /dev/null +++ b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp @@ -0,0 +1,84 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_CPP11_MSGPACK_TUPLE_FWD_HPP +#define MSGPACK_CPP11_MSGPACK_TUPLE_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + // tuple + using std::get; + using std::tuple_size; + using std::tuple_element; + using std::uses_allocator; + using std::ignore; + using std::make_tuple; + using std::tie; + using std::forward_as_tuple; + using std::swap; + + template< class... Types > + class tuple; + + template< class... Tuples > + auto tuple_cat(Tuples&&... args) -> + decltype( + std::tuple_cat(std::forward::type::base>(args)...) + ); +} // namespace type + +// --- Pack ( from tuple to packer stream --- +template +struct MsgpackTuplePacker; + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +// --- Convert from tuple to object --- + +template +struct MsgpackTupleConverter; + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +// --- Convert from tuple to object with zone --- +template +struct MsgpackTupleToObjectWithZone; + +template +void operator<< ( + object::with_zone& o, + type::tuple const& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_CPP11_MSGPACK_TUPLE_FWD_HPP diff --git a/include/msgpack/adaptor/fixint.hpp b/include/msgpack/adaptor/fixint.hpp index ca5e6b02..83a9e95c 100644 --- a/include/msgpack/adaptor/fixint.hpp +++ b/include/msgpack/adaptor/fixint.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_FIXINT_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include "msgpack/adaptor/int.hpp" namespace msgpack { diff --git a/include/msgpack/adaptor/fixint_fwd.hpp b/include/msgpack/adaptor/fixint_fwd.hpp new file mode 100644 index 00000000..cad85ebe --- /dev/null +++ b/include/msgpack/adaptor/fixint_fwd.hpp @@ -0,0 +1,100 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_FIXINT_FWD_HPP +#define MSGPACK_TYPE_FIXINT_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + + +template +struct fix_int; + +typedef fix_int fix_uint8; +typedef fix_int fix_uint16; +typedef fix_int fix_uint32; +typedef fix_int fix_uint64; + +typedef fix_int fix_int8; +typedef fix_int fix_int16; +typedef fix_int fix_int32; +typedef fix_int fix_int64; + + +} // namespace type + + +object const& operator>> (object const& o, type::fix_int8& v); +object const& operator>> (object const& o, type::fix_int16& v); +object const& operator>> (object const& o, type::fix_int32& v); +object const& operator>> (object const& o, type::fix_int64& v); + +object const& operator>> (object const& o, type::fix_uint8& v); +object const& operator>> (object const& o, type::fix_uint16& v); +object const& operator>> (object const& o, type::fix_uint32& v); +object const& operator>> (object const& o, type::fix_uint64& v); + +template +packer& operator<< (packer& o, const type::fix_int8& v); +template +packer& operator<< (packer& o, const type::fix_int16& v); +template +packer& operator<< (packer& o, const type::fix_int32& v); +template +packer& operator<< (packer& o, const type::fix_int64& v); + +template +packer& operator<< (packer& o, const type::fix_uint8& v); +template +packer& operator<< (packer& o, const type::fix_uint16& v); +template +packer& operator<< (packer& o, const type::fix_uint32& v); +template +packer& operator<< (packer& o, const type::fix_uint64& v); + +void operator<< (object& o, type::fix_int8 v); +void operator<< (object& o, type::fix_int16 v); +void operator<< (object& o, type::fix_int32 v); +void operator<< (object& o, type::fix_int64 v); + +void operator<< (object& o, type::fix_uint8 v); +void operator<< (object& o, type::fix_uint16 v); +void operator<< (object& o, type::fix_uint32 v); +void operator<< (object& o, type::fix_uint64 v); + +void operator<< (object::with_zone& o, type::fix_int8 v); +void operator<< (object::with_zone& o, type::fix_int16 v); +void operator<< (object::with_zone& o, type::fix_int32 v); +void operator<< (object::with_zone& o, type::fix_int64 v); + +void operator<< (object::with_zone& o, type::fix_uint8 v); +void operator<< (object::with_zone& o, type::fix_uint16 v); +void operator<< (object::with_zone& o, type::fix_uint32 v); +void operator<< (object::with_zone& o, type::fix_uint64 v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_FIXINT_FWD_HPP diff --git a/include/msgpack/adaptor/float.hpp b/include/msgpack/adaptor/float.hpp index bbace593..499cbbe0 100644 --- a/include/msgpack/adaptor/float.hpp +++ b/include/msgpack/adaptor/float.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_FLOAT_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -102,4 +102,4 @@ inline void operator<< (object::with_zone& o, double v) } // namespace msgpack -#endif /* msgpack/type/float.hpp */ +#endif // MSGPACK_TYPE_FLOAT_HPP diff --git a/include/msgpack/adaptor/float_fwd.hpp b/include/msgpack/adaptor/float_fwd.hpp new file mode 100644 index 00000000..5eb9bafb --- /dev/null +++ b/include/msgpack/adaptor/float_fwd.hpp @@ -0,0 +1,44 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_FLOAT_FWD_HPP +#define MSGPACK_TYPE_FLOAT_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +object const& operator>> (object const& o, float& v); +template +packer& operator<< (packer& o, const float& v); +object const& operator>> (object const& o, double& v); +template +packer& operator<< (packer& o, const double& v); +void operator<< (object& o, float v); +void operator<< (object& o, double v); +void operator<< (object::with_zone& o, float v); +void operator<< (object::with_zone& o, double v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_FLOAT_FWD_HPP diff --git a/include/msgpack/adaptor/int.hpp b/include/msgpack/adaptor/int.hpp index 6491d274..51c0021e 100644 --- a/include/msgpack/adaptor/int.hpp +++ b/include/msgpack/adaptor/int.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_INT_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/int_fwd.hpp b/include/msgpack/adaptor/int_fwd.hpp new file mode 100644 index 00000000..682f6b8e --- /dev/null +++ b/include/msgpack/adaptor/int_fwd.hpp @@ -0,0 +1,100 @@ +// +// MessagePack for C++ forward declaration +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_INT_FWD_HPP +#define MSGPACK_TYPE_INT_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1){ + +object const& operator>> (object const& o, char& v); + +object const& operator>> (object const& o, signed char& v); +object const& operator>> (object const& o, signed short& v); +object const& operator>> (object const& o, signed int& v); +object const& operator>> (object const& o, signed long& v); +object const& operator>> (object const& o, signed long long& v); + +object const& operator>> (object const& o, unsigned char& v); +object const& operator>> (object const& o, unsigned short& v); +object const& operator>> (object const& o, unsigned int& v); +object const& operator>> (object const& o, unsigned long& v); +object const& operator>> (object const& o, unsigned long long& v); + +template +packer& operator<< (packer& o, char v); + +template +packer& operator<< (packer& o, signed char v); +template +packer& operator<< (packer& o, signed short v); +template +packer& operator<< (packer& o, signed int v); +template +packer& operator<< (packer& o, signed long v); +template +packer& operator<< (packer& o, signed long long v); + +template +packer& operator<< (packer& o, unsigned char v); +template +packer& operator<< (packer& o, unsigned short v); +template +packer& operator<< (packer& o, unsigned int v); +template +packer& operator<< (packer& o, unsigned long v); +template +packer& operator<< (packer& o, unsigned long long v); + + +void operator<< (object& o, char v); + +void operator<< (object& o, signed char v); +void operator<< (object& o, signed short v); +void operator<< (object& o, signed int v); +void operator<< (object& o, signed long v); +void operator<< (object& o, signed long long v); + +void operator<< (object& o, unsigned char v); +void operator<< (object& o, unsigned short v); +void operator<< (object& o, unsigned int v); +void operator<< (object& o, unsigned long v); +void operator<< (object& o, unsigned long long v); + +void operator<< (object::with_zone& o, char v); + +void operator<< (object::with_zone& o, signed char v); +void operator<< (object::with_zone& o, signed short v); +void operator<< (object::with_zone& o, signed int v); +void operator<< (object::with_zone& o, signed long v); +void operator<< (object::with_zone& o, const signed long long& v); + +void operator<< (object::with_zone& o, unsigned char v); +void operator<< (object::with_zone& o, unsigned short v); +void operator<< (object::with_zone& o, unsigned int v); +void operator<< (object::with_zone& o, unsigned long v); +void operator<< (object::with_zone& o, const unsigned long long& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_INT_FWD_HPP diff --git a/include/msgpack/adaptor/list.hpp b/include/msgpack/adaptor/list.hpp index b7690dd7..b185fa24 100644 --- a/include/msgpack/adaptor/list.hpp +++ b/include/msgpack/adaptor/list.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_LIST_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -76,4 +76,4 @@ inline void operator<< (object::with_zone& o, const std::list& v) } // namespace msgpack -#endif /* msgpack/type/list.hpp */ +#endif // MSGPACK_TYPE_LIST_HPP diff --git a/include/msgpack/adaptor/list_fwd.hpp b/include/msgpack/adaptor/list_fwd.hpp new file mode 100644 index 00000000..814a21a0 --- /dev/null +++ b/include/msgpack/adaptor/list_fwd.hpp @@ -0,0 +1,40 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_LIST_FWD_HPP +#define MSGPACK_TYPE_LIST_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::list& v); +template +packer& operator<< (packer& o, const std::list& v); +template +void operator<< (object::with_zone& o, const std::list& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_LIST_FWD_HPP diff --git a/include/msgpack/adaptor/map.hpp b/include/msgpack/adaptor/map.hpp index de9f825e..16b600d8 100644 --- a/include/msgpack/adaptor/map.hpp +++ b/include/msgpack/adaptor/map.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_MAP_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include #include #include @@ -204,4 +204,4 @@ inline void operator<< (object::with_zone& o, const std::multimap& v) } // namespace msgpack -#endif /* msgpack/type/map.hpp */ +#endif // MSGPACK_TYPE_MAP_HPP diff --git a/include/msgpack/adaptor/map_fwd.hpp b/include/msgpack/adaptor/map_fwd.hpp new file mode 100644 index 00000000..fe5cc6b0 --- /dev/null +++ b/include/msgpack/adaptor/map_fwd.hpp @@ -0,0 +1,69 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_MAP_FWD_HPP +#define MSGPACK_TYPE_MAP_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include +#include +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + +template +class assoc_vector; + +namespace detail { + template + struct pair_first_less; +} // namespace detail + +} // namespace type + + +template +object const& operator>> (object const& o, type::assoc_vector& v); +template +packer& operator<< (packer& o, const type::assoc_vector& v); +template +void operator<< (object::with_zone& o, const type::assoc_vector& v); + +template +object const& operator>> (object const& o, std::map& v); +template +packer& operator<< (packer& o, const std::map& v); +template +void operator<< (object::with_zone& o, const std::map& v); + +template +object const& operator>> (object const& o, std::multimap& v); +template +packer& operator<< (packer& o, const std::multimap& v); +template +void operator<< (object::with_zone& o, const std::multimap& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_MAP_HPP diff --git a/include/msgpack/adaptor/msgpack_tuple_fwd.hpp b/include/msgpack/adaptor/msgpack_tuple_fwd.hpp new file mode 100644 index 00000000..12ea8e9b --- /dev/null +++ b/include/msgpack/adaptor/msgpack_tuple_fwd.hpp @@ -0,0 +1,29 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_MSGPACK_TUPLE_FWD_HPP +#define MSGPACK_MSGPACK_TUPLE_FWD_HPP + +#include "msgpack/cpp_config.hpp" + +#if defined(MSGPACK_USE_CPP03) +#include "detail/cpp03_msgpack_tuple_fwd.hpp" +#else // MSGPACK_USE_CPP03 +#include "detail/cpp11_msgpack_tuple_fwd.hpp" +#endif // MSGPACK_USE_CPP03 + +#endif // MSGPACK_MSGPACK_TUPLE_FWD_HPP diff --git a/include/msgpack/adaptor/nil.hpp b/include/msgpack/adaptor/nil.hpp index c8f2a0c7..1889307a 100644 --- a/include/msgpack/adaptor/nil.hpp +++ b/include/msgpack/adaptor/nil.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_NIL_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" namespace msgpack { @@ -65,4 +65,4 @@ inline void object::as() const } // namespace msgpack -#endif /* msgpack/type/nil.hpp */ +#endif // MSGPACK_TYPE_NIL_HPP diff --git a/include/msgpack/adaptor/nil_fwd.hpp b/include/msgpack/adaptor/nil_fwd.hpp new file mode 100644 index 00000000..80d14860 --- /dev/null +++ b/include/msgpack/adaptor/nil_fwd.hpp @@ -0,0 +1,51 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_NIL_FWD_HPP +#define MSGPACK_TYPE_NIL_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + +struct nil; + +} // namespace type + + +object const& operator>> (object const& o, type::nil&); + +template +packer& operator<< (packer& o, const type::nil&); + +void operator<< (object& o, type::nil); + +void operator<< (object::with_zone& o, type::nil v); + +template <> +inline void object::as() const; + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_NIL_FWD_HPP diff --git a/include/msgpack/adaptor/pair.hpp b/include/msgpack/adaptor/pair.hpp index 238abb8e..9efc1892 100644 --- a/include/msgpack/adaptor/pair.hpp +++ b/include/msgpack/adaptor/pair.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_PAIR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -60,4 +60,4 @@ inline void operator<< (object::with_zone& o, const std::pair& v) } // namespace msgpack -#endif /* msgpack/type/pair.hpp */ +#endif // MSGPACK_TYPE_PAIR_HPP diff --git a/include/msgpack/adaptor/pair_fwd.hpp b/include/msgpack/adaptor/pair_fwd.hpp new file mode 100644 index 00000000..d6d84d39 --- /dev/null +++ b/include/msgpack/adaptor/pair_fwd.hpp @@ -0,0 +1,42 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_PAIR_FWD_HPP +#define MSGPACK_TYPE_PAIR_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::pair& v); + +template +packer& operator<< (packer& o, const std::pair& v); + +template +void operator<< (object::with_zone& o, const std::pair& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_PAIR_FWD_HPP diff --git a/include/msgpack/adaptor/raw.hpp b/include/msgpack/adaptor/raw.hpp index 52790519..a01a72c8 100644 --- a/include/msgpack/adaptor/raw.hpp +++ b/include/msgpack/adaptor/raw.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_RAW_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include #include @@ -95,4 +95,4 @@ inline void operator<< (object::with_zone& o, const type::raw_ref& v) } // namespace msgpack -#endif /* msgpack/type/raw.hpp */ +#endif // MSGPACK_TYPE_RAW_HPP diff --git a/include/msgpack/adaptor/raw_fwd.hpp b/include/msgpack/adaptor/raw_fwd.hpp new file mode 100644 index 00000000..26f83434 --- /dev/null +++ b/include/msgpack/adaptor/raw_fwd.hpp @@ -0,0 +1,50 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_RAW_FWD_HPP +#define MSGPACK_TYPE_RAW_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + +struct raw_ref; + +} // namespace type + + +object const& operator>> (object const& o, type::raw_ref& v); + +template +packer& operator<< (packer& o, const type::raw_ref& v); + +void operator<< (object& o, const type::raw_ref& v); + +void operator<< (object::with_zone& o, const type::raw_ref& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_RAW_FWD_HPP diff --git a/include/msgpack/adaptor/set.hpp b/include/msgpack/adaptor/set.hpp index a01b1618..2e154fdb 100644 --- a/include/msgpack/adaptor/set.hpp +++ b/include/msgpack/adaptor/set.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_SET_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include @@ -122,4 +122,4 @@ inline void operator<< (object::with_zone& o, const std::multiset& v) } // namespace msgpack -#endif /* msgpack/type/set.hpp */ +#endif // MSGPACK_TYPE_SET_HPP diff --git a/include/msgpack/adaptor/set_fwd.hpp b/include/msgpack/adaptor/set_fwd.hpp new file mode 100644 index 00000000..ae5712f8 --- /dev/null +++ b/include/msgpack/adaptor/set_fwd.hpp @@ -0,0 +1,52 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_SET_FWD_HPP +#define MSGPACK_TYPE_SET_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::set& v); + +template +packer& operator<< (packer& o, const std::set& v); + +template +void operator<< (object::with_zone& o, const std::set& v); + +template +object const& operator>> (object const& o, std::multiset& v); + +template +packer& operator<< (packer& o, const std::multiset& v); + +template +void operator<< (object::with_zone& o, const std::multiset& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_SET_FWD_HPP diff --git a/include/msgpack/adaptor/string.hpp b/include/msgpack/adaptor/string.hpp index 66068361..dd4a37a9 100644 --- a/include/msgpack/adaptor/string.hpp +++ b/include/msgpack/adaptor/string.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_STRING_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -70,4 +70,4 @@ inline void operator<< (object& o, const std::string& v) } // namespace msgpack -#endif /* msgpack/type/string.hpp */ +#endif // MSGPACK_TYPE_STRING_HPP diff --git a/include/msgpack/adaptor/string_fwd.hpp b/include/msgpack/adaptor/string_fwd.hpp new file mode 100644 index 00000000..471654e6 --- /dev/null +++ b/include/msgpack/adaptor/string_fwd.hpp @@ -0,0 +1,42 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_STRING_FWD_HPP +#define MSGPACK_TYPE_STRING_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +object const& operator>> (object const& o, std::string& v); + +template +packer& operator<< (packer& o, const std::string& v); + +void operator<< (object::with_zone& o, const std::string& v); + +void operator<< (object& o, const std::string& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_STRING_FWD_HPP diff --git a/include/msgpack/adaptor/tr1/unordered_map.hpp b/include/msgpack/adaptor/tr1/unordered_map.hpp index 77399581..de24a11c 100644 --- a/include/msgpack/adaptor/tr1/unordered_map.hpp +++ b/include/msgpack/adaptor/tr1/unordered_map.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_TR1_UNORDERED_MAP_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) @@ -149,4 +149,4 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m #undef MSGPACK_STD_TR1 -#endif /* msgpack/type/map.hpp */ +#endif // MSGPACK_TYPE_TR1_UNORDERED_MAP_HPP diff --git a/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp b/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp new file mode 100644 index 00000000..99801e96 --- /dev/null +++ b/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp @@ -0,0 +1,72 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_TR1_UNORDERED_MAP_FWD_HPP +#define MSGPACK_TYPE_TR1_UNORDERED_MAP_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + +#define MSGPACK_HAS_STD_UNOURDERED_MAP +#include +#define MSGPACK_STD_TR1 std + +#else // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + +#if __GNUC__ >= 4 + +#define MSGPACK_HAS_STD_TR1_UNOURDERED_MAP + +#include +#define MSGPACK_STD_TR1 std::tr1 + +#endif // __GNUC__ >= 4 + +#endif // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, MSGPACK_STD_TR1::unordered_map& v); + +template +packer& operator<< (packer& o, const MSGPACK_STD_TR1::unordered_map& v); + +template +void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_map& v); + +template +object const& operator>> (object const& o, MSGPACK_STD_TR1::unordered_multimap& v); + +template +packer& operator<< (packer& o, const MSGPACK_STD_TR1::unordered_multimap& v); + +template +void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_multimap& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#undef MSGPACK_STD_TR1 + +#endif // MSGPACK_TYPE_TR1_UNORDERED_MAP_FWD_HPP diff --git a/include/msgpack/adaptor/tr1/unordered_set.hpp b/include/msgpack/adaptor/tr1/unordered_set.hpp index e81fe590..928556fb 100644 --- a/include/msgpack/adaptor/tr1/unordered_set.hpp +++ b/include/msgpack/adaptor/tr1/unordered_set.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_TR1_UNORDERED_SET_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) @@ -141,4 +141,4 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m #undef MSGPACK_STD_TR1 -#endif /* msgpack/type/set.hpp */ +#endif // MSGPACK_TYPE_TR1_UNORDERED_SET_HPP diff --git a/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp b/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp new file mode 100644 index 00000000..f5e9e648 --- /dev/null +++ b/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp @@ -0,0 +1,71 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_TR1_UNORDERED_SET_FWD_HPP +#define MSGPACK_TYPE_TR1_UNORDERED_SET_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + +#define MSGPACK_HAS_STD_UNOURDERED_SET +#include +#define MSGPACK_STD_TR1 std + +#else // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + +#if __GNUC__ >= 4 + +#define MSGPACK_HAS_STD_TR1_UNOURDERED_SET + +#include +#define MSGPACK_STD_TR1 std::tr1 + +#endif // __GNUC__ >= 4 + +#endif // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, MSGPACK_STD_TR1::unordered_set& v); + +template +packer& operator<< (packer& o, const MSGPACK_STD_TR1::unordered_set& v); + +template +void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_set& v); + +template +object const& operator>> (object const& o, MSGPACK_STD_TR1::unordered_multiset& v); + +template +packer& operator<< (packer& o, const MSGPACK_STD_TR1::unordered_multiset& v); + +template +void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_multiset& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#undef MSGPACK_STD_TR1 + +#endif // MSGPACK_TYPE_TR1_UNORDERED_SET_FWD_HPP diff --git a/include/msgpack/adaptor/vector.hpp b/include/msgpack/adaptor/vector.hpp index 21f2f085..c004d388 100644 --- a/include/msgpack/adaptor/vector.hpp +++ b/include/msgpack/adaptor/vector.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_VECTOR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -80,4 +80,4 @@ inline void operator<< (object::with_zone& o, const std::vector& v) } // namespace msgpack -#endif /* msgpack/type/vector.hpp */ +#endif // MSGPACK_TYPE_VECTOR_HPP diff --git a/include/msgpack/adaptor/vector_char.hpp b/include/msgpack/adaptor/vector_char.hpp index a702f445..225c68ce 100644 --- a/include/msgpack/adaptor/vector_char.hpp +++ b/include/msgpack/adaptor/vector_char.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_VECTOR_CHAR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/vector_char_fwd.hpp b/include/msgpack/adaptor/vector_char_fwd.hpp new file mode 100644 index 00000000..0d668efd --- /dev/null +++ b/include/msgpack/adaptor/vector_char_fwd.hpp @@ -0,0 +1,42 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_VECTOR_CHAR_FWD_HPP +#define MSGPACK_TYPE_VECTOR_CHAR_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +object const& operator>> (object const& o, std::vector& v); + +template +packer& operator<< (packer& o, const std::vector& v); + +void operator<< (object& o, const std::vector& v); + +void operator<< (object::with_zone& o, const std::vector& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_VECTOR_CHAR_FWD_HPP diff --git a/include/msgpack/adaptor/vector_fwd.hpp b/include/msgpack/adaptor/vector_fwd.hpp new file mode 100644 index 00000000..1e144018 --- /dev/null +++ b/include/msgpack/adaptor/vector_fwd.hpp @@ -0,0 +1,42 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_VECTOR_FWD_HPP +#define MSGPACK_TYPE_VECTOR_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::vector& v); + +template +packer& operator<< (packer& o, const std::vector& v); + +template +void operator<< (object::with_zone& o, const std::vector& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_VECTOR_FWD_HPP diff --git a/include/msgpack/detail/cpp03_zone.hpp b/include/msgpack/detail/cpp03_zone.hpp index b2acd3d8..b050a998 100644 --- a/include/msgpack/detail/cpp03_zone.hpp +++ b/include/msgpack/detail/cpp03_zone.hpp @@ -23,7 +23,7 @@ #include #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #ifndef MSGPACK_ZONE_CHUNK_SIZE #define MSGPACK_ZONE_CHUNK_SIZE 8192 diff --git a/include/msgpack/object.hpp b/include/msgpack/object.hpp index 7e22426c..4be3fca4 100644 --- a/include/msgpack/object.hpp +++ b/include/msgpack/object.hpp @@ -19,9 +19,36 @@ #define MSGPACK_OBJECT_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object_forward.hpp" +#include "msgpack/object_fwd.hpp" #include "msgpack/pack.hpp" #include "msgpack/zone.hpp" +#include "msgpack/adaptor/int_fwd.hpp" +#include "msgpack/adaptor/bool_fwd.hpp" +#include "msgpack/adaptor/char_ptr_fwd.hpp" +#include "msgpack/adaptor/deque_fwd.hpp" +#include "msgpack/adaptor/fixint_fwd.hpp" +#include "msgpack/adaptor/float_fwd.hpp" +#include "msgpack/adaptor/int_fwd.hpp" +#include "msgpack/adaptor/list_fwd.hpp" +#include "msgpack/adaptor/map_fwd.hpp" +#include "msgpack/adaptor/msgpack_tuple_fwd.hpp" +#include "msgpack/adaptor/nil_fwd.hpp" +#include "msgpack/adaptor/pair_fwd.hpp" +#include "msgpack/adaptor/raw_fwd.hpp" +#include "msgpack/adaptor/set_fwd.hpp" +#include "msgpack/adaptor/string_fwd.hpp" +#include "msgpack/adaptor/vector_fwd.hpp" +#include "msgpack/adaptor/vector_char_fwd.hpp" +#include "msgpack/adaptor/tr1/unordered_map_fwd.hpp" +#include "msgpack/adaptor/tr1/unordered_set_fwd.hpp" + +#if !defined(MSGPACK_USE_CPP03) +#include "adaptor/cpp11/array_fwd.hpp" +#include "adaptor/cpp11/array_char_fwd.hpp" +#include "adaptor/cpp11/forward_list_fwd.hpp" +#include "adaptor/cpp11/tuple_fwd.hpp" +#endif // !defined(MSGPACK_USE_CPP03) + #include #include #include @@ -50,6 +77,18 @@ private: object const& obj; }; +inline object const& operator>> (object const& o, object& v) +{ + v = o; + return o; +} + +template +inline object const& operator>> (object const& o, T& v) +{ + v.msgpack_unpack(o.convert()); + return o; +} // obsolete template @@ -64,38 +103,15 @@ public: template void msgpack_pack(Packer& o) const { - o << static_cast(*this); + msgpack::operator<<(o, static_cast(*this)); } void msgpack_unpack(object const& o) { - o >> static_cast(*this); + msgpack::operator>>(o, static_cast(*this)); } }; - -template -template -inline packer& packer::pack(const T& v) -{ - *this << v; - return *this; -} - -inline object const& operator>> (object const& o, object& v) -{ - v = o; - return o; -} - -// convert operator -template -inline object const& operator>> (object const& o, T& v) -{ - v.msgpack_unpack(o.convert()); - return o; -} - namespace detail { template struct packer_serializer { @@ -120,6 +136,13 @@ inline void operator<< (object::with_zone& o, const T& v) v.msgpack_object(static_cast(&o), o.zone); } +template +template +inline packer& packer::pack(const T& v) +{ + msgpack::operator<<(*this, v); + return *this; +} inline bool operator==(const object& x, const object& y) { @@ -228,7 +251,7 @@ inline object::implicit_type object::convert() const template inline void object::convert(T& v) const { - *this >> v; + msgpack::operator>>(*this, v); } template @@ -254,7 +277,7 @@ inline object::object() template inline object::object(const T& v) { - *this << v; + msgpack::operator<<(*this, v); } template @@ -268,7 +291,7 @@ template object::object(const T& v, zone& z) { with_zone oz(z); - oz << v; + msgpack::operator<<(oz, v); type = oz.type; via = oz.via; } @@ -277,7 +300,7 @@ template object::object(const T& v, zone* z) { with_zone oz(*z); - oz << v; + msgpack::operator<<(oz, v); type = oz.type; via = oz.via; } @@ -327,7 +350,7 @@ inline void pack_copy(packer& o, T v) template -packer& operator<< (packer& o, const object& v) +inline packer& operator<< (packer& o, const object& v) { switch(v.type) { case type::NIL: @@ -374,7 +397,7 @@ packer& operator<< (packer& o, const object& v) for(object* p(v.via.array.ptr), * const pend(v.via.array.ptr + v.via.array.size); p < pend; ++p) { - o << *p; + msgpack::operator<<(o, *p); } return o; @@ -383,8 +406,8 @@ packer& operator<< (packer& o, const object& v) for(object_kv* p(v.via.map.ptr), * const pend(v.via.map.ptr + v.via.map.size); p < pend; ++p) { - o << p->key; - o << p->val; + msgpack::operator<<(o, p->key); + msgpack::operator<<(o, p->val); } return o; diff --git a/include/msgpack/object_forward.hpp b/include/msgpack/object_fwd.hpp similarity index 83% rename from include/msgpack/object_forward.hpp rename to include/msgpack/object_fwd.hpp index cad24f45..e7a04c78 100644 --- a/include/msgpack/object_forward.hpp +++ b/include/msgpack/object_fwd.hpp @@ -16,8 +16,8 @@ // limitations under the License. // -#ifndef MSGPACK_OBJECT_FORWARD_HPP -#define MSGPACK_OBJECT_FORWARD_HPP +#ifndef MSGPACK_OBJECT_FWD_HPP +#define MSGPACK_OBJECT_FWD_HPP #include "msgpack/versioning.hpp" #include "msgpack/zone.hpp" @@ -137,8 +137,29 @@ struct object_kv { object val; }; +object const& operator>> (object const& o, object& v); + +template +object const& operator>> (object const& o, T& v); + +template +void operator<< (object::with_zone& o, const T& v); + + +template +class packer; + +template +packer& operator<< (packer& o, const object& v); + +template +packer& operator<< (packer& o, const T& v); + +template +void operator<< (object::with_zone& o, const T& v); + } // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack -#endif // MSGPACK_OBJECT_FORWARD_HPP +#endif // MSGPACK_OBJECT_FWD_HPP diff --git a/include/msgpack_forward.hpp b/include/msgpack_fwd.hpp similarity index 86% rename from include/msgpack_forward.hpp rename to include/msgpack_fwd.hpp index 90963fe6..91921dbb 100644 --- a/include/msgpack_forward.hpp +++ b/include/msgpack_fwd.hpp @@ -15,12 +15,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef MSGPACK_FORWARD_HPP -#define MSGPACK_FORWARD_HPP +#ifndef MSGPACK_FWD_HPP +#define MSGPACK_FWD_HPP #include "msgpack/versioning.hpp" #include "msgpack/zone.hpp" -#include "msgpack/object_forward.hpp" +#include "msgpack/object_fwd.hpp" #include "msgpack/pack.hpp" -#endif // MSGPACK_FORWARD_HPP +#endif // MSGPACK_FWD_HPP diff --git a/preprocess b/preprocess index 5efab359..e25eff3f 100755 --- a/preprocess +++ b/preprocess @@ -13,5 +13,6 @@ preprocess() { } preprocess erb/cpp03_msgpack_tuple.hpp include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp +preprocess erb/cpp03_msgpack_tuple_fwd.hpp include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp preprocess erb/cpp03_define.hpp include/msgpack/adaptor/detail/cpp03_define.hpp preprocess erb/cpp03_zone.hpp include/msgpack/detail/cpp03_zone.hpp diff --git a/src/Makefile.am b/src/Makefile.am index df0a872c..2c1ba1d7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -53,39 +53,64 @@ nobase_include_HEADERS = \ if ENABLE_CXX nobase_include_HEADERS += \ ../include/msgpack.hpp \ - ../include/msgpack_forward.hpp \ + ../include/msgpack_fwd.hpp \ ../include/msgpack/adaptor/bool.hpp \ + ../include/msgpack/adaptor/bool_fwd.hpp \ ../include/msgpack/adaptor/char_ptr.hpp \ + ../include/msgpack/adaptor/char_ptr_fwd.hpp \ ../include/msgpack/adaptor/cpp11/array.hpp \ + ../include/msgpack/adaptor/cpp11/array_fwd.hpp \ ../include/msgpack/adaptor/cpp11/array_char.hpp \ + ../include/msgpack/adaptor/cpp11/array_char_fwd.hpp \ ../include/msgpack/adaptor/cpp11/forward_list.hpp \ + ../include/msgpack/adaptor/cpp11/forward_list_fwd.hpp \ ../include/msgpack/adaptor/cpp11/tuple.hpp \ + ../include/msgpack/adaptor/cpp11/tuple_fwd.hpp \ ../include/msgpack/adaptor/define.hpp \ ../include/msgpack/adaptor/deque.hpp \ + ../include/msgpack/adaptor/deque_fwd.hpp \ ../include/msgpack/adaptor/detail/cpp03_define.hpp \ ../include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp \ + ../include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp \ ../include/msgpack/adaptor/detail/cpp11_define.hpp \ ../include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp \ + ../include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp \ ../include/msgpack/adaptor/fixint.hpp \ + ../include/msgpack/adaptor/fixint_fwd.hpp \ ../include/msgpack/adaptor/float.hpp \ + ../include/msgpack/adaptor/float_fwd.hpp \ ../include/msgpack/adaptor/int.hpp \ + ../include/msgpack/adaptor/int_fwd.hpp \ ../include/msgpack/adaptor/list.hpp \ + ../include/msgpack/adaptor/list_fwd.hpp \ ../include/msgpack/adaptor/map.hpp \ + ../include/msgpack/adaptor/map_fwd.hpp \ ../include/msgpack/adaptor/msgpack_tuple.hpp \ + ../include/msgpack/adaptor/msgpack_tuple_fwd.hpp \ ../include/msgpack/adaptor/nil.hpp \ + ../include/msgpack/adaptor/nil_fwd.hpp \ ../include/msgpack/adaptor/pair.hpp \ + ../include/msgpack/adaptor/pair_fwd.hpp \ ../include/msgpack/adaptor/raw.hpp \ + ../include/msgpack/adaptor/raw_fwd.hpp \ ../include/msgpack/adaptor/set.hpp \ + ../include/msgpack/adaptor/set_fwd.hpp \ ../include/msgpack/adaptor/string.hpp \ + ../include/msgpack/adaptor/string_fwd.hpp \ ../include/msgpack/adaptor/tr1/unordered_map.hpp \ + ../include/msgpack/adaptor/tr1/unordered_map_fwd.hpp \ ../include/msgpack/adaptor/tr1/unordered_set.hpp \ + ../include/msgpack/adaptor/tr1/unordered_set_fwd.hpp \ ../include/msgpack/adaptor/vector.hpp \ + ../include/msgpack/adaptor/vector_fwd.hpp \ + ../include/msgpack/adaptor/vector_char.hpp \ + ../include/msgpack/adaptor/vector_char_fwd.hpp \ ../include/msgpack/cpp_config.hpp \ ../include/msgpack/detail/cpp03_zone.hpp \ ../include/msgpack/detail/cpp11_zone.hpp \ ../include/msgpack/fbuffer.hpp \ ../include/msgpack/object.hpp \ - ../include/msgpack/object_forward.hpp \ + ../include/msgpack/object_fwd.hpp \ ../include/msgpack/pack.hpp \ ../include/msgpack/sbuffer.hpp \ ../include/msgpack/type.hpp \ From ca12e6d39d5d8659c03727f72fc34f2455bd206b Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Thu, 16 Oct 2014 14:06:57 +0900 Subject: [PATCH 4/6] Added packer_serializer class template declaration to object_fwd.hpp --- include/msgpack/object_fwd.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/msgpack/object_fwd.hpp b/include/msgpack/object_fwd.hpp index e7a04c78..a8ae4422 100644 --- a/include/msgpack/object_fwd.hpp +++ b/include/msgpack/object_fwd.hpp @@ -137,6 +137,11 @@ struct object_kv { object val; }; +namespace detail { +template +struct packer_serializer; +} // namespace detail + object const& operator>> (object const& o, object& v); template From fc65bc06825d0e6b6ee99de6bd0f0c5b686abad4 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Thu, 16 Oct 2014 14:07:53 +0900 Subject: [PATCH 5/6] Replaced tuple with std::tuple. Added include file int_fwd.hpp for MSGPACK_ADD_ENUM. --- include/msgpack/adaptor/detail/cpp11_define.hpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/include/msgpack/adaptor/detail/cpp11_define.hpp b/include/msgpack/adaptor/detail/cpp11_define.hpp index 2b0b28be..1953d4b4 100644 --- a/include/msgpack/adaptor/detail/cpp11_define.hpp +++ b/include/msgpack/adaptor/detail/cpp11_define.hpp @@ -21,7 +21,11 @@ #include "msgpack/versioning.hpp" #include "msgpack_fwd.hpp" +// for MSGPACK_ADD_ENUM +#include "msgpack/adaptor/int_fwd.hpp" + #include +#include #define MSGPACK_DEFINE(...) \ template \ @@ -110,7 +114,7 @@ struct define_imp { template struct define { typedef define value_type; - typedef tuple tuple_type; + typedef std::tuple tuple_type; define(Args&... args) : a(args...) {} template @@ -118,13 +122,13 @@ struct define { { pk.pack_array(sizeof...(Args)); - define_imp, sizeof...(Args)>::pack(pk, a); + define_imp, sizeof...(Args)>::pack(pk, a); } void msgpack_unpack(msgpack::object const& o) { if(o.type != type::ARRAY) { throw type_error(); } - define_imp, sizeof...(Args)>::unpack(o, a); + define_imp, sizeof...(Args)>::unpack(o, a); } void msgpack_object(msgpack::object* o, msgpack::zone& z) const { @@ -132,16 +136,16 @@ struct define { o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*sizeof...(Args))); o->via.array.size = sizeof...(Args); - define_imp, sizeof...(Args)>::object(o, z, a); + define_imp, sizeof...(Args)>::object(o, z, a); } - tuple a; + std::tuple a; }; template <> struct define<> { typedef define<> value_type; - typedef tuple<> tuple_type; + typedef std::tuple<> tuple_type; template void msgpack_pack(Packer& pk) const { From b5e66150e98165c711f60d626c1621a4327a1ffa Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Sun, 19 Oct 2014 21:18:30 +0900 Subject: [PATCH 6/6] Minimized header files dependency. Added help comments for typical compile error. --- erb/cpp03_define.hpp.erb | 3 +- erb/cpp03_msgpack_tuple.hpp.erb | 2 +- erb/cpp03_zone.hpp.erb | 1 - include/msgpack/adaptor/bool.hpp | 2 +- include/msgpack/adaptor/char_ptr.hpp | 2 +- include/msgpack/adaptor/cpp11/array.hpp | 2 +- .../msgpack/adaptor/cpp11/forward_list.hpp | 2 +- include/msgpack/adaptor/cpp11/tuple.hpp | 2 +- include/msgpack/adaptor/deque.hpp | 2 +- .../msgpack/adaptor/detail/cpp03_define.hpp | 3 +- .../adaptor/detail/cpp03_msgpack_tuple.hpp | 2 +- .../msgpack/adaptor/detail/cpp11_define.hpp | 2 +- .../adaptor/detail/cpp11_msgpack_tuple.hpp | 2 +- include/msgpack/adaptor/fixint.hpp | 2 +- include/msgpack/adaptor/float.hpp | 2 +- include/msgpack/adaptor/list.hpp | 2 +- include/msgpack/adaptor/map.hpp | 2 +- include/msgpack/adaptor/nil.hpp | 2 +- include/msgpack/adaptor/pair.hpp | 2 +- include/msgpack/adaptor/raw.hpp | 2 +- include/msgpack/adaptor/set.hpp | 2 +- include/msgpack/adaptor/string.hpp | 2 +- include/msgpack/adaptor/tr1/unordered_map.hpp | 2 +- include/msgpack/adaptor/tr1/unordered_set.hpp | 2 +- include/msgpack/adaptor/vector.hpp | 2 +- include/msgpack/adaptor/vector_char.hpp | 2 +- include/msgpack/detail/cpp03_zone.hpp | 1 - include/msgpack/object.hpp | 66 +++++++++++++++++++ include/msgpack_fwd.hpp | 1 + 29 files changed, 94 insertions(+), 27 deletions(-) diff --git a/erb/cpp03_define.hpp.erb b/erb/cpp03_define.hpp.erb index d52f8dda..45a72f93 100644 --- a/erb/cpp03_define.hpp.erb +++ b/erb/cpp03_define.hpp.erb @@ -19,7 +19,8 @@ #define MSGPACK_CPP03_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/adaptor/msgpack_tuple_fwd.hpp" +#include "msgpack/object_fwd.hpp" #define MSGPACK_DEFINE(...) \ template \ diff --git a/erb/cpp03_msgpack_tuple.hpp.erb b/erb/cpp03_msgpack_tuple.hpp.erb index a355dd77..9f3534a8 100644 --- a/erb/cpp03_msgpack_tuple.hpp.erb +++ b/erb/cpp03_msgpack_tuple.hpp.erb @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object.hpp" namespace msgpack { diff --git a/erb/cpp03_zone.hpp.erb b/erb/cpp03_zone.hpp.erb index ed4d263e..9b16bb65 100644 --- a/erb/cpp03_zone.hpp.erb +++ b/erb/cpp03_zone.hpp.erb @@ -23,7 +23,6 @@ #include #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" #ifndef MSGPACK_ZONE_CHUNK_SIZE #define MSGPACK_ZONE_CHUNK_SIZE 8192 diff --git a/include/msgpack/adaptor/bool.hpp b/include/msgpack/adaptor/bool.hpp index 5194b828..df7e7ac7 100644 --- a/include/msgpack/adaptor/bool.hpp +++ b/include/msgpack/adaptor/bool.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_BOOL_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/char_ptr.hpp b/include/msgpack/adaptor/char_ptr.hpp index c1071462..dca1acff 100644 --- a/include/msgpack/adaptor/char_ptr.hpp +++ b/include/msgpack/adaptor/char_ptr.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_CHAR_PTR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/cpp11/array.hpp b/include/msgpack/adaptor/cpp11/array.hpp index 573ff2d2..6c932adf 100644 --- a/include/msgpack/adaptor/cpp11/array.hpp +++ b/include/msgpack/adaptor/cpp11/array.hpp @@ -20,7 +20,7 @@ #define MSGPACK_CPP11_ARRAY_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include diff --git a/include/msgpack/adaptor/cpp11/forward_list.hpp b/include/msgpack/adaptor/cpp11/forward_list.hpp index 6f52365d..dd78afd6 100644 --- a/include/msgpack/adaptor/cpp11/forward_list.hpp +++ b/include/msgpack/adaptor/cpp11/forward_list.hpp @@ -20,7 +20,7 @@ #define MSGPACK_CPP11_FORWARD_LIST_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include diff --git a/include/msgpack/adaptor/cpp11/tuple.hpp b/include/msgpack/adaptor/cpp11/tuple.hpp index 0e1a03cd..b917360a 100644 --- a/include/msgpack/adaptor/cpp11/tuple.hpp +++ b/include/msgpack/adaptor/cpp11/tuple.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP11_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include diff --git a/include/msgpack/adaptor/deque.hpp b/include/msgpack/adaptor/deque.hpp index fc0bbbf7..94bac923 100644 --- a/include/msgpack/adaptor/deque.hpp +++ b/include/msgpack/adaptor/deque.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_DEQUE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/detail/cpp03_define.hpp b/include/msgpack/adaptor/detail/cpp03_define.hpp index 442837cb..3673da88 100644 --- a/include/msgpack/adaptor/detail/cpp03_define.hpp +++ b/include/msgpack/adaptor/detail/cpp03_define.hpp @@ -19,7 +19,8 @@ #define MSGPACK_CPP03_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/adaptor/msgpack_tuple_fwd.hpp" +#include "msgpack/object_fwd.hpp" #define MSGPACK_DEFINE(...) \ template \ diff --git a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp index 7b9b29a1..70346189 100644 --- a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object.hpp" namespace msgpack { diff --git a/include/msgpack/adaptor/detail/cpp11_define.hpp b/include/msgpack/adaptor/detail/cpp11_define.hpp index 1953d4b4..6e29b4ad 100644 --- a/include/msgpack/adaptor/detail/cpp11_define.hpp +++ b/include/msgpack/adaptor/detail/cpp11_define.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP11_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" // for MSGPACK_ADD_ENUM #include "msgpack/adaptor/int_fwd.hpp" diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp index 9532021d..3b532d87 100644 --- a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP11_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include diff --git a/include/msgpack/adaptor/fixint.hpp b/include/msgpack/adaptor/fixint.hpp index 83a9e95c..eb7f7a8a 100644 --- a/include/msgpack/adaptor/fixint.hpp +++ b/include/msgpack/adaptor/fixint.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_FIXINT_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include "msgpack/adaptor/int.hpp" namespace msgpack { diff --git a/include/msgpack/adaptor/float.hpp b/include/msgpack/adaptor/float.hpp index 499cbbe0..8191db91 100644 --- a/include/msgpack/adaptor/float.hpp +++ b/include/msgpack/adaptor/float.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_FLOAT_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/list.hpp b/include/msgpack/adaptor/list.hpp index b185fa24..321f531b 100644 --- a/include/msgpack/adaptor/list.hpp +++ b/include/msgpack/adaptor/list.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_LIST_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/map.hpp b/include/msgpack/adaptor/map.hpp index 16b600d8..c42148e4 100644 --- a/include/msgpack/adaptor/map.hpp +++ b/include/msgpack/adaptor/map.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_MAP_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include #include #include diff --git a/include/msgpack/adaptor/nil.hpp b/include/msgpack/adaptor/nil.hpp index 1889307a..4b092e28 100644 --- a/include/msgpack/adaptor/nil.hpp +++ b/include/msgpack/adaptor/nil.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_NIL_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" namespace msgpack { diff --git a/include/msgpack/adaptor/pair.hpp b/include/msgpack/adaptor/pair.hpp index 9efc1892..27b88fae 100644 --- a/include/msgpack/adaptor/pair.hpp +++ b/include/msgpack/adaptor/pair.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_PAIR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/raw.hpp b/include/msgpack/adaptor/raw.hpp index a01a72c8..590b5de7 100644 --- a/include/msgpack/adaptor/raw.hpp +++ b/include/msgpack/adaptor/raw.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_RAW_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include #include diff --git a/include/msgpack/adaptor/set.hpp b/include/msgpack/adaptor/set.hpp index 2e154fdb..f31169c9 100644 --- a/include/msgpack/adaptor/set.hpp +++ b/include/msgpack/adaptor/set.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_SET_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include diff --git a/include/msgpack/adaptor/string.hpp b/include/msgpack/adaptor/string.hpp index dd4a37a9..05c2867f 100644 --- a/include/msgpack/adaptor/string.hpp +++ b/include/msgpack/adaptor/string.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_STRING_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/tr1/unordered_map.hpp b/include/msgpack/adaptor/tr1/unordered_map.hpp index de24a11c..7c411cfc 100644 --- a/include/msgpack/adaptor/tr1/unordered_map.hpp +++ b/include/msgpack/adaptor/tr1/unordered_map.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_TR1_UNORDERED_MAP_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) diff --git a/include/msgpack/adaptor/tr1/unordered_set.hpp b/include/msgpack/adaptor/tr1/unordered_set.hpp index 928556fb..1d142e6a 100644 --- a/include/msgpack/adaptor/tr1/unordered_set.hpp +++ b/include/msgpack/adaptor/tr1/unordered_set.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_TR1_UNORDERED_SET_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) diff --git a/include/msgpack/adaptor/vector.hpp b/include/msgpack/adaptor/vector.hpp index c004d388..fe643117 100644 --- a/include/msgpack/adaptor/vector.hpp +++ b/include/msgpack/adaptor/vector.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_VECTOR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/vector_char.hpp b/include/msgpack/adaptor/vector_char.hpp index 225c68ce..1ea6c93c 100644 --- a/include/msgpack/adaptor/vector_char.hpp +++ b/include/msgpack/adaptor/vector_char.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_VECTOR_CHAR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" +#include "msgpack/object_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/detail/cpp03_zone.hpp b/include/msgpack/detail/cpp03_zone.hpp index b050a998..8d202232 100644 --- a/include/msgpack/detail/cpp03_zone.hpp +++ b/include/msgpack/detail/cpp03_zone.hpp @@ -23,7 +23,6 @@ #include #include "msgpack/versioning.hpp" -#include "msgpack_fwd.hpp" #ifndef MSGPACK_ZONE_CHUNK_SIZE #define MSGPACK_ZONE_CHUNK_SIZE 8192 diff --git a/include/msgpack/object.hpp b/include/msgpack/object.hpp index 4be3fca4..b6df9fa5 100644 --- a/include/msgpack/object.hpp +++ b/include/msgpack/object.hpp @@ -86,6 +86,36 @@ inline object const& operator>> (object const& o, object& v) template inline object const& operator>> (object const& o, T& v) { + // If you get a error 'class your_class has no member named 'msgpack_unpack', + // check the following: + // 1. The class your_class should have MSGPACK_DEFINE macro or + // + // 2. The class your_class should have the following operator declaration and + // definition: + // inline object const& operator>> (object const& o, std::string& v) + // + // See 3. + // + // 3. #include "msgpack.hpp" too early. + // Replace msgpack.hpp with msgpack_fwd.hpp, then, + // place operator declarations as follows: + // + // namespace msgpack { + // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) { + // object const& operator>> (object const& o, std::string& v); + // } + // } + // + // then, #include "msgpack.hpp", finally place the operator definitions as follows: + // + // namespace msgpack { + // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) { + // object const& operator>> (object const& o, std::string& v) { + // // converting operations here + // } + // } // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) + // } // namespace msgpack + // v.msgpack_unpack(o.convert()); return o; } @@ -116,6 +146,42 @@ namespace detail { template struct packer_serializer { static packer& pack(packer& o, const T& v) { + // If you get a error 'const class your_class has no member named 'msgpack_pack', + // check the following: + // 1. The class your_class should have MSGPACK_DEFINE macro or + // + // 2. The class your_class should have the following operator declaration and + // definition: + // + // namespace msgpack { + // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) { + // template + // inline packer& operator<< (packer& o, const your_class& v) + // } // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) + // } // namespace msgpack + // + // See 3. + // + // 3. #include "msgpack.hpp" too early. + // Replace msgpack.hpp with msgpack_fwd.hpp, then, + // place operator declarations as follows: + // + // namespace msgpack { + // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) { + // template + // packer& operator<< (packer& o, const your_class& v); + // } // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) + // } // namespace msgpack + // + // then, #include "msgpack.hpp", finally place the operator definitions as follows: + // + // template + // inline packer& operator<< (packer& o, const your_class& v) { + // // packing operation + // } + // } // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) + // } // namespace msgpack + // v.msgpack_pack(o); return o; } diff --git a/include/msgpack_fwd.hpp b/include/msgpack_fwd.hpp index 91921dbb..f42ae169 100644 --- a/include/msgpack_fwd.hpp +++ b/include/msgpack_fwd.hpp @@ -21,6 +21,7 @@ #include "msgpack/versioning.hpp" #include "msgpack/zone.hpp" #include "msgpack/object_fwd.hpp" +#include "msgpack/adaptor/define.hpp" #include "msgpack/pack.hpp" #endif // MSGPACK_FWD_HPP