diff --git a/CMakeLists.txt b/CMakeLists.txt index 648ef97b..2b5e356c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,65 +98,38 @@ LIST (APPEND msgpack_HEADERS IF (MSGPACK_ENABLE_CXX) LIST (APPEND msgpack_HEADERS include/msgpack.hpp - include/msgpack_fwd.hpp + include/msgpack/adaptor/adaptor_base.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/check_container_size.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/cpp11/unordered_map.hpp - include/msgpack/adaptor/cpp11/unordered_map_fwd.hpp include/msgpack/adaptor/cpp11/unordered_set.hpp - include/msgpack/adaptor/cpp11/unordered_set_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_bool.hpp - include/msgpack/adaptor/vector_bool_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 diff --git a/erb/cpp03_define.hpp.erb b/erb/cpp03_define.hpp.erb index df677763..65463156 100644 --- a/erb/cpp03_define.hpp.erb +++ b/erb/cpp03_define.hpp.erb @@ -19,8 +19,8 @@ #define MSGPACK_CPP03_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack/adaptor/msgpack_tuple_fwd.hpp" -#include "msgpack/adaptor/int_fwd.hpp" +#include "msgpack/adaptor/msgpack_tuple.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/object_fwd.hpp" #define MSGPACK_DEFINE(...) \ @@ -40,32 +40,39 @@ } // MSGPACK_ADD_ENUM must be used in the global namespace. -#define MSGPACK_ADD_ENUM(enum) \ +#define MSGPACK_ADD_ENUM(enum_name) \ namespace msgpack { \ MSGPACK_API_VERSION_NAMESPACE(v1) { \ - inline msgpack::object const& operator>> (msgpack::object const& o, enum& v) \ - { \ - int tmp; \ - o >> tmp; \ - v = static_cast(tmp); \ - return o; \ - } \ - inline void operator<< (msgpack::object& o, const enum& v) \ - { \ - o << static_cast(v); \ - } \ - inline void operator<< (msgpack::object::with_zone& o, const enum& v) \ - { \ - o << static_cast(v); \ - } \ - namespace detail { \ + namespace adaptor { \ + template<> \ + struct convert { \ + msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const {\ + int tmp; \ + o >> tmp; \ + v = static_cast(tmp); \ + return o; \ + } \ + }; \ + template<> \ + struct object { \ + void operator()(msgpack::object& o, const enum_name& v) const {\ + o << static_cast(v); \ + } \ + }; \ + template<> \ + struct object_with_zone { \ + void operator()(msgpack::object::with_zone& o, const enum_name& v) const { \ + o << static_cast(v); \ + } \ + }; \ + template<> \ + struct pack { \ template \ - struct packer_serializer { \ - static msgpack::packer& pack(msgpack::packer& o, const enum& v) { \ - return o << static_cast(v); \ - } \ - }; \ - } \ + msgpack::packer& operator()(msgpack::packer& o, const enum_name& v) const { \ + return o << static_cast(v); \ + } \ + }; \ + } \ } \ } diff --git a/erb/cpp03_msgpack_tuple.hpp.erb b/erb/cpp03_msgpack_tuple.hpp.erb index 63e6c54d..6f5ef501 100644 --- a/erb/cpp03_msgpack_tuple.hpp.erb +++ b/erb/cpp03_msgpack_tuple.hpp.erb @@ -20,6 +20,7 @@ #include "msgpack/versioning.hpp" #include "msgpack/object.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" namespace msgpack { @@ -31,7 +32,7 @@ namespace type { // FIXME operator!= <% GENERATION_LIMIT = 31 %> -template , typename A<%=i%><%}%>> +template , typename A<%=i%> = void<%}%>> struct tuple; template @@ -136,81 +137,90 @@ inline tuple, A<%=j%><%}%>> make_tuple(typename tuple_type< } // namespace type -inline msgpack::object const& operator>> ( +namespace adaptor { + +template <> +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple<>&) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - return o; -} + type::tuple<>&) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + return o; + } +}; + <%0.upto(GENERATION_LIMIT) {|i|%> template , typename A<%=j%><%}%>> -inline msgpack::object const& operator>> ( +struct convert, A<%=j%><%}%>> > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple, A<%=j%><%}%>>& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < <%=i+1%>) { throw msgpack::type_error(); } - <%0.upto(i) {|j|%> - o.via.array.ptr[<%=j%>].convert>::type>(v.template get<<%=j%>>());<%}%> - return o; -} + type::tuple, A<%=j%><%}%>>& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < <%=i+1%>) { throw msgpack::type_error(); } + <%0.upto(i) {|j|%> + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[<%=j%>].msgpack::object::convert>::type>(v.template get<<%=j%>>());<%}%> + return o; + } +}; <%}%> -template -inline const msgpack::packer& operator<< ( +template <> +struct pack > { + template + msgpack::packer& operator()( msgpack::packer& o, - const type::tuple<>&) { - o.pack_array(0); - return o; -} -<%0.upto(GENERATION_LIMIT) {|i|%> -template , typename A<%=j%><%}%>> -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple, A<%=j%><%}%>>& v) { - o.pack_array(<%=i+1%>); - <%0.upto(i) {|j|%> - o.pack(v.template get<<%=j%>>());<%}%> - return o; -} -<%}%> + const type::tuple<>&) const { + o.pack_array(0); + return o; + } +}; -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple<>&) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = nullptr; - o.via.array.size = 0; -} <%0.upto(GENERATION_LIMIT) {|i|%> template , typename A<%=j%><%}%>> -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple, A<%=j%><%}%>>& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*<%=i+1%>)); - o.via.array.size = <%=i+1%>; - <%0.upto(i) {|j|%> - o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%> -} +struct pack, A<%=j%><%}%>> > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple, A<%=j%><%}%>>& v) const { + o.pack_array(<%=i+1%>); + <%0.upto(i) {|j|%> + o.pack(v.template get<<%=j%>>());<%}%> + return o; + } +}; <%}%> +template <> +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple<>&) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } +}; + +<%0.upto(GENERATION_LIMIT) {|i|%> +template , typename A<%=j%><%}%>> +struct object_with_zone, A<%=j%><%}%>> > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple, A<%=j%><%}%>>& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*<%=i+1%>)); + o.via.array.size = <%=i+1%>; + <%0.upto(i) {|j|%> + o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%> + } +}; +<%}%> + +} // namespace adaptor + } // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack - -//inline std::ostream& operator<< (std::ostream& o, const msgpack::type::tuple<>& v) { -// return o << "[]"; -//} -//<%0.upto(GENERATION_LIMIT) {|i|%> -//template , typename A<%=j%><%}%>> -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple, A<%=j%><%}%>>& v) { -// return o << "[" -// <%0.upto(i) {|j|%> -// <<<%if j != 0 then%> ", " <<<%end%> v.template get<<%=j%>>()<%}%> -// << "]"; -//} -//<%}%> - #endif // MSGPACK_CPP03_MSGPACK_TUPLE_HPP diff --git a/erb/cpp03_msgpack_tuple_fwd.hpp.erb b/erb/cpp03_msgpack_tuple_fwd.hpp.erb deleted file mode 100644 index 901da817..00000000 --- a/erb/cpp03_msgpack_tuple_fwd.hpp.erb +++ /dev/null @@ -1,125 +0,0 @@ -// -// 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 - -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple<>&); - -<%0.upto(GENERATION_LIMIT) {|i|%> -template , typename A<%=j%><%}%>> -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple, A<%=j%><%}%>>& v); -<%}%> - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple<>&); - -<%0.upto(GENERATION_LIMIT) {|i|%> -template , typename A<%=j%><%}%>> -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple, A<%=j%><%}%>>& v); -<%}%> - -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple<>&); -<%0.upto(GENERATION_LIMIT) {|i|%> -template , typename A<%=j%><%}%>> -void operator<< ( - msgpack::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/example/c/lib_buffer_unpack.c b/example/c/lib_buffer_unpack.c index eb2320fc..a737f630 100644 --- a/example/c/lib_buffer_unpack.c +++ b/example/c/lib_buffer_unpack.c @@ -8,8 +8,6 @@ typedef struct receiver { size_t rest; } receiver; -receiver r; - void receiver_init(receiver *r) { msgpack_packer pk; @@ -53,6 +51,7 @@ void unpack(receiver* r) { char* buf; size_t recv_len; int recv_count = 0; + int i = 0; msgpack_unpacked_init(&result); if (msgpack_unpacker_buffer_capacity(unp) < EACH_RECV_SIZE) { @@ -65,15 +64,14 @@ void unpack(receiver* r) { msgpack_unpacker_buffer_consumed(unp, recv_len); - while (recv_len > 0) { - int i = 0; - printf("receive count: %d %zd bytes received.:\n", recv_count++, recv_len); + while (recv_len > 0) { + printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len); ret = msgpack_unpacker_next(unp, &result); while (ret == MSGPACK_UNPACK_SUCCESS) { msgpack_object obj = result.data; /* Use obj. */ - printf("Object no %d:\n", i++); + printf("Object no %d:\n", ++i); msgpack_object_print(stdout, obj); printf("\n"); /* If you want to allocate something on the zone, you can use zone. */ @@ -110,10 +108,16 @@ int main(void) { /* Output */ /* +receive count: 0 4 bytes received. +receive count: 1 4 bytes received. +receive count: 2 4 bytes received. Object no 1: [1, true, "example"] +receive count: 3 4 bytes received. +receive count: 4 4 bytes received. Object no 2: "second" +receive count: 5 1 bytes received. Object no 3: [42, false] */ diff --git a/example/c/user_buffer_unpack.c b/example/c/user_buffer_unpack.c index d8b25c2a..a26cdebc 100644 --- a/example/c/user_buffer_unpack.c +++ b/example/c/user_buffer_unpack.c @@ -33,7 +33,7 @@ void unpack(char const* buf, size_t len) { msgpack_object obj = result.data; /* Use obj. */ - printf("Object no %d:\n", i++); + printf("Object no %d:\n", ++i); msgpack_object_print(stdout, obj); printf("\n"); /* If you want to allocate something on the zone, you can use zone. */ @@ -72,4 +72,5 @@ Object no 2: "second" Object no 3: [42, false] +All msgpack_object in the buffer is consumed. */ diff --git a/example/cpp03/class_intrusive.cpp b/example/cpp03/class_intrusive.cpp index 64a3956e..dc27f0af 100644 --- a/example/cpp03/class_intrusive.cpp +++ b/example/cpp03/class_intrusive.cpp @@ -21,8 +21,7 @@ #include #include -// msgpack.hpp is also ok -#include +#include class my_class { @@ -57,8 +56,6 @@ void print(std::string const& buf) { std::cout << std::dec << std::endl; } -#include - int main() { { // pack, unpack my_class my("John Smith", 42); diff --git a/example/cpp03/class_non_intrusive.cpp b/example/cpp03/class_non_intrusive.cpp index 1168b484..5a60ca36 100644 --- a/example/cpp03/class_non_intrusive.cpp +++ b/example/cpp03/class_non_intrusive.cpp @@ -21,27 +21,6 @@ #include #include -// msgpack.hpp should be included at after user declarations -#include - - -// declarations -class my_class; - -namespace msgpack { - -MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) { - -object const& operator>> (msgpack::object const& o, my_class& v); - -template -packer& operator<< (msgpack::packer& o, my_class const& v); - -void operator<< (msgpack::object::with_zone& o, my_class const& v); - -} // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) -} // namespace msgpack - #include class my_class { @@ -63,40 +42,48 @@ private: int age_; }; - -// definitions - +// User defined class template specialization namespace msgpack { - MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) { +namespace adaptor { -inline object const& operator>> (msgpack::object const& o, my_class& v) { - if (o.type != msgpack::type::ARRAY) throw msgpack::type_error(); - if (o.via.array.size != 2) throw msgpack::type_error(); - v = my_class( - o.via.array.ptr[0].as(), - o.via.array.ptr[1].as()); - return o; -} +template<> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, my_class& v) const { + if (o.type != msgpack::type::ARRAY) throw msgpack::type_error(); + if (o.via.array.size != 2) throw msgpack::type_error(); + v = my_class( + o.via.array.ptr[0].as(), + o.via.array.ptr[1].as()); + return o; + } +}; +template<> +struct pack { + template + packer& operator()(msgpack::packer& o, my_class const& v) const { + // packing member variables as an array. + o.pack_array(2); + o.pack(v.get_name()); + o.pack(v.get_age()); + return o; + } +}; -template -inline packer& operator<< (msgpack::packer& o, my_class const& v) { - // packing member variables as an array. - o.pack_array(2); - o.pack(v.get_name()); - o.pack(v.get_age()); - return o; -} - -inline void operator<< (msgpack::object::with_zone& o, my_class const& v) { - o.type = type::ARRAY; - o.via.array.size = 2; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object) * o.via.array.size)); - o.via.array.ptr[0] = msgpack::object(v.get_name(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone); -} +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, my_class const& v) const { + o.type = type::ARRAY; + o.via.array.size = 2; + o.via.array.ptr = static_cast( + o.zone.allocate_align(sizeof(msgpack::object) * o.via.array.size)); + o.via.array.ptr[0] = msgpack::object(v.get_name(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone); + } +}; +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) } // namespace msgpack diff --git a/example/cpp03/enum.cpp b/example/cpp03/enum.cpp index c87dd516..2f8f505f 100644 --- a/example/cpp03/enum.cpp +++ b/example/cpp03/enum.cpp @@ -15,11 +15,12 @@ // limitations under the License. // -#include #include #include #include +#include + enum my_enum { elem1, elem2, @@ -28,8 +29,6 @@ enum my_enum { MSGPACK_ADD_ENUM(my_enum); -#include - int main(void) { { // pack, unpack diff --git a/example/cpp03/protocol.cpp b/example/cpp03/protocol.cpp index b4462f5b..5b8a06e3 100644 --- a/example/cpp03/protocol.cpp +++ b/example/cpp03/protocol.cpp @@ -20,6 +20,8 @@ #include #include +// This example uses obsolete APIs +// See protocol_new.cpp namespace myprotocol { using namespace msgpack::type; using msgpack::define; diff --git a/include/msgpack.hpp b/include/msgpack.hpp index f2f729e9..70dc3608 100644 --- a/include/msgpack.hpp +++ b/include/msgpack.hpp @@ -23,3 +23,4 @@ #include "msgpack/sbuffer.hpp" #include "msgpack/vrefbuffer.hpp" #include "msgpack/version.hpp" +#include "msgpack/type.hpp" diff --git a/include/msgpack/adaptor/adaptor_base.hpp b/include/msgpack/adaptor/adaptor_base.hpp new file mode 100644 index 00000000..e64d4e93 --- /dev/null +++ b/include/msgpack/adaptor/adaptor_base.hpp @@ -0,0 +1,87 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2015 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_ADAPTOR_BASE_HPP +#define MSGPACK_ADAPTOR_BASE_HPP + +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +class packer; + +namespace adaptor { + +// Adaptor functors + +template +struct convert { + msgpack::object const& operator()(msgpack::object const& o, T& v) const; +}; + +template +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, T const& v) const; +}; + +template +struct object { + void operator()(msgpack::object& o, T const& v) const; +}; + +template +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, T const& v) const; +}; + +} // namespace adaptor + +// operators + +template +inline +msgpack::object const& operator>> (msgpack::object const& o, T& v) { + return adaptor::convert()(o, v); +} + +template +inline +msgpack::packer& operator<< (msgpack::packer& o, T const& v) { + return adaptor::pack()(o, v); +} + +template +inline +void operator<< (msgpack::object& o, T const& v) { + adaptor::object()(o, v); +} + +template +inline +void operator<< (msgpack::object::with_zone& o, T const& v) { + adaptor::object_with_zone()(o, v); +} + +} // MSGPACK_API_VERSION_NAMESPACE(v1) +} // namespace msgpack + + +#endif // MSGPACK_ADAPTOR_BASE_HPP diff --git a/include/msgpack/adaptor/bool.hpp b/include/msgpack/adaptor/bool.hpp index 06b8c8ca..a12e4780 100644 --- a/include/msgpack/adaptor/bool.hpp +++ b/include/msgpack/adaptor/bool.hpp @@ -19,37 +19,49 @@ #define MSGPACK_TYPE_BOOL_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object_fwd.hpp" -#include +#include "msgpack/adaptor/adaptor_base.hpp" namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -inline msgpack::object const& operator>> (msgpack::object const& o, bool& v) -{ - if(o.type != msgpack::type::BOOLEAN) { throw msgpack::type_error(); } - v = o.via.boolean; - return o; -} +namespace adaptor { -template -inline msgpack::packer& operator<< (msgpack::packer& o, const bool& v) -{ - if(v) { o.pack_true(); } - else { o.pack_false(); } - return o; -} +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, bool& v) const { + if(o.type != msgpack::type::BOOLEAN) { throw msgpack::type_error(); } + v = o.via.boolean; + return o; + } +}; -inline void operator<< (msgpack::object& o, bool v) -{ - o.type = msgpack::type::BOOLEAN; - o.via.boolean = v; -} +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const bool& v) const { + if(v) { o.pack_true(); } + else { o.pack_false(); } + return o; + } +}; -inline void operator<< (msgpack::object::with_zone& o, bool v) - { static_cast(o) << v; } +template <> +struct object { + void operator()(msgpack::object& o, bool v) const { + o.type = msgpack::type::BOOLEAN; + o.via.boolean = v; + } +}; +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, bool v) const { + static_cast(o) << v; + } +}; + +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/bool_fwd.hpp b/include/msgpack/adaptor/bool_fwd.hpp deleted file mode 100644 index b25bfbc4..00000000 --- a/include/msgpack/adaptor/bool_fwd.hpp +++ /dev/null @@ -1,39 +0,0 @@ -// -// 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) { - -msgpack::object const& operator>> (msgpack::object const& o, bool& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const bool& v); -void operator<< (msgpack::object& o, bool v); -void operator<< (msgpack::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 1f370003..ff4b4e20 100644 --- a/include/msgpack/adaptor/char_ptr.hpp +++ b/include/msgpack/adaptor/char_ptr.hpp @@ -28,48 +28,131 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -template -inline msgpack::packer& operator<< (msgpack::packer& o, const char* v) -{ - uint32_t size = checked_get_container_size(std::strlen(v)); - o.pack_str(size); - o.pack_str_body(v, size); - return o; -} +namespace adaptor { -inline void operator<< (msgpack::object::with_zone& o, const char* v) -{ - uint32_t size = checked_get_container_size(std::strlen(v)); - o.type = msgpack::type::STR; - char* ptr = static_cast(o.zone.allocate_align(size)); - o.via.str.ptr = ptr; - o.via.str.size = size; - std::memcpy(ptr, v, size); -} +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.pack_str(size); + o.pack_str_body(v, size); + return o; + } +}; -inline void operator<< (msgpack::object& o, const char* v) -{ - uint32_t size = checked_get_container_size(std::strlen(v)); - o.type = msgpack::type::STR; - o.via.str.ptr = v; - o.via.str.size = size; -} +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = msgpack::type::STR; + char* ptr = static_cast(o.zone.allocate_align(size)); + o.via.str.ptr = ptr; + o.via.str.size = size; + std::memcpy(ptr, v, size); + } +}; -template -inline packer& operator<< (packer& o, char* v) -{ - return msgpack::operator<<(o, static_cast(v)); -} +template <> +struct object { + void operator()(msgpack::object& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = msgpack::type::STR; + o.via.str.ptr = v; + o.via.str.size = size; + } +}; -inline void operator<< (object::with_zone& o, char* v) -{ - msgpack::operator<<(o, static_cast(v)); -} -inline void operator<< (object& o, char* v) -{ - msgpack::operator<<(o, static_cast(v)); -} +template <> +struct pack { + template + packer& operator()(packer& o, char* v) const { + return o << static_cast(v); + } +}; + +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, char* v) const { + o << static_cast(v); + } +}; + +template <> +struct object { + void operator()(msgpack::object& o, char* v) const { + o << static_cast(v); + } +}; + +template +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.pack_str(size); + o.pack_str_body(v, size); + return o; + } +}; + +template +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = msgpack::type::STR; + char* ptr = static_cast(o.zone.allocate_align(size)); + o.via.str.ptr = ptr; + o.via.str.size = size; + std::memcpy(ptr, v, size); + } +}; + +template +struct object { + void operator()(msgpack::object& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = msgpack::type::STR; + o.via.str.ptr = v; + o.via.str.size = size; + } +}; + +template +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.pack_str(size); + o.pack_str_body(v, size); + return o; + } +}; + +template +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = msgpack::type::STR; + char* ptr = static_cast(o.zone.allocate_align(size)); + o.via.str.ptr = ptr; + o.via.str.size = size; + std::memcpy(ptr, v, size); + } +}; + +template +struct object { + void operator()(msgpack::object& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = msgpack::type::STR; + o.via.str.ptr = v; + o.via.str.size = size; + } +}; + +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/char_ptr_fwd.hpp b/include/msgpack/adaptor/char_ptr_fwd.hpp deleted file mode 100644 index 26a7b852..00000000 --- a/include/msgpack/adaptor/char_ptr_fwd.hpp +++ /dev/null @@ -1,43 +0,0 @@ -// -// 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 -msgpack::packer& operator<< (msgpack::packer& o, const char* v); -void operator<< (msgpack::object::with_zone& o, const char* v); -void operator<< (msgpack::object& o, const char* v); - -template -packer& operator<< (packer& o, char* v); -void operator<< (object::with_zone& o, char* v); -void operator<< (object& o, 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 ac2f3c66..e26c53ce 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/object_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -29,47 +29,58 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { +namespace adaptor { + template -inline msgpack::object const& operator>> (msgpack::object const& o, std::array& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size != N) { throw msgpack::type_error(); } - if(o.via.array.size > 0) { - msgpack::object* p = o.via.array.ptr; - msgpack::object* const pend = o.via.array.ptr + o.via.array.size; - T* it = &v[0]; - do { - p->convert(*it); - ++p; - ++it; - } while(p < pend); +struct convert> { + msgpack::object const& operator()(msgpack::object const& o, std::array& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size != N) { throw msgpack::type_error(); } + if(o.via.array.size > 0) { + msgpack::object* p = o.via.array.ptr; + msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + T* it = &v[0]; + do { + p->convert(*it); + ++p; + ++it; + } while(p < pend); + } + return o; } - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::array& v) { - uint32_t size = checked_get_container_size(v.size()); - o.pack_array(size); - for(auto const& e : v) o.pack(e); - return o; -} +}; template -inline void operator<< (msgpack::object::with_zone& o, const std::array& v) { - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { +struct pack> { + template + msgpack::packer& operator()(msgpack::packer& o, const std::array& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); - o.via.array.size = size; - o.via.array.ptr = p; - for (auto const& e : v) *p++ = msgpack::object(e, o.zone); + o.pack_array(size); + for(auto const& e : v) o.pack(e); + return o; } -} +}; -} // MSGPACK_API_VERSION_NAMESPACE(v1) +template +struct object_with_zone> { + void operator()(msgpack::object::with_zone& o, const std::array& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); + o.via.array.size = size; + o.via.array.ptr = p; + for (auto const& e : v) *p++ = msgpack::object(e, o.zone); + } + } +}; + +} // namespace adaptor + +} // 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 f87cac82..260c4dc9 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -28,57 +28,66 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { +namespace adaptor { + template -inline msgpack::object const& operator>> (msgpack::object const& o, std::array& v) -{ - switch (o.type) { - case msgpack::type::BIN: - if(o.via.bin.size != N) { throw msgpack::type_error(); } - std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size); - break; - case msgpack::type::STR: - if(o.via.str.size != N) { throw msgpack::type_error(); } - std::memcpy(v.data(), o.via.str.ptr, N); - break; - default: - throw msgpack::type_error(); - break; +struct convert> { + msgpack::object const& operator()(msgpack::object const& o, std::array& v) const { + switch (o.type) { + case msgpack::type::BIN: + if(o.via.bin.size != N) { throw msgpack::type_error(); } + std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size); + break; + case msgpack::type::STR: + if(o.via.str.size != N) { throw msgpack::type_error(); } + std::memcpy(v.data(), o.via.str.ptr, N); + break; + default: + throw msgpack::type_error(); + break; + } + return o; } - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::array& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_bin(size); - o.pack_bin_body(v.data(), size); - - return o; -} +}; template -inline void operator<< (msgpack::object& o, const std::array& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.type = msgpack::type::BIN; - o.via.bin.ptr = v.data(); - o.via.bin.size = size; -} +struct pack> { + template + msgpack::packer& operator()(msgpack::packer& o, const std::array& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.pack_bin(size); + o.pack_bin_body(v.data(), size); + + return o; + } +}; template -inline void operator<< (msgpack::object::with_zone& o, const std::array& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.type = msgpack::type::BIN; - char* ptr = static_cast(o.zone.allocate_align(size)); - o.via.bin.ptr = ptr; - o.via.bin.size = size; - std::memcpy(ptr, v.data(), size); -} +struct object> { + void operator()(msgpack::object& o, const std::array& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = msgpack::type::BIN; + o.via.bin.ptr = v.data(); + o.via.bin.size = size; + } +}; -} // MSGPACK_API_VERSION_NAMESPACE(v1) +template +struct object_with_zone> { + void operator()(msgpack::object::with_zone& o, const std::array& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = msgpack::type::BIN; + char* ptr = static_cast(o.zone.allocate_align(size)); + o.via.bin.ptr = ptr; + o.via.bin.size = size; + std::memcpy(ptr, v.data(), size); + } +}; -} // namespace msgpack +} // namespace adaptor + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack #endif // MSGPACK_TYPE_ARRAY_CHAR_HPP diff --git a/include/msgpack/adaptor/cpp11/array_char_fwd.hpp b/include/msgpack/adaptor/cpp11/array_char_fwd.hpp deleted file mode 100644 index 3bf3fe68..00000000 --- a/include/msgpack/adaptor/cpp11/array_char_fwd.hpp +++ /dev/null @@ -1,45 +0,0 @@ -// -// 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 -msgpack::object const& operator>> (msgpack::object const& o, std::array& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::array& v); - -template -void operator<< (msgpack::object& o, const std::array& v); - -template -void operator<< (msgpack::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 deleted file mode 100644 index a395c3f0..00000000 --- a/include/msgpack/adaptor/cpp11/array_fwd.hpp +++ /dev/null @@ -1,44 +0,0 @@ -// -// 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 -msgpack::object const& operator>> (msgpack::object const& o, std::array& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::array& v); - -template -void operator<< (msgpack::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 99c3db08..5eb934bc 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/object_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -29,46 +29,54 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { +namespace adaptor { + template -inline msgpack::object const& operator>> (msgpack::object const& o, std::forward_list& v) -{ - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - v.resize(o.via.array.size); - msgpack::object* p = o.via.array.ptr; - for (auto &e : v) { - p->convert(e); - ++p; +struct convert> { + msgpack::object const& operator()(msgpack::object const& o, std::forward_list& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + v.resize(o.via.array.size); + msgpack::object* p = o.via.array.ptr; + for (auto &e : v) { + p->convert(e); + ++p; + } + return o; } - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::forward_list& v) -{ - uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end())); - o.pack_array(size); - for(auto const& e : v) o.pack(e); - return o; -} +}; template -inline void operator<< (msgpack::object::with_zone& o, const std::forward_list& v) -{ - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { +struct pack> { + template + msgpack::packer& operator()(msgpack::packer& o, const std::forward_list& v) const { uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end())); - o.via.array.size = size; - msgpack::object* p = static_cast( - o.zone.allocate_align(sizeof(msgpack::object)*size)); - o.via.array.ptr = p; - for(auto const& e : v) *p++ = msgpack::object(e, o.zone); + o.pack_array(size); + for(auto const& e : v) o.pack(e); + return o; } -} +}; -} // MSGPACK_API_VERSION_NAMESPACE(v1) +template +struct object_with_zone> { + void operator()(msgpack::object::with_zone& o, const std::forward_list& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end())); + o.via.array.size = size; + msgpack::object* p = static_cast( + o.zone.allocate_align(sizeof(msgpack::object)*size)); + o.via.array.ptr = p; + for(auto const& e : v) *p++ = msgpack::object(e, o.zone); + } + } +}; + +} // namespace adaptor + +} // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/cpp11/forward_list_fwd.hpp b/include/msgpack/adaptor/cpp11/forward_list_fwd.hpp deleted file mode 100644 index e9d9a1ac..00000000 --- a/include/msgpack/adaptor/cpp11/forward_list_fwd.hpp +++ /dev/null @@ -1,44 +0,0 @@ -// -// 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 -msgpack::object const& operator>> (msgpack::object const& o, std::forward_list& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::forward_list& v); - -template -void operator<< (msgpack::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 a1b5eeab..69a5ef6a 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/object_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -56,16 +56,22 @@ struct StdTuplePacker { } }; +namespace adaptor { -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const std::tuple& v) { - uint32_t size = checked_get_container_size(sizeof...(Args)); - o.pack_array(size); - StdTuplePacker::pack(o, v); - return o; -} +template +struct pack> { + template + msgpack::packer& operator()( + msgpack::packer& o, + const std::tuple& v) const { + uint32_t size = checked_get_container_size(sizeof...(Args)); + o.pack_array(size); + StdTuplePacker::pack(o, v); + return o; + } +}; + +} // namespace adaptor // --- Convert from tuple to object --- @@ -96,15 +102,21 @@ struct StdTupleConverter { } }; +namespace adaptor { + template -inline msgpack::object const& operator>> ( - msgpack::object const& o, - std::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < sizeof...(Args)) { throw msgpack::type_error(); } - StdTupleConverter::convert(o, v); - return o; -} +struct convert> { + msgpack::object const& operator()( + msgpack::object const& o, + std::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < sizeof...(Args)) { throw msgpack::type_error(); } + StdTupleConverter::convert(o, v); + return o; + } +}; + +} // namespace adaptor // --- Convert from tuple to object with zone --- template @@ -134,16 +146,22 @@ struct StdTupleToObjectWithZone { } }; +namespace adaptor { + template -inline void operator<< ( +struct object_with_zone> { + void operator()( msgpack::object::with_zone& o, - std::tuple const& v) { - uint32_t size = checked_get_container_size(sizeof...(Args)); - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); - o.via.array.size = size; - StdTupleToObjectWithZone::convert(o, v); -} + std::tuple const& v) const { + uint32_t size = checked_get_container_size(sizeof...(Args)); + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); + o.via.array.size = size; + StdTupleToObjectWithZone::convert(o, v); + } +}; + +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/cpp11/tuple_fwd.hpp b/include/msgpack/adaptor/cpp11/tuple_fwd.hpp deleted file mode 100644 index f19423c2..00000000 --- a/include/msgpack/adaptor/cpp11/tuple_fwd.hpp +++ /dev/null @@ -1,62 +0,0 @@ -// -// 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 msgpack::packer& operator<< ( - msgpack::packer& o, - const std::tuple& v); - -// --- Convert from tuple to object --- - -template -struct StdTupleConverter; - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - std::tuple& v); - -// --- Convert from tuple to object with zone --- -template -struct StdTupleToObjectWithZone; - -template -void operator<< ( - msgpack::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/cpp11/unordered_map.hpp b/include/msgpack/adaptor/cpp11/unordered_map.hpp index f609ffb6..dbb10845 100644 --- a/include/msgpack/adaptor/cpp11/unordered_map.hpp +++ b/include/msgpack/adaptor/cpp11/unordered_map.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_UNORDERED_MAP_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -28,115 +28,127 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -template -inline msgpack::object const& operator>> (msgpack::object const& o, std::unordered_map& v) -{ - if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } - msgpack::object_kv* p(o.via.map.ptr); - msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); - std::unordered_map tmp; - for(; p != pend; ++p) { - K key; - p->key.convert(key); - p->val.convert(tmp[key]); - } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::unordered_map& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_map(size); - for(typename std::unordered_map::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(it->first); - o.pack(it->second); - } - return o; -} +namespace adaptor { template -inline void operator<< (msgpack::object::with_zone& o, const std::unordered_map& v) -{ - o.type = msgpack::type::MAP; - if(v.empty()) { - o.via.map.ptr = nullptr; - o.via.map.size = 0; - } else { +struct convert> { + msgpack::object const& operator()(msgpack::object const& o, std::unordered_map& v) const { + if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } + msgpack::object_kv* p(o.via.map.ptr); + msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); + std::unordered_map tmp; + for(; p != pend; ++p) { + K key; + p->key.convert(key); + p->val.convert(tmp[key]); + } + tmp.swap(v); + return o; + } +}; + +template +struct pack> { + template + msgpack::packer& operator()(msgpack::packer& o, const std::unordered_map& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); - msgpack::object_kv* const pend = p + size; - o.via.map.ptr = p; - o.via.map.size = size; - typename std::unordered_map::const_iterator it(v.begin()); - do { - p->key = msgpack::object(it->first, o.zone); - p->val = msgpack::object(it->second, o.zone); - ++p; - ++it; - } while(p < pend); + o.pack_map(size); + for(typename std::unordered_map::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(it->first); + o.pack(it->second); + } + return o; } -} +}; + +template +struct object_with_zone> { + void operator()(msgpack::object::with_zone& o, const std::unordered_map& v) const { + o.type = msgpack::type::MAP; + if(v.empty()) { + o.via.map.ptr = nullptr; + o.via.map.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); + msgpack::object_kv* const pend = p + size; + o.via.map.ptr = p; + o.via.map.size = size; + typename std::unordered_map::const_iterator it(v.begin()); + do { + p->key = msgpack::object(it->first, o.zone); + p->val = msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; template -inline msgpack::object const& operator>> (msgpack::object const& o, std::unordered_multimap& v) -{ - if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } - msgpack::object_kv* p(o.via.map.ptr); - msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); - std::unordered_multimap tmp; - for(; p != pend; ++p) { - std::pair value; - p->key.convert(value.first); - p->val.convert(value.second); - tmp.insert(value); +struct convert> { + msgpack::object const& operator()(msgpack::object const& o, std::unordered_multimap& v) const { + if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } + msgpack::object_kv* p(o.via.map.ptr); + msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); + std::unordered_multimap tmp; + for(; p != pend; ++p) { + std::pair value; + p->key.convert(value.first); + p->val.convert(value.second); + tmp.insert(value); + } + tmp.swap(v); + return o; } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::unordered_multimap& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_map(size); - for(typename std::unordered_multimap::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(it->first); - o.pack(it->second); - } - return o; -} +}; template -inline void operator<< (msgpack::object::with_zone& o, const std::unordered_multimap& v) -{ - o.type = msgpack::type::MAP; - if(v.empty()) { - o.via.map.ptr = nullptr; - o.via.map.size = 0; - } else { +struct pack> { + template + msgpack::packer& operator()(msgpack::packer& o, const std::unordered_multimap& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); - msgpack::object_kv* const pend = p + size; - o.via.map.ptr = p; - o.via.map.size = size; - typename std::unordered_multimap::const_iterator it(v.begin()); - do { - p->key = msgpack::object(it->first, o.zone); - p->val = msgpack::object(it->second, o.zone); - ++p; - ++it; - } while(p < pend); + o.pack_map(size); + for(typename std::unordered_multimap::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(it->first); + o.pack(it->second); + } + return o; } -} +}; -} // MSGPACK_API_VERSION_NAMESPACE(v1) +template +struct object_with_zone> { + void operator()(msgpack::object::with_zone& o, const std::unordered_multimap& v) const { + o.type = msgpack::type::MAP; + if(v.empty()) { + o.via.map.ptr = nullptr; + o.via.map.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); + msgpack::object_kv* const pend = p + size; + o.via.map.ptr = p; + o.via.map.size = size; + typename std::unordered_multimap::const_iterator it(v.begin()); + do { + p->key = msgpack::object(it->first, o.zone); + p->val = msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; -} // namespace msgpack +} // namespace adaptor + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack #endif // MSGPACK_TYPE_UNORDERED_MAP_HPP diff --git a/include/msgpack/adaptor/cpp11/unordered_map_fwd.hpp b/include/msgpack/adaptor/cpp11/unordered_map_fwd.hpp deleted file mode 100644 index e031f220..00000000 --- a/include/msgpack/adaptor/cpp11/unordered_map_fwd.hpp +++ /dev/null @@ -1,53 +0,0 @@ -// -// 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_UNORDERED_MAP_FWD_HPP -#define MSGPACK_TYPE_UNORDERED_MAP_FWD_HPP - -#include "msgpack/versioning.hpp" -#include "msgpack/object_fwd.hpp" - -#include - -namespace msgpack { - -MSGPACK_API_VERSION_NAMESPACE(v1) { - -template -msgpack::object const& operator>> (msgpack::object const& o, std::unordered_map& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::unordered_map& v); - -template -void operator<< (msgpack::object::with_zone& o, const std::unordered_map& v); - -template -msgpack::object const& operator>> (msgpack::object const& o, std::unordered_multimap& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::unordered_multimap& v); - -template -void operator<< (msgpack::object::with_zone& o, const std::unordered_multimap& v); - -} // MSGPACK_API_VERSION_NAMESPACE(v1) - -} // namespace msgpack - - -#endif // MSGPACK_TYPE_UNORDERED_MAP_FWD_HPP diff --git a/include/msgpack/adaptor/cpp11/unordered_set.hpp b/include/msgpack/adaptor/cpp11/unordered_set.hpp index 9d84167f..b4e4dd81 100644 --- a/include/msgpack/adaptor/cpp11/unordered_set.hpp +++ b/include/msgpack/adaptor/cpp11/unordered_set.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_UNORDERED_SET_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -28,107 +28,119 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -template -inline msgpack::object const& operator>> (msgpack::object const& o, std::unordered_set& v) -{ - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - msgpack::object* p = o.via.array.ptr + o.via.array.size; - msgpack::object* const pbegin = o.via.array.ptr; - std::unordered_set tmp; - while(p > pbegin) { - --p; - tmp.insert(p->as()); - } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::unordered_set& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_array(size); - for(typename std::unordered_set::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(*it); - } - return o; -} +namespace adaptor { template -inline void operator<< (msgpack::object::with_zone& o, const std::unordered_set& v) -{ - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { +struct convert> { + msgpack::object const& operator()(msgpack::object const& o, std::unordered_set& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + msgpack::object* p = o.via.array.ptr + o.via.array.size; + msgpack::object* const pbegin = o.via.array.ptr; + std::unordered_set tmp; + while(p > pbegin) { + --p; + tmp.insert(p->as()); + } + tmp.swap(v); + return o; + } +}; + +template +struct pack> { + template + msgpack::packer& operator()(msgpack::packer& o, const std::unordered_set& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); - msgpack::object* const pend = p + size; - o.via.array.ptr = p; - o.via.array.size = size; - typename std::unordered_set::const_iterator it(v.begin()); - do { - *p = msgpack::object(*it, o.zone); - ++p; - ++it; - } while(p < pend); - } -} - - -template -inline msgpack::object const& operator>> (msgpack::object const& o, std::unordered_multiset& v) -{ - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - msgpack::object* p = o.via.array.ptr + o.via.array.size; - msgpack::object* const pbegin = o.via.array.ptr; - std::unordered_multiset tmp; - while(p > pbegin) { - --p; - tmp.insert(p->as()); - } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::unordered_multiset& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_array(size); - for(typename std::unordered_multiset::const_iterator it(v.begin()), it_end(v.end()); + o.pack_array(size); + for(typename std::unordered_set::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it) { - o.pack(*it); + o.pack(*it); + } + return o; } - return o; -} +}; template -inline void operator<< (msgpack::object::with_zone& o, const std::unordered_multiset& v) -{ - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { - uint32_t size = checked_get_container_size(v.size()); - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); - msgpack::object* const pend = p + size; - o.via.array.ptr = p; - o.via.array.size = size; - typename std::unordered_multiset::const_iterator it(v.begin()); - do { - *p = msgpack::object(*it, o.zone); - ++p; - ++it; - } while(p < pend); +struct object_with_zone> { + void operator()(msgpack::object::with_zone& o, const std::unordered_set& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); + msgpack::object* const pend = p + size; + o.via.array.ptr = p; + o.via.array.size = size; + typename std::unordered_set::const_iterator it(v.begin()); + do { + *p = msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } } -} +}; -} // MSGPACK_API_VERSION_NAMESPACE(v1) -} // namespace msgpack +template +struct convert> { + msgpack::object const& operator()(msgpack::object const& o, std::unordered_multiset& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + msgpack::object* p = o.via.array.ptr + o.via.array.size; + msgpack::object* const pbegin = o.via.array.ptr; + std::unordered_multiset tmp; + while(p > pbegin) { + --p; + tmp.insert(p->as()); + } + tmp.swap(v); + return o; + } +}; + +template +struct pack> { + template + msgpack::packer& operator()(msgpack::packer& o, const std::unordered_multiset& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.pack_array(size); + for(typename std::unordered_multiset::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(*it); + } + return o; + } +}; + +template +struct object_with_zone> { + void operator()(msgpack::object::with_zone& o, const std::unordered_multiset& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); + msgpack::object* const pend = p + size; + o.via.array.ptr = p; + o.via.array.size = size; + typename std::unordered_multiset::const_iterator it(v.begin()); + do { + *p = msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack #endif // MSGPACK_TYPE_UNORDERED_SET_HPP diff --git a/include/msgpack/adaptor/cpp11/unordered_set_fwd.hpp b/include/msgpack/adaptor/cpp11/unordered_set_fwd.hpp deleted file mode 100644 index d8980136..00000000 --- a/include/msgpack/adaptor/cpp11/unordered_set_fwd.hpp +++ /dev/null @@ -1,52 +0,0 @@ -// -// 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_UNORDERED_SET_FWD_HPP -#define MSGPACK_TYPE_UNORDERED_SET_FWD_HPP - -#include "msgpack/versioning.hpp" -#include "msgpack/object_fwd.hpp" - -#include - -namespace msgpack { - -MSGPACK_API_VERSION_NAMESPACE(v1) { - -template -msgpack::object const& operator>> (msgpack::object const& o, std::unordered_set& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::unordered_set& v); - -template -void operator<< (msgpack::object::with_zone& o, const std::unordered_set& v); - -template -msgpack::object const& operator>> (msgpack::object const& o, std::unordered_multiset& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::unordered_multiset& v); - -template -void operator<< (msgpack::object::with_zone& o, const std::unordered_multiset& v); - -} // MSGPACK_API_VERSION_NAMESPACE(v1) - -} // namespace msgpack - -#endif // MSGPACK_TYPE_UNORDERED_SET_FWD_HPP diff --git a/include/msgpack/adaptor/deque.hpp b/include/msgpack/adaptor/deque.hpp index cb7aab38..3d4b8ceb 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -28,53 +28,61 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -template -inline msgpack::object const& operator>> (msgpack::object const& o, std::deque& v) -{ - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - v.resize(o.via.array.size); - msgpack::object* p = o.via.array.ptr; - msgpack::object* const pend = o.via.array.ptr + o.via.array.size; - typename std::deque::iterator it = v.begin(); - for(; p < pend; ++p, ++it) { - p->convert(*it); - } - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::deque& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_array(size); - for(typename std::deque::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(*it); - } - return o; -} +namespace adaptor { template -inline void operator<< (msgpack::object::with_zone& o, const std::deque& v) -{ - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, std::deque& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + v.resize(o.via.array.size); + msgpack::object* p = o.via.array.ptr; + msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + typename std::deque::iterator it = v.begin(); + for(; p < pend; ++p, ++it) { + p->convert(*it); + } + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const std::deque& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); - msgpack::object* const pend = p + size; - o.via.array.ptr = p; - o.via.array.size = size; - typename std::deque::const_iterator it(v.begin()); - do { - *p = msgpack::object(*it, o.zone); - ++p; - ++it; - } while(p < pend); + o.pack_array(size); + for(typename std::deque::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(*it); + } + return o; } -} +}; + +template +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const std::deque& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); + msgpack::object* const pend = p + size; + o.via.array.ptr = p; + o.via.array.size = size; + typename std::deque::const_iterator it(v.begin()); + do { + *p = msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/deque_fwd.hpp b/include/msgpack/adaptor/deque_fwd.hpp deleted file mode 100644 index 2be801c4..00000000 --- a/include/msgpack/adaptor/deque_fwd.hpp +++ /dev/null @@ -1,40 +0,0 @@ -// -// 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 -msgpack::object const& operator>> (msgpack::object const& o, std::deque& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const std::deque& v); -template -void operator<< (msgpack::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 e9dd3394..fe018058 100644 --- a/include/msgpack/adaptor/detail/cpp03_define.hpp +++ b/include/msgpack/adaptor/detail/cpp03_define.hpp @@ -19,8 +19,8 @@ #define MSGPACK_CPP03_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack/adaptor/msgpack_tuple_fwd.hpp" -#include "msgpack/adaptor/int_fwd.hpp" +#include "msgpack/adaptor/msgpack_tuple.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/object_fwd.hpp" #define MSGPACK_DEFINE(...) \ @@ -40,32 +40,39 @@ } // MSGPACK_ADD_ENUM must be used in the global namespace. -#define MSGPACK_ADD_ENUM(enum) \ +#define MSGPACK_ADD_ENUM(enum_name) \ namespace msgpack { \ MSGPACK_API_VERSION_NAMESPACE(v1) { \ - inline msgpack::object const& operator>> (msgpack::object const& o, enum& v) \ - { \ - int tmp; \ - o >> tmp; \ - v = static_cast(tmp); \ - return o; \ - } \ - inline void operator<< (msgpack::object& o, const enum& v) \ - { \ - o << static_cast(v); \ - } \ - inline void operator<< (msgpack::object::with_zone& o, const enum& v) \ - { \ - o << static_cast(v); \ - } \ - namespace detail { \ + namespace adaptor { \ + template<> \ + struct convert { \ + msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const {\ + int tmp; \ + o >> tmp; \ + v = static_cast(tmp); \ + return o; \ + } \ + }; \ + template<> \ + struct object { \ + void operator()(msgpack::object& o, const enum_name& v) const {\ + o << static_cast(v); \ + } \ + }; \ + template<> \ + struct object_with_zone { \ + void operator()(msgpack::object::with_zone& o, const enum_name& v) const { \ + o << static_cast(v); \ + } \ + }; \ + template<> \ + struct pack { \ template \ - struct packer_serializer { \ - static msgpack::packer& pack(msgpack::packer& o, const enum& v) { \ - return o << static_cast(v); \ - } \ - }; \ - } \ + msgpack::packer& operator()(msgpack::packer& o, const enum_name& v) const { \ + return o << static_cast(v); \ + } \ + }; \ + } \ } \ } diff --git a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp index c37f7ffa..8607b599 100644 --- a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp @@ -20,6 +20,7 @@ #include "msgpack/versioning.hpp" #include "msgpack/object.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" namespace msgpack { @@ -31,7 +32,7 @@ namespace type { // FIXME operator!= -template +template struct tuple; template @@ -10583,3336 +10584,3314 @@ inline tuple> ( +namespace adaptor { + +template <> +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple<>&) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - return o; -} + type::tuple<>&) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + return o; + } +}; + template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 1) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 1) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 2) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 2) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 3) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 3) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 4) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 4) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 5) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 5) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 6) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 6) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 7) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 7) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 8) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 8) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 9) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 9) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 10) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 10) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 11) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 11) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 12) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 12) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 13) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 13) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 14) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 14) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 15) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 15) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 16) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 16) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 17) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 17) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 18) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 18) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 19) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 19) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 20) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 20) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 21) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 21) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 22) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - o.via.array.ptr[21].convert::type>(v.template get<21>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 22) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[21].msgpack::object::convert::type>(v.template get<21>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 23) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - o.via.array.ptr[21].convert::type>(v.template get<21>()); - o.via.array.ptr[22].convert::type>(v.template get<22>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 23) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[21].msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[22].msgpack::object::convert::type>(v.template get<22>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 24) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - o.via.array.ptr[21].convert::type>(v.template get<21>()); - o.via.array.ptr[22].convert::type>(v.template get<22>()); - o.via.array.ptr[23].convert::type>(v.template get<23>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 24) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[21].msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[22].msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[23].msgpack::object::convert::type>(v.template get<23>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 25) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - o.via.array.ptr[21].convert::type>(v.template get<21>()); - o.via.array.ptr[22].convert::type>(v.template get<22>()); - o.via.array.ptr[23].convert::type>(v.template get<23>()); - o.via.array.ptr[24].convert::type>(v.template get<24>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 25) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[21].msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[22].msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[23].msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[24].msgpack::object::convert::type>(v.template get<24>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 26) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - o.via.array.ptr[21].convert::type>(v.template get<21>()); - o.via.array.ptr[22].convert::type>(v.template get<22>()); - o.via.array.ptr[23].convert::type>(v.template get<23>()); - o.via.array.ptr[24].convert::type>(v.template get<24>()); - o.via.array.ptr[25].convert::type>(v.template get<25>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 26) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[21].msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[22].msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[23].msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[24].msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[25].msgpack::object::convert::type>(v.template get<25>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 27) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - o.via.array.ptr[21].convert::type>(v.template get<21>()); - o.via.array.ptr[22].convert::type>(v.template get<22>()); - o.via.array.ptr[23].convert::type>(v.template get<23>()); - o.via.array.ptr[24].convert::type>(v.template get<24>()); - o.via.array.ptr[25].convert::type>(v.template get<25>()); - o.via.array.ptr[26].convert::type>(v.template get<26>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 27) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[21].msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[22].msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[23].msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[24].msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[25].msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[26].msgpack::object::convert::type>(v.template get<26>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 28) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - o.via.array.ptr[21].convert::type>(v.template get<21>()); - o.via.array.ptr[22].convert::type>(v.template get<22>()); - o.via.array.ptr[23].convert::type>(v.template get<23>()); - o.via.array.ptr[24].convert::type>(v.template get<24>()); - o.via.array.ptr[25].convert::type>(v.template get<25>()); - o.via.array.ptr[26].convert::type>(v.template get<26>()); - o.via.array.ptr[27].convert::type>(v.template get<27>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 28) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[21].msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[22].msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[23].msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[24].msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[25].msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[26].msgpack::object::convert::type>(v.template get<26>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[27].msgpack::object::convert::type>(v.template get<27>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 29) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - o.via.array.ptr[21].convert::type>(v.template get<21>()); - o.via.array.ptr[22].convert::type>(v.template get<22>()); - o.via.array.ptr[23].convert::type>(v.template get<23>()); - o.via.array.ptr[24].convert::type>(v.template get<24>()); - o.via.array.ptr[25].convert::type>(v.template get<25>()); - o.via.array.ptr[26].convert::type>(v.template get<26>()); - o.via.array.ptr[27].convert::type>(v.template get<27>()); - o.via.array.ptr[28].convert::type>(v.template get<28>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 29) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[21].msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[22].msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[23].msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[24].msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[25].msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[26].msgpack::object::convert::type>(v.template get<26>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[27].msgpack::object::convert::type>(v.template get<27>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[28].msgpack::object::convert::type>(v.template get<28>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 30) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - o.via.array.ptr[21].convert::type>(v.template get<21>()); - o.via.array.ptr[22].convert::type>(v.template get<22>()); - o.via.array.ptr[23].convert::type>(v.template get<23>()); - o.via.array.ptr[24].convert::type>(v.template get<24>()); - o.via.array.ptr[25].convert::type>(v.template get<25>()); - o.via.array.ptr[26].convert::type>(v.template get<26>()); - o.via.array.ptr[27].convert::type>(v.template get<27>()); - o.via.array.ptr[28].convert::type>(v.template get<28>()); - o.via.array.ptr[29].convert::type>(v.template get<29>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 30) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[21].msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[22].msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[23].msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[24].msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[25].msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[26].msgpack::object::convert::type>(v.template get<26>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[27].msgpack::object::convert::type>(v.template get<27>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[28].msgpack::object::convert::type>(v.template get<28>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[29].msgpack::object::convert::type>(v.template get<29>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 31) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - o.via.array.ptr[21].convert::type>(v.template get<21>()); - o.via.array.ptr[22].convert::type>(v.template get<22>()); - o.via.array.ptr[23].convert::type>(v.template get<23>()); - o.via.array.ptr[24].convert::type>(v.template get<24>()); - o.via.array.ptr[25].convert::type>(v.template get<25>()); - o.via.array.ptr[26].convert::type>(v.template get<26>()); - o.via.array.ptr[27].convert::type>(v.template get<27>()); - o.via.array.ptr[28].convert::type>(v.template get<28>()); - o.via.array.ptr[29].convert::type>(v.template get<29>()); - o.via.array.ptr[30].convert::type>(v.template get<30>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 31) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[21].msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[22].msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[23].msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[24].msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[25].msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[26].msgpack::object::convert::type>(v.template get<26>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[27].msgpack::object::convert::type>(v.template get<27>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[28].msgpack::object::convert::type>(v.template get<28>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[29].msgpack::object::convert::type>(v.template get<29>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[30].msgpack::object::convert::type>(v.template get<30>()); + return o; + } +}; template -inline msgpack::object const& operator>> ( +struct convert > { + msgpack::object const& operator()( msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < 32) { throw msgpack::type_error(); } - - o.via.array.ptr[0].convert::type>(v.template get<0>()); - o.via.array.ptr[1].convert::type>(v.template get<1>()); - o.via.array.ptr[2].convert::type>(v.template get<2>()); - o.via.array.ptr[3].convert::type>(v.template get<3>()); - o.via.array.ptr[4].convert::type>(v.template get<4>()); - o.via.array.ptr[5].convert::type>(v.template get<5>()); - o.via.array.ptr[6].convert::type>(v.template get<6>()); - o.via.array.ptr[7].convert::type>(v.template get<7>()); - o.via.array.ptr[8].convert::type>(v.template get<8>()); - o.via.array.ptr[9].convert::type>(v.template get<9>()); - o.via.array.ptr[10].convert::type>(v.template get<10>()); - o.via.array.ptr[11].convert::type>(v.template get<11>()); - o.via.array.ptr[12].convert::type>(v.template get<12>()); - o.via.array.ptr[13].convert::type>(v.template get<13>()); - o.via.array.ptr[14].convert::type>(v.template get<14>()); - o.via.array.ptr[15].convert::type>(v.template get<15>()); - o.via.array.ptr[16].convert::type>(v.template get<16>()); - o.via.array.ptr[17].convert::type>(v.template get<17>()); - o.via.array.ptr[18].convert::type>(v.template get<18>()); - o.via.array.ptr[19].convert::type>(v.template get<19>()); - o.via.array.ptr[20].convert::type>(v.template get<20>()); - o.via.array.ptr[21].convert::type>(v.template get<21>()); - o.via.array.ptr[22].convert::type>(v.template get<22>()); - o.via.array.ptr[23].convert::type>(v.template get<23>()); - o.via.array.ptr[24].convert::type>(v.template get<24>()); - o.via.array.ptr[25].convert::type>(v.template get<25>()); - o.via.array.ptr[26].convert::type>(v.template get<26>()); - o.via.array.ptr[27].convert::type>(v.template get<27>()); - o.via.array.ptr[28].convert::type>(v.template get<28>()); - o.via.array.ptr[29].convert::type>(v.template get<29>()); - o.via.array.ptr[30].convert::type>(v.template get<30>()); - o.via.array.ptr[31].convert::type>(v.template get<31>()); - return o; -} + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < 32) { throw msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[0].msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[1].msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[2].msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[3].msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[4].msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[5].msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[6].msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[7].msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[8].msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[9].msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[10].msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[11].msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[12].msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[13].msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[14].msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[15].msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[16].msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[17].msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[18].msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[19].msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[20].msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[21].msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[22].msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[23].msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[24].msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[25].msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[26].msgpack::object::convert::type>(v.template get<26>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[27].msgpack::object::convert::type>(v.template get<27>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[28].msgpack::object::convert::type>(v.template get<28>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[29].msgpack::object::convert::type>(v.template get<29>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[30].msgpack::object::convert::type>(v.template get<30>()); + // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. + o.via.array.ptr[31].msgpack::object::convert::type>(v.template get<31>()); + return o; + } +}; -template -inline const msgpack::packer& operator<< ( +template <> +struct pack > { + template + msgpack::packer& operator()( msgpack::packer& o, - const type::tuple<>&) { - o.pack_array(0); - return o; -} + const type::tuple<>&) const { + o.pack_array(0); + return o; + } +}; -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(1); - - o.pack(v.template get<0>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(2); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(3); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(4); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(5); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(6); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(7); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(8); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(9); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(10); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(11); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(12); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(13); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(14); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(15); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(16); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(17); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(18); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(19); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(20); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(21); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(22); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - o.pack(v.template get<21>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(23); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - o.pack(v.template get<21>()); - o.pack(v.template get<22>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(24); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - o.pack(v.template get<21>()); - o.pack(v.template get<22>()); - o.pack(v.template get<23>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(25); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - o.pack(v.template get<21>()); - o.pack(v.template get<22>()); - o.pack(v.template get<23>()); - o.pack(v.template get<24>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(26); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - o.pack(v.template get<21>()); - o.pack(v.template get<22>()); - o.pack(v.template get<23>()); - o.pack(v.template get<24>()); - o.pack(v.template get<25>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(27); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - o.pack(v.template get<21>()); - o.pack(v.template get<22>()); - o.pack(v.template get<23>()); - o.pack(v.template get<24>()); - o.pack(v.template get<25>()); - o.pack(v.template get<26>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(28); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - o.pack(v.template get<21>()); - o.pack(v.template get<22>()); - o.pack(v.template get<23>()); - o.pack(v.template get<24>()); - o.pack(v.template get<25>()); - o.pack(v.template get<26>()); - o.pack(v.template get<27>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(29); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - o.pack(v.template get<21>()); - o.pack(v.template get<22>()); - o.pack(v.template get<23>()); - o.pack(v.template get<24>()); - o.pack(v.template get<25>()); - o.pack(v.template get<26>()); - o.pack(v.template get<27>()); - o.pack(v.template get<28>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(30); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - o.pack(v.template get<21>()); - o.pack(v.template get<22>()); - o.pack(v.template get<23>()); - o.pack(v.template get<24>()); - o.pack(v.template get<25>()); - o.pack(v.template get<26>()); - o.pack(v.template get<27>()); - o.pack(v.template get<28>()); - o.pack(v.template get<29>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(31); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - o.pack(v.template get<21>()); - o.pack(v.template get<22>()); - o.pack(v.template get<23>()); - o.pack(v.template get<24>()); - o.pack(v.template get<25>()); - o.pack(v.template get<26>()); - o.pack(v.template get<27>()); - o.pack(v.template get<28>()); - o.pack(v.template get<29>()); - o.pack(v.template get<30>()); - return o; -} - -template -inline const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(32); - - o.pack(v.template get<0>()); - o.pack(v.template get<1>()); - o.pack(v.template get<2>()); - o.pack(v.template get<3>()); - o.pack(v.template get<4>()); - o.pack(v.template get<5>()); - o.pack(v.template get<6>()); - o.pack(v.template get<7>()); - o.pack(v.template get<8>()); - o.pack(v.template get<9>()); - o.pack(v.template get<10>()); - o.pack(v.template get<11>()); - o.pack(v.template get<12>()); - o.pack(v.template get<13>()); - o.pack(v.template get<14>()); - o.pack(v.template get<15>()); - o.pack(v.template get<16>()); - o.pack(v.template get<17>()); - o.pack(v.template get<18>()); - o.pack(v.template get<19>()); - o.pack(v.template get<20>()); - o.pack(v.template get<21>()); - o.pack(v.template get<22>()); - o.pack(v.template get<23>()); - o.pack(v.template get<24>()); - o.pack(v.template get<25>()); - o.pack(v.template get<26>()); - o.pack(v.template get<27>()); - o.pack(v.template get<28>()); - o.pack(v.template get<29>()); - o.pack(v.template get<30>()); - o.pack(v.template get<31>()); - return o; -} - - -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple<>&) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = nullptr; - o.via.array.size = 0; -} template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*1)); - o.via.array.size = 1; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(1); + + o.pack(v.template get<0>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*2)); - o.via.array.size = 2; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(2); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*3)); - o.via.array.size = 3; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(3); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*4)); - o.via.array.size = 4; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(4); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*5)); - o.via.array.size = 5; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(5); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*6)); - o.via.array.size = 6; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(6); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*7)); - o.via.array.size = 7; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(7); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*8)); - o.via.array.size = 8; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(8); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*9)); - o.via.array.size = 9; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(9); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*10)); - o.via.array.size = 10; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(10); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*11)); - o.via.array.size = 11; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(11); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*12)); - o.via.array.size = 12; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(12); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*13)); - o.via.array.size = 13; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(13); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*14)); - o.via.array.size = 14; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(14); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*15)); - o.via.array.size = 15; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(15); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*16)); - o.via.array.size = 16; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(16); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*17)); - o.via.array.size = 17; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(17); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*18)); - o.via.array.size = 18; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(18); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*19)); - o.via.array.size = 19; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(19); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*20)); - o.via.array.size = 20; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(20); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*21)); - o.via.array.size = 21; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(21); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*22)); - o.via.array.size = 22; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); - o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(22); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + o.pack(v.template get<21>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*23)); - o.via.array.size = 23; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); - o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); - o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(23); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + o.pack(v.template get<21>()); + o.pack(v.template get<22>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*24)); - o.via.array.size = 24; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); - o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); - o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); - o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(24); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + o.pack(v.template get<21>()); + o.pack(v.template get<22>()); + o.pack(v.template get<23>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*25)); - o.via.array.size = 25; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); - o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); - o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); - o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); - o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(25); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + o.pack(v.template get<21>()); + o.pack(v.template get<22>()); + o.pack(v.template get<23>()); + o.pack(v.template get<24>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*26)); - o.via.array.size = 26; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); - o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); - o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); - o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); - o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); - o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(26); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + o.pack(v.template get<21>()); + o.pack(v.template get<22>()); + o.pack(v.template get<23>()); + o.pack(v.template get<24>()); + o.pack(v.template get<25>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*27)); - o.via.array.size = 27; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); - o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); - o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); - o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); - o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); - o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); - o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(27); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + o.pack(v.template get<21>()); + o.pack(v.template get<22>()); + o.pack(v.template get<23>()); + o.pack(v.template get<24>()); + o.pack(v.template get<25>()); + o.pack(v.template get<26>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*28)); - o.via.array.size = 28; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); - o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); - o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); - o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); - o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); - o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); - o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); - o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(28); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + o.pack(v.template get<21>()); + o.pack(v.template get<22>()); + o.pack(v.template get<23>()); + o.pack(v.template get<24>()); + o.pack(v.template get<25>()); + o.pack(v.template get<26>()); + o.pack(v.template get<27>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*29)); - o.via.array.size = 29; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); - o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); - o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); - o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); - o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); - o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); - o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); - o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone); - o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(29); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + o.pack(v.template get<21>()); + o.pack(v.template get<22>()); + o.pack(v.template get<23>()); + o.pack(v.template get<24>()); + o.pack(v.template get<25>()); + o.pack(v.template get<26>()); + o.pack(v.template get<27>()); + o.pack(v.template get<28>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*30)); - o.via.array.size = 30; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); - o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); - o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); - o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); - o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); - o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); - o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); - o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone); - o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone); - o.via.array.ptr[29] = msgpack::object(v.template get<29>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(30); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + o.pack(v.template get<21>()); + o.pack(v.template get<22>()); + o.pack(v.template get<23>()); + o.pack(v.template get<24>()); + o.pack(v.template get<25>()); + o.pack(v.template get<26>()); + o.pack(v.template get<27>()); + o.pack(v.template get<28>()); + o.pack(v.template get<29>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*31)); - o.via.array.size = 31; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); - o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); - o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); - o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); - o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); - o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); - o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); - o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone); - o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone); - o.via.array.ptr[29] = msgpack::object(v.template get<29>(), o.zone); - o.via.array.ptr[30] = msgpack::object(v.template get<30>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(31); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + o.pack(v.template get<21>()); + o.pack(v.template get<22>()); + o.pack(v.template get<23>()); + o.pack(v.template get<24>()); + o.pack(v.template get<25>()); + o.pack(v.template get<26>()); + o.pack(v.template get<27>()); + o.pack(v.template get<28>()); + o.pack(v.template get<29>()); + o.pack(v.template get<30>()); + return o; + } +}; template -inline void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*32)); - o.via.array.size = 32; - - o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); - o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); - o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); - o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); - o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); - o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); - o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); - o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); - o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); - o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); - o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); - o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); - o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); - o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); - o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); - o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); - o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); - o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); - o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); - o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); - o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); - o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); - o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); - o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); - o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); - o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); - o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); - o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone); - o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone); - o.via.array.ptr[29] = msgpack::object(v.template get<29>(), o.zone); - o.via.array.ptr[30] = msgpack::object(v.template get<30>(), o.zone); - o.via.array.ptr[31] = msgpack::object(v.template get<31>(), o.zone); -} +struct pack > { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(32); + + o.pack(v.template get<0>()); + o.pack(v.template get<1>()); + o.pack(v.template get<2>()); + o.pack(v.template get<3>()); + o.pack(v.template get<4>()); + o.pack(v.template get<5>()); + o.pack(v.template get<6>()); + o.pack(v.template get<7>()); + o.pack(v.template get<8>()); + o.pack(v.template get<9>()); + o.pack(v.template get<10>()); + o.pack(v.template get<11>()); + o.pack(v.template get<12>()); + o.pack(v.template get<13>()); + o.pack(v.template get<14>()); + o.pack(v.template get<15>()); + o.pack(v.template get<16>()); + o.pack(v.template get<17>()); + o.pack(v.template get<18>()); + o.pack(v.template get<19>()); + o.pack(v.template get<20>()); + o.pack(v.template get<21>()); + o.pack(v.template get<22>()); + o.pack(v.template get<23>()); + o.pack(v.template get<24>()); + o.pack(v.template get<25>()); + o.pack(v.template get<26>()); + o.pack(v.template get<27>()); + o.pack(v.template get<28>()); + o.pack(v.template get<29>()); + o.pack(v.template get<30>()); + o.pack(v.template get<31>()); + return o; + } +}; +template <> +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple<>&) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } +}; + + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*1)); + o.via.array.size = 1; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*2)); + o.via.array.size = 2; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*3)); + o.via.array.size = 3; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*4)); + o.via.array.size = 4; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*5)); + o.via.array.size = 5; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*6)); + o.via.array.size = 6; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*7)); + o.via.array.size = 7; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*8)); + o.via.array.size = 8; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*9)); + o.via.array.size = 9; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*10)); + o.via.array.size = 10; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*11)); + o.via.array.size = 11; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*12)); + o.via.array.size = 12; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*13)); + o.via.array.size = 13; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*14)); + o.via.array.size = 14; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*15)); + o.via.array.size = 15; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*16)); + o.via.array.size = 16; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*17)); + o.via.array.size = 17; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*18)); + o.via.array.size = 18; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*19)); + o.via.array.size = 19; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*20)); + o.via.array.size = 20; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*21)); + o.via.array.size = 21; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*22)); + o.via.array.size = 22; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*23)); + o.via.array.size = 23; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*24)); + o.via.array.size = 24; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*25)); + o.via.array.size = 25; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*26)); + o.via.array.size = 26; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*27)); + o.via.array.size = 27; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*28)); + o.via.array.size = 28; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); + o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*29)); + o.via.array.size = 29; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); + o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone); + o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*30)); + o.via.array.size = 30; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); + o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone); + o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone); + o.via.array.ptr[29] = msgpack::object(v.template get<29>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*31)); + o.via.array.size = 31; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); + o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone); + o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone); + o.via.array.ptr[29] = msgpack::object(v.template get<29>(), o.zone); + o.via.array.ptr[30] = msgpack::object(v.template get<30>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*32)); + o.via.array.size = 32; + + o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone); + o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone); + o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone); + o.via.array.ptr[29] = msgpack::object(v.template get<29>(), o.zone); + o.via.array.ptr[30] = msgpack::object(v.template get<30>(), o.zone); + o.via.array.ptr[31] = msgpack::object(v.template get<31>(), o.zone); + } +}; + + +} // namespace adaptor + } // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack - -//inline std::ostream& operator<< (std::ostream& o, const msgpack::type::tuple<>& v) { -// return o << "[]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << ", " << v.template get<21>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << ", " << v.template get<21>() -// << ", " << v.template get<22>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << ", " << v.template get<21>() -// << ", " << v.template get<22>() -// << ", " << v.template get<23>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << ", " << v.template get<21>() -// << ", " << v.template get<22>() -// << ", " << v.template get<23>() -// << ", " << v.template get<24>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << ", " << v.template get<21>() -// << ", " << v.template get<22>() -// << ", " << v.template get<23>() -// << ", " << v.template get<24>() -// << ", " << v.template get<25>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << ", " << v.template get<21>() -// << ", " << v.template get<22>() -// << ", " << v.template get<23>() -// << ", " << v.template get<24>() -// << ", " << v.template get<25>() -// << ", " << v.template get<26>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << ", " << v.template get<21>() -// << ", " << v.template get<22>() -// << ", " << v.template get<23>() -// << ", " << v.template get<24>() -// << ", " << v.template get<25>() -// << ", " << v.template get<26>() -// << ", " << v.template get<27>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << ", " << v.template get<21>() -// << ", " << v.template get<22>() -// << ", " << v.template get<23>() -// << ", " << v.template get<24>() -// << ", " << v.template get<25>() -// << ", " << v.template get<26>() -// << ", " << v.template get<27>() -// << ", " << v.template get<28>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << ", " << v.template get<21>() -// << ", " << v.template get<22>() -// << ", " << v.template get<23>() -// << ", " << v.template get<24>() -// << ", " << v.template get<25>() -// << ", " << v.template get<26>() -// << ", " << v.template get<27>() -// << ", " << v.template get<28>() -// << ", " << v.template get<29>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << ", " << v.template get<21>() -// << ", " << v.template get<22>() -// << ", " << v.template get<23>() -// << ", " << v.template get<24>() -// << ", " << v.template get<25>() -// << ", " << v.template get<26>() -// << ", " << v.template get<27>() -// << ", " << v.template get<28>() -// << ", " << v.template get<29>() -// << ", " << v.template get<30>() -// << "]"; -//} -// -//template -//inline std::ostream& operator<< (std::ostream& o, -// const msgpack::type::tuple& v) { -// return o << "[" -// -// << v.template get<0>() -// << ", " << v.template get<1>() -// << ", " << v.template get<2>() -// << ", " << v.template get<3>() -// << ", " << v.template get<4>() -// << ", " << v.template get<5>() -// << ", " << v.template get<6>() -// << ", " << v.template get<7>() -// << ", " << v.template get<8>() -// << ", " << v.template get<9>() -// << ", " << v.template get<10>() -// << ", " << v.template get<11>() -// << ", " << v.template get<12>() -// << ", " << v.template get<13>() -// << ", " << v.template get<14>() -// << ", " << v.template get<15>() -// << ", " << v.template get<16>() -// << ", " << v.template get<17>() -// << ", " << v.template get<18>() -// << ", " << v.template get<19>() -// << ", " << v.template get<20>() -// << ", " << v.template get<21>() -// << ", " << v.template get<22>() -// << ", " << v.template get<23>() -// << ", " << v.template get<24>() -// << ", " << v.template get<25>() -// << ", " << v.template get<26>() -// << ", " << v.template get<27>() -// << ", " << v.template get<28>() -// << ", " << v.template get<29>() -// << ", " << v.template get<30>() -// << ", " << v.template get<31>() -// << "]"; -//} -// - #endif // MSGPACK_CPP03_MSGPACK_TUPLE_HPP diff --git a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp deleted file mode 100644 index c5b8d8f4..00000000 --- a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp +++ /dev/null @@ -1,4341 +0,0 @@ -// -// 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 - -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple<>&); - - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple<>&); - - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - - -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple<>&); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::object::with_zone& o, - const type::tuple& v); - -template -void operator<< ( - msgpack::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 b8f76d2e..30de5161 100644 --- a/include/msgpack/adaptor/detail/cpp11_define.hpp +++ b/include/msgpack/adaptor/detail/cpp11_define.hpp @@ -19,10 +19,10 @@ #define MSGPACK_CPP11_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" // for MSGPACK_ADD_ENUM -#include "msgpack/adaptor/int_fwd.hpp" +#include "msgpack/adaptor/int.hpp" #include #include @@ -44,34 +44,41 @@ } // MSGPACK_ADD_ENUM must be used in the global namespace. -#define MSGPACK_ADD_ENUM(enum) \ +#define MSGPACK_ADD_ENUM(enum_name) \ namespace msgpack { \ MSGPACK_API_VERSION_NAMESPACE(v1) { \ - inline msgpack::object const& operator>> (msgpack::object const& o, enum& v) \ - { \ - std::underlying_type::type tmp; \ - o >> tmp; \ - v = static_cast(tmp); \ - return o; \ - } \ - inline void operator<< (msgpack::object& o, const enum& v) \ - { \ - auto tmp = static_cast::type>(v); \ - o << tmp; \ - } \ - inline void operator<< (msgpack::object::with_zone& o, const enum& v) \ - { \ - auto tmp = static_cast::type>(v); \ - o << tmp; \ - } \ - namespace detail { \ + namespace adaptor { \ + template<> \ + struct convert { \ + msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const { \ + std::underlying_type::type tmp; \ + o >> tmp; \ + v = static_cast(tmp); \ + return o; \ + } \ + }; \ + template<> \ + struct object { \ + void operator()(msgpack::object& o, const enum_name& v) const { \ + auto tmp = static_cast::type>(v); \ + o << tmp; \ + } \ + }; \ + template<> \ + struct object_with_zone { \ + void operator()(msgpack::object::with_zone& o, const enum_name& v) const { \ + auto tmp = static_cast::type>(v); \ + o << tmp; \ + } \ + }; \ + template <> \ + struct pack { \ template \ - struct packer_serializer { \ - static msgpack::packer& pack(msgpack::packer& o, const enum& v) { \ - return o << static_cast::type>(v); \ - } \ - }; \ - } \ + msgpack::packer& operator()(msgpack::packer& o, const enum_name& v) const { \ + return o << static_cast::type>(v); \ + } \ + }; \ + } \ } \ } diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp index accaf5b9..24393329 100644 --- a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp @@ -119,14 +119,21 @@ struct MsgpackTuplePacker { } }; -template -const msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v) { - o.pack_array(sizeof...(Args)); - MsgpackTuplePacker::pack(o, v); - return o; -} +namespace adaptor { + +template +struct pack> { + template + msgpack::packer& operator()( + msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(sizeof...(Args)); + MsgpackTuplePacker::pack(o, v); + return o; + } +}; + +} // namespace adaptor // --- Convert from tuple to object --- @@ -157,15 +164,21 @@ struct MsgpackTupleConverter { } }; +namespace adaptor { + template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v) { - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size < sizeof...(Args)) { throw msgpack::type_error(); } - MsgpackTupleConverter::convert(o, v); - return o; -} +struct convert> { + msgpack::object const& operator()( + msgpack::object const& o, + type::tuple& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size < sizeof...(Args)) { throw msgpack::type_error(); } + MsgpackTupleConverter::convert(o, v); + return o; + } +}; + +} // namespace adaptor // --- Convert from tuple to object with zone --- template @@ -195,15 +208,21 @@ struct MsgpackTupleToObjectWithZone { } }; +namespace adaptor { + template -inline void operator<< ( + struct object_with_zone> { + void operator()( msgpack::object::with_zone& o, - type::tuple const& v) { - o.type = msgpack::type::ARRAY; - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*sizeof...(Args))); - o.via.array.size = sizeof...(Args); - MsgpackTupleToObjectWithZone::convert(o, v); -} + type::tuple const& v) const { + o.type = msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*sizeof...(Args))); + o.via.array.size = sizeof...(Args); + MsgpackTupleToObjectWithZone::convert(o, v); + } +}; + +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp deleted file mode 100644 index fb65cd29..00000000 --- a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp +++ /dev/null @@ -1,84 +0,0 @@ -// -// 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 msgpack::packer& operator<< ( - msgpack::packer& o, - const type::tuple& v); - -// --- Convert from tuple to object --- - -template -struct MsgpackTupleConverter; - -template -msgpack::object const& operator>> ( - msgpack::object const& o, - type::tuple& v); - -// --- Convert from tuple to object with zone --- -template -struct MsgpackTupleToObjectWithZone; - -template -void operator<< ( - msgpack::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 7a78f0f8..b6abe6b1 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/int.hpp" namespace msgpack { @@ -56,154 +56,244 @@ typedef fix_int fix_int64; } // namespace type +namespace adaptor { -inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_int8& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, type::fix_int8& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_int16& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, type::fix_int16& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_int32& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, type::fix_int32& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_int64& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, type::fix_int64& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint8& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, type::fix_uint8& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint16& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, type::fix_uint16& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint32& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, type::fix_uint32& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint64& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, type::fix_uint64& v) const { v = type::detail::convert_integer(o); return o; } +}; - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const type::fix_int8& v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const type::fix_int8& v) const { o.pack_fix_int8(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const type::fix_int16& v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const type::fix_int16& v) const { o.pack_fix_int16(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const type::fix_int32& v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const type::fix_int32& v) const { o.pack_fix_int32(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const type::fix_int64& v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const type::fix_int64& v) const { o.pack_fix_int64(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const type::fix_uint8& v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const type::fix_uint8& v) const { o.pack_fix_uint8(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const type::fix_uint16& v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const type::fix_uint16& v) const { o.pack_fix_uint16(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const type::fix_uint32& v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const type::fix_uint32& v) const { o.pack_fix_uint32(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const type::fix_uint64& v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const type::fix_uint64& v) const { o.pack_fix_uint64(v); return o; } +}; +template <> +struct object { + void operator()(msgpack::object& o, type::fix_int8 v) const { + if (v.get() < 0) { + o.type = msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v.get(); + } + else { + o.type = msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v.get(); + } + } +}; -inline void operator<< (msgpack::object& o, type::fix_int8 v) -{ - if (v.get() < 0) { - o.type = msgpack::type::NEGATIVE_INTEGER; - o.via.i64 = v.get(); +template <> +struct object { + void operator()(msgpack::object& o, type::fix_int16 v) const { + if(v.get() < 0) { + o.type = msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v.get(); + } + else { + o.type = msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v.get(); + } } - else { - o.type = msgpack::type::POSITIVE_INTEGER; - o.via.u64 = v.get(); - } -} +}; -inline void operator<< (msgpack::object& o, type::fix_int16 v) -{ - if(v.get() < 0) { - o.type = msgpack::type::NEGATIVE_INTEGER; - o.via.i64 = v.get(); +template <> +struct object { + void operator()(msgpack::object& o, type::fix_int32 v) const { + if (v.get() < 0) { + o.type = msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v.get(); + } + else { + o.type = msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v.get(); + } } - else { - o.type = msgpack::type::POSITIVE_INTEGER; - o.via.u64 = v.get(); - } -} +}; -inline void operator<< (msgpack::object& o, type::fix_int32 v) -{ - if (v.get() < 0) { - o.type = msgpack::type::NEGATIVE_INTEGER; - o.via.i64 = v.get(); +template <> +struct object { + void operator()(msgpack::object& o, type::fix_int64 v) const { + if (v.get() < 0) { + o.type = msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v.get(); + } + else { + o.type = msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v.get(); + } } - else { - o.type = msgpack::type::POSITIVE_INTEGER; - o.via.u64 = v.get(); - } -} +}; -inline void operator<< (msgpack::object& o, type::fix_int64 v) -{ - if (v.get() < 0) { - o.type = msgpack::type::NEGATIVE_INTEGER; - o.via.i64 = v.get(); - } - else { - o.type = msgpack::type::POSITIVE_INTEGER; - o.via.u64 = v.get(); - } -} - - -inline void operator<< (msgpack::object& o, type::fix_uint8 v) +template <> +struct object { + void operator()(msgpack::object& o, type::fix_uint8 v) const { o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); } +}; -inline void operator<< (msgpack::object& o, type::fix_uint16 v) +template <> +struct object { + void operator()(msgpack::object& o, type::fix_uint16 v) const { o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); } +}; -inline void operator<< (msgpack::object& o, type::fix_uint32 v) +template <> +struct object { + void operator()(msgpack::object& o, type::fix_uint32 v) const { o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); } +}; -inline void operator<< (msgpack::object& o, type::fix_uint64 v) +template <> +struct object { + void operator()(msgpack::object& o, type::fix_uint64 v) const { o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); } +}; - -inline void operator<< (msgpack::object::with_zone& o, type::fix_int8 v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, type::fix_int8 v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, type::fix_int16 v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, type::fix_int16 v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, type::fix_int32 v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, type::fix_int32 v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, type::fix_int64 v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, type::fix_int64 v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, type::fix_uint8 v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, type::fix_uint8 v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, type::fix_uint16 v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, type::fix_uint16 v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, type::fix_uint32 v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, type::fix_uint32 v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, type::fix_uint64 v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, type::fix_uint64 v) const { static_cast(o) << v; } +}; +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/fixint_fwd.hpp b/include/msgpack/adaptor/fixint_fwd.hpp deleted file mode 100644 index 252f59d8..00000000 --- a/include/msgpack/adaptor/fixint_fwd.hpp +++ /dev/null @@ -1,100 +0,0 @@ -// -// 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 - - -msgpack::object const& operator>> (msgpack::object const& o, type::fix_int8& v); -msgpack::object const& operator>> (msgpack::object const& o, type::fix_int16& v); -msgpack::object const& operator>> (msgpack::object const& o, type::fix_int32& v); -msgpack::object const& operator>> (msgpack::object const& o, type::fix_int64& v); - -msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint8& v); -msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint16& v); -msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint32& v); -msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint64& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const type::fix_int8& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const type::fix_int16& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const type::fix_int32& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const type::fix_int64& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const type::fix_uint8& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const type::fix_uint16& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const type::fix_uint32& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const type::fix_uint64& v); - -void operator<< (msgpack::object& o, type::fix_int8 v); -void operator<< (msgpack::object& o, type::fix_int16 v); -void operator<< (msgpack::object& o, type::fix_int32 v); -void operator<< (msgpack::object& o, type::fix_int64 v); - -void operator<< (msgpack::object& o, type::fix_uint8 v); -void operator<< (msgpack::object& o, type::fix_uint16 v); -void operator<< (msgpack::object& o, type::fix_uint32 v); -void operator<< (msgpack::object& o, type::fix_uint64 v); - -void operator<< (msgpack::object::with_zone& o, type::fix_int8 v); -void operator<< (msgpack::object::with_zone& o, type::fix_int16 v); -void operator<< (msgpack::object::with_zone& o, type::fix_int32 v); -void operator<< (msgpack::object::with_zone& o, type::fix_int64 v); - -void operator<< (msgpack::object::with_zone& o, type::fix_uint8 v); -void operator<< (msgpack::object::with_zone& o, type::fix_uint16 v); -void operator<< (msgpack::object::with_zone& o, type::fix_uint32 v); -void operator<< (msgpack::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 df487c49..a31487c1 100644 --- a/include/msgpack/adaptor/float.hpp +++ b/include/msgpack/adaptor/float.hpp @@ -28,75 +28,97 @@ MSGPACK_API_VERSION_NAMESPACE(v1) { // FIXME check overflow, underflow +namespace adaptor { -inline msgpack::object const& operator>> (msgpack::object const& o, float& v) -{ - if(o.type == msgpack::type::FLOAT) { - v = static_cast(o.via.f64); +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, float& v) const { + if(o.type == msgpack::type::FLOAT) { + v = static_cast(o.via.f64); + } + else if (o.type == msgpack::type::POSITIVE_INTEGER) { + v = static_cast(o.via.u64); + } + else if (o.type == msgpack::type::NEGATIVE_INTEGER) { + v = static_cast(o.via.i64); + } + else { + throw msgpack::type_error(); + } + return o; } - else if (o.type == msgpack::type::POSITIVE_INTEGER) { - v = static_cast(o.via.u64); +}; + +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const float& v) const { + o.pack_float(v); + return o; } - else if (o.type == msgpack::type::NEGATIVE_INTEGER) { - v = static_cast(o.via.i64); +}; + + +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, double& v) const { + if(o.type == msgpack::type::FLOAT) { + v = o.via.f64; + } + else if (o.type == msgpack::type::POSITIVE_INTEGER) { + v = static_cast(o.via.u64); + } + else if (o.type == msgpack::type::NEGATIVE_INTEGER) { + v = static_cast(o.via.i64); + } + else { + throw msgpack::type_error(); + } + return o; } - else { - throw msgpack::type_error(); +}; + +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const double& v) const { + o.pack_double(v); + return o; } - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const float& v) -{ - o.pack_float(v); - return o; -} +}; -inline msgpack::object const& operator>> (msgpack::object const& o, double& v) -{ - if(o.type == msgpack::type::FLOAT) { - v = o.via.f64; +template <> +struct object { + void operator()(msgpack::object& o, float v) const { + o.type = msgpack::type::FLOAT; + o.via.f64 = static_cast(v); } - else if (o.type == msgpack::type::POSITIVE_INTEGER) { - v = static_cast(o.via.u64); +}; + +template <> +struct object { + void operator()(msgpack::object& o, double v) const { + o.type = msgpack::type::FLOAT; + o.via.f64 = v; } - else if (o.type == msgpack::type::NEGATIVE_INTEGER) { - v = static_cast(o.via.i64); +}; + +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, float v) const { + static_cast(o) << v; } - else { - throw msgpack::type_error(); +}; + +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, double v) const { + static_cast(o) << v; } - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const double& v) -{ - o.pack_double(v); - return o; -} - - -inline void operator<< (msgpack::object& o, float v) -{ - o.type = msgpack::type::FLOAT; - o.via.f64 = static_cast(v); -} - -inline void operator<< (msgpack::object& o, double v) -{ - o.type = msgpack::type::FLOAT; - o.via.f64 = v; -} - -inline void operator<< (msgpack::object::with_zone& o, float v) - { static_cast(o) << v; } - -inline void operator<< (msgpack::object::with_zone& o, double v) - { static_cast(o) << v; } +}; +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/float_fwd.hpp b/include/msgpack/adaptor/float_fwd.hpp deleted file mode 100644 index 58c21b84..00000000 --- a/include/msgpack/adaptor/float_fwd.hpp +++ /dev/null @@ -1,44 +0,0 @@ -// -// 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) { - -msgpack::object const& operator>> (msgpack::object const& o, float& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const float& v); -msgpack::object const& operator>> (msgpack::object const& o, double& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const double& v); -void operator<< (msgpack::object& o, float v); -void operator<< (msgpack::object& o, double v); -void operator<< (msgpack::object::with_zone& o, float v); -void operator<< (msgpack::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 cb0552d8..59fe1cf3 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include namespace msgpack { @@ -101,205 +101,329 @@ namespace detail { } // namespace detail } // namespace type -inline msgpack::object const& operator>> (msgpack::object const& o, char& v) +namespace adaptor { + +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, char& v) const { v = type::detail::convert_integer(o); return o; } +}; - -inline msgpack::object const& operator>> (msgpack::object const& o, signed char& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, signed char& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, signed short& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, signed short& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, signed int& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, signed int& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, signed long& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, signed long& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, signed long long& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, signed long long& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, unsigned char& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, unsigned char& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, unsigned short& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, unsigned short& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, unsigned int& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, unsigned int& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, unsigned long& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, unsigned long& v) const { v = type::detail::convert_integer(o); return o; } +}; -inline msgpack::object const& operator>> (msgpack::object const& o, unsigned long long& v) +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, unsigned long long& v) const { v = type::detail::convert_integer(o); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, char v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, char v) const { o.pack_char(v); return o; } +}; - -template -inline msgpack::packer& operator<< (msgpack::packer& o, signed char v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, signed char v) const { o.pack_signed_char(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, signed short v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, signed short v) const { o.pack_short(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, signed int v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, signed int v) const { o.pack_int(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, signed long v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, signed long v) const { o.pack_long(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, signed long long v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, signed long long v) const { o.pack_long_long(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, unsigned char v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, unsigned char v) const { o.pack_unsigned_char(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, unsigned short v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, unsigned short v) const { o.pack_unsigned_short(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, unsigned int v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, unsigned int v) const { o.pack_unsigned_int(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, unsigned long v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, unsigned long v) const { o.pack_unsigned_long(v); return o; } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, unsigned long long v) +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, unsigned long long v) const { o.pack_unsigned_long_long(v); return o; } +}; -inline void operator<< (msgpack::object& o, char v) +template <> +struct object { + void operator()(msgpack::object& o, char v) const { type::detail::object_char(o, v); } +}; +template <> +struct object { + void operator()(msgpack::object& o, signed char v) const { + if (v < 0) { + o.type = msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v; + } + else { + o.type = msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v; + } + } +}; -inline void operator<< (msgpack::object& o, signed char v) -{ - if (v < 0) { - o.type = msgpack::type::NEGATIVE_INTEGER; - o.via.i64 = v; +template <> +struct object { + void operator()(msgpack::object& o, signed short v) const { + if (v < 0) { + o.type = msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v; + } + else { + o.type = msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v; + } } - else { - o.type = msgpack::type::POSITIVE_INTEGER; - o.via.u64 = v; - } -} +}; -inline void operator<< (msgpack::object& o, signed short v) -{ - if (v < 0) { - o.type = msgpack::type::NEGATIVE_INTEGER; - o.via.i64 = v; +template <> +struct object { + void operator()(msgpack::object& o, signed int v) const { + if (v < 0) { + o.type = msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v; + } + else { + o.type = msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v; + } } - else { - o.type = msgpack::type::POSITIVE_INTEGER; - o.via.u64 = v; - } -} +}; -inline void operator<< (msgpack::object& o, signed int v) -{ - if (v < 0) { - o.type = msgpack::type::NEGATIVE_INTEGER; - o.via.i64 = v; +template <> +struct object { + void operator()(msgpack::object& o, signed long v) const { + if (v < 0) { + o.type = msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v; + } + else { + o.type = msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v; + } } - else { - o.type = msgpack::type::POSITIVE_INTEGER; - o.via.u64 = v; - } -} +}; -inline void operator<< (msgpack::object& o, signed long v) -{ - if (v < 0) { - o.type = msgpack::type::NEGATIVE_INTEGER; - o.via.i64 = v; +template <> +struct object { + void operator()(msgpack::object& o, signed long long v) const { + if (v < 0) { + o.type = msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v; + } + else{ + o.type = msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v; + } } - else { - o.type = msgpack::type::POSITIVE_INTEGER; - o.via.u64 = v; - } -} +}; -inline void operator<< (msgpack::object& o, signed long long v) -{ - if (v < 0) { - o.type = msgpack::type::NEGATIVE_INTEGER; - o.via.i64 = v; - } - else{ - o.type = msgpack::type::POSITIVE_INTEGER; - o.via.u64 = v; - } -} - -inline void operator<< (msgpack::object& o, unsigned char v) +template <> +struct object { + void operator()(msgpack::object& o, unsigned char v) const { o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; } +}; -inline void operator<< (msgpack::object& o, unsigned short v) +template <> +struct object { + void operator()(msgpack::object& o, unsigned short v) const { o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; } +}; -inline void operator<< (msgpack::object& o, unsigned int v) +template <> +struct object { + void operator()(msgpack::object& o, unsigned int v) const { o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; } +}; -inline void operator<< (msgpack::object& o, unsigned long v) +template <> +struct object { + void operator()(msgpack::object& o, unsigned long v) const { o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; } +}; -inline void operator<< (msgpack::object& o, unsigned long long v) +template <> +struct object { + void operator()(msgpack::object& o, unsigned long long v) const { o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; } +}; - -inline void operator<< (msgpack::object::with_zone& o, char v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, char v) const { static_cast(o) << v; } +}; - -inline void operator<< (msgpack::object::with_zone& o, signed char v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, signed char v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, signed short v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, signed short v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, signed int v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, signed int v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, signed long v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, signed long v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, const signed long long& v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, const signed long long& v) const { static_cast(o) << v; } +}; - -inline void operator<< (msgpack::object::with_zone& o, unsigned char v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, unsigned char v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, unsigned short v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, unsigned short v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, unsigned int v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, unsigned int v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, unsigned long v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, unsigned long v) const { static_cast(o) << v; } +}; -inline void operator<< (msgpack::object::with_zone& o, const unsigned long long& v) +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, const unsigned long long& v) const { static_cast(o) << v; } +}; +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/int_fwd.hpp b/include/msgpack/adaptor/int_fwd.hpp deleted file mode 100644 index 891caa03..00000000 --- a/include/msgpack/adaptor/int_fwd.hpp +++ /dev/null @@ -1,100 +0,0 @@ -// -// 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){ - -msgpack::object const& operator>> (msgpack::object const& o, char& v); - -msgpack::object const& operator>> (msgpack::object const& o, signed char& v); -msgpack::object const& operator>> (msgpack::object const& o, signed short& v); -msgpack::object const& operator>> (msgpack::object const& o, signed int& v); -msgpack::object const& operator>> (msgpack::object const& o, signed long& v); -msgpack::object const& operator>> (msgpack::object const& o, signed long long& v); - -msgpack::object const& operator>> (msgpack::object const& o, unsigned char& v); -msgpack::object const& operator>> (msgpack::object const& o, unsigned short& v); -msgpack::object const& operator>> (msgpack::object const& o, unsigned int& v); -msgpack::object const& operator>> (msgpack::object const& o, unsigned long& v); -msgpack::object const& operator>> (msgpack::object const& o, unsigned long long& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, char v); - -template -msgpack::packer& operator<< (msgpack::packer& o, signed char v); -template -msgpack::packer& operator<< (msgpack::packer& o, signed short v); -template -msgpack::packer& operator<< (msgpack::packer& o, signed int v); -template -msgpack::packer& operator<< (msgpack::packer& o, signed long v); -template -msgpack::packer& operator<< (msgpack::packer& o, signed long long v); - -template -msgpack::packer& operator<< (msgpack::packer& o, unsigned char v); -template -msgpack::packer& operator<< (msgpack::packer& o, unsigned short v); -template -msgpack::packer& operator<< (msgpack::packer& o, unsigned int v); -template -msgpack::packer& operator<< (msgpack::packer& o, unsigned long v); -template -msgpack::packer& operator<< (msgpack::packer& o, unsigned long long v); - - -void operator<< (msgpack::object& o, char v); - -void operator<< (msgpack::object& o, signed char v); -void operator<< (msgpack::object& o, signed short v); -void operator<< (msgpack::object& o, signed int v); -void operator<< (msgpack::object& o, signed long v); -void operator<< (msgpack::object& o, signed long long v); - -void operator<< (msgpack::object& o, unsigned char v); -void operator<< (msgpack::object& o, unsigned short v); -void operator<< (msgpack::object& o, unsigned int v); -void operator<< (msgpack::object& o, unsigned long v); -void operator<< (msgpack::object& o, unsigned long long v); - -void operator<< (msgpack::object::with_zone& o, char v); - -void operator<< (msgpack::object::with_zone& o, signed char v); -void operator<< (msgpack::object::with_zone& o, signed short v); -void operator<< (msgpack::object::with_zone& o, signed int v); -void operator<< (msgpack::object::with_zone& o, signed long v); -void operator<< (msgpack::object::with_zone& o, const signed long long& v); - -void operator<< (msgpack::object::with_zone& o, unsigned char v); -void operator<< (msgpack::object::with_zone& o, unsigned short v); -void operator<< (msgpack::object::with_zone& o, unsigned int v); -void operator<< (msgpack::object::with_zone& o, unsigned long v); -void operator<< (msgpack::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 29c2fef2..49980d63 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -28,53 +28,61 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -template -inline msgpack::object const& operator>> (msgpack::object const& o, std::list& v) -{ - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - v.resize(o.via.array.size); - msgpack::object* p = o.via.array.ptr; - msgpack::object* const pend = o.via.array.ptr + o.via.array.size; - typename std::list::iterator it = v.begin(); - for(; p < pend; ++p, ++it) { - p->convert(*it); - } - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::list& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_array(size); - for(typename std::list::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(*it); - } - return o; -} +namespace adaptor { template -inline void operator<< (msgpack::object::with_zone& o, const std::list& v) -{ - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, std::list& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + v.resize(o.via.array.size); + msgpack::object* p = o.via.array.ptr; + msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + typename std::list::iterator it = v.begin(); + for(; p < pend; ++p, ++it) { + p->convert(*it); + } + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const std::list& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); - msgpack::object* const pend = p + size; - o.via.array.ptr = p; - o.via.array.size = size; - typename std::list::const_iterator it(v.begin()); - do { - *p = msgpack::object(*it, o.zone); - ++p; - ++it; - } while(p < pend); + o.pack_array(size); + for(typename std::list::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(*it); + } + return o; } -} +}; + +template +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const std::list& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); + msgpack::object* const pend = p + size; + o.via.array.ptr = p; + o.via.array.size = size; + typename std::list::const_iterator it(v.begin()); + do { + *p = msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/list_fwd.hpp b/include/msgpack/adaptor/list_fwd.hpp deleted file mode 100644 index 3da2fb47..00000000 --- a/include/msgpack/adaptor/list_fwd.hpp +++ /dev/null @@ -1,40 +0,0 @@ -// -// 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 -msgpack::object const& operator>> (msgpack::object const& o, std::list& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const std::list& v); -template -void operator<< (msgpack::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 f86fda4c..97cb4e3c 100644 --- a/include/msgpack/adaptor/map.hpp +++ b/include/msgpack/adaptor/map.hpp @@ -45,172 +45,186 @@ namespace detail { } //namespace type +namespace adaptor { template -inline msgpack::object const& operator>> (msgpack::object const& o, type::assoc_vector& v) -{ - if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } - v.resize(o.via.map.size); - msgpack::object_kv* p = o.via.map.ptr; - msgpack::object_kv* const pend = o.via.map.ptr + o.via.map.size; - std::pair* it(&v.front()); - for(; p < pend; ++p, ++it) { - p->key.convert(it->first); - p->val.convert(it->second); - } - std::sort(v.begin(), v.end(), type::detail::pair_first_less()); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const type::assoc_vector& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_map(size); - for(typename type::assoc_vector::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(it->first); - o.pack(it->second); - } - return o; -} - -template -inline void operator<< (msgpack::object::with_zone& o, const type::assoc_vector& v) -{ - o.type = msgpack::type::MAP; - if(v.empty()) { - o.via.map.ptr = nullptr; - o.via.map.size = 0; - } else { - uint32_t size = checked_get_container_size(v.size()); - msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); - msgpack::object_kv* const pend = p + size; - o.via.map.ptr = p; - o.via.map.size = size; - typename type::assoc_vector::const_iterator it(v.begin()); - do { - p->key = msgpack::object(it->first, o.zone); - p->val = msgpack::object(it->second, o.zone); - ++p; - ++it; - } while(p < pend); - } -} - - -template -inline msgpack::object const& operator>> (msgpack::object const& o, std::map& v) -{ - if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } - msgpack::object_kv* p(o.via.map.ptr); - msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); - std::map tmp; - for(; p != pend; ++p) { - K key; - p->key.convert(key); - typename std::map::iterator it(tmp.lower_bound(key)); - if(it != tmp.end() && !(key < it->first)) { +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, type::assoc_vector& v) const { + if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } + v.resize(o.via.map.size); + msgpack::object_kv* p = o.via.map.ptr; + msgpack::object_kv* const pend = o.via.map.ptr + o.via.map.size; + std::pair* it(&v.front()); + for(; p < pend; ++p, ++it) { + p->key.convert(it->first); p->val.convert(it->second); + } + std::sort(v.begin(), v.end(), type::detail::pair_first_less()); + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const type::assoc_vector& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.pack_map(size); + for(typename type::assoc_vector::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(it->first); + o.pack(it->second); + } + return o; + } +}; + +template +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const type::assoc_vector& v) const { + o.type = msgpack::type::MAP; + if(v.empty()) { + o.via.map.ptr = nullptr; + o.via.map.size = 0; } else { - V val; - p->val.convert(val); - tmp.insert(it, std::pair(key, val)); + uint32_t size = checked_get_container_size(v.size()); + msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); + msgpack::object_kv* const pend = p + size; + o.via.map.ptr = p; + o.via.map.size = size; + typename type::assoc_vector::const_iterator it(v.begin()); + do { + p->key = msgpack::object(it->first, o.zone); + p->val = msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); } } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::map& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_map(size); - for(typename std::map::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(it->first); - o.pack(it->second); - } - return o; -} +}; template -inline void operator<< (msgpack::object::with_zone& o, const std::map& v) -{ - o.type = msgpack::type::MAP; - if(v.empty()) { - o.via.map.ptr = nullptr; - o.via.map.size = 0; - } else { +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, std::map& v) const { + if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } + msgpack::object_kv* p(o.via.map.ptr); + msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); + std::map tmp; + for(; p != pend; ++p) { + K key; + p->key.convert(key); + typename std::map::iterator it(tmp.lower_bound(key)); + if(it != tmp.end() && !(key < it->first)) { + p->val.convert(it->second); + } else { + V val; + p->val.convert(val); + tmp.insert(it, std::pair(key, val)); + } + } + tmp.swap(v); + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const std::map& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); - msgpack::object_kv* const pend = p + size; - o.via.map.ptr = p; - o.via.map.size = size; - typename std::map::const_iterator it(v.begin()); - do { - p->key = msgpack::object(it->first, o.zone); - p->val = msgpack::object(it->second, o.zone); - ++p; - ++it; - } while(p < pend); + o.pack_map(size); + for(typename std::map::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(it->first); + o.pack(it->second); + } + return o; } -} +}; + +template +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const std::map& v) const { + o.type = msgpack::type::MAP; + if(v.empty()) { + o.via.map.ptr = nullptr; + o.via.map.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); + msgpack::object_kv* const pend = p + size; + o.via.map.ptr = p; + o.via.map.size = size; + typename std::map::const_iterator it(v.begin()); + do { + p->key = msgpack::object(it->first, o.zone); + p->val = msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; template -inline msgpack::object const& operator>> (msgpack::object const& o, std::multimap& v) -{ - if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } - msgpack::object_kv* p(o.via.map.ptr); - msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); - std::multimap tmp; - for(; p != pend; ++p) { - std::pair value; - p->key.convert(value.first); - p->val.convert(value.second); - tmp.insert(value); +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, std::multimap& v) const { + if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } + msgpack::object_kv* p(o.via.map.ptr); + msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); + std::multimap tmp; + for(; p != pend; ++p) { + std::pair value; + p->key.convert(value.first); + p->val.convert(value.second); + tmp.insert(value); + } + tmp.swap(v); + return o; } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::multimap& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_map(size); - for(typename std::multimap::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(it->first); - o.pack(it->second); - } - return o; -} +}; template -inline void operator<< (msgpack::object::with_zone& o, const std::multimap& v) -{ - o.type = msgpack::type::MAP; - if(v.empty()) { - o.via.map.ptr = nullptr; - o.via.map.size = 0; - } else { +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const std::multimap& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); - msgpack::object_kv* const pend = p + size; - o.via.map.ptr = p; - o.via.map.size = size; - typename std::multimap::const_iterator it(v.begin()); - do { - p->key = msgpack::object(it->first, o.zone); - p->val = msgpack::object(it->second, o.zone); - ++p; - ++it; - } while(p < pend); + o.pack_map(size); + for(typename std::multimap::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(it->first); + o.pack(it->second); + } + return o; } -} +}; + +template +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const std::multimap& v) const { + o.type = msgpack::type::MAP; + if(v.empty()) { + o.via.map.ptr = nullptr; + o.via.map.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); + msgpack::object_kv* const pend = p + size; + o.via.map.ptr = p; + o.via.map.size = size; + typename std::multimap::const_iterator it(v.begin()); + do { + p->key = msgpack::object(it->first, o.zone); + p->val = msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/map_fwd.hpp b/include/msgpack/adaptor/map_fwd.hpp deleted file mode 100644 index 98148a34..00000000 --- a/include/msgpack/adaptor/map_fwd.hpp +++ /dev/null @@ -1,69 +0,0 @@ -// -// 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 -msgpack::object const& operator>> (msgpack::object const& o, type::assoc_vector& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const type::assoc_vector& v); -template -void operator<< (msgpack::object::with_zone& o, const type::assoc_vector& v); - -template -msgpack::object const& operator>> (msgpack::object const& o, std::map& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const std::map& v); -template -void operator<< (msgpack::object::with_zone& o, const std::map& v); - -template -msgpack::object const& operator>> (msgpack::object const& o, std::multimap& v); -template -msgpack::packer& operator<< (msgpack::packer& o, const std::multimap& v); -template -void operator<< (msgpack::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 deleted file mode 100644 index 12ea8e9b..00000000 --- a/include/msgpack/adaptor/msgpack_tuple_fwd.hpp +++ /dev/null @@ -1,29 +0,0 @@ -// -// 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 91de1314..f6d2bfa7 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" namespace msgpack { @@ -31,28 +31,40 @@ struct nil { }; } // namespace type +namespace adaptor { -inline msgpack::object const& operator>> (msgpack::object const& o, type::nil&) -{ - if(o.type != msgpack::type::NIL) { throw msgpack::type_error(); } - return o; -} +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, type::nil&) const { + if(o.type != msgpack::type::NIL) { throw msgpack::type_error(); } + return o; + } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const type::nil&) -{ - o.pack_nil(); - return o; -} +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const type::nil&) const { + o.pack_nil(); + return o; + } +}; -inline void operator<< (msgpack::object& o, type::nil) -{ - o.type = msgpack::type::NIL; -} +template <> +struct object { + void operator()(msgpack::object& o, type::nil) const { + o.type = msgpack::type::NIL; + } +}; -inline void operator<< (msgpack::object::with_zone& o, type::nil v) - { static_cast(o) << v; } +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, type::nil v) const { + static_cast(o) << v; + } +}; +} // namespace adaptror template <> inline void msgpack::object::as() const @@ -61,6 +73,7 @@ inline void msgpack::object::as() const convert(v); } + } // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/nil_fwd.hpp b/include/msgpack/adaptor/nil_fwd.hpp deleted file mode 100644 index 83459321..00000000 --- a/include/msgpack/adaptor/nil_fwd.hpp +++ /dev/null @@ -1,51 +0,0 @@ -// -// 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 - - -msgpack::object const& operator>> (msgpack::object const& o, type::nil&); - -template -msgpack::packer& operator<< (msgpack::packer& o, const type::nil&); - -void operator<< (msgpack::object& o, type::nil); - -void operator<< (msgpack::object::with_zone& o, type::nil v); - -template <> -inline void msgpack::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 8714c0b2..f6556060 100644 --- a/include/msgpack/adaptor/pair.hpp +++ b/include/msgpack/adaptor/pair.hpp @@ -19,42 +19,50 @@ #define MSGPACK_TYPE_PAIR_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -template -inline msgpack::object const& operator>> (msgpack::object const& o, std::pair& v) -{ - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if(o.via.array.size != 2) { throw msgpack::type_error(); } - o.via.array.ptr[0].convert(v.first); - o.via.array.ptr[1].convert(v.second); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::pair& v) -{ - o.pack_array(2); - o.pack(v.first); - o.pack(v.second); - return o; -} +namespace adaptor { template -inline void operator<< (msgpack::object::with_zone& o, const std::pair& v) -{ - o.type = msgpack::type::ARRAY; - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*2)); - o.via.array.ptr = p; - o.via.array.size = 2; - p[0] = msgpack::object(v.first, o.zone); - p[1] = msgpack::object(v.second, o.zone); -} +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, std::pair& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if(o.via.array.size != 2) { throw msgpack::type_error(); } + o.via.array.ptr[0].convert(v.first); + o.via.array.ptr[1].convert(v.second); + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const std::pair& v) const { + o.pack_array(2); + o.pack(v.first); + o.pack(v.second); + return o; + } +}; + +template +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const std::pair& v) const { + o.type = msgpack::type::ARRAY; + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*2)); + o.via.array.ptr = p; + o.via.array.size = 2; + p[0] = msgpack::object(v.first, o.zone); + p[1] = msgpack::object(v.second, o.zone); + } +}; + +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/pair_fwd.hpp b/include/msgpack/adaptor/pair_fwd.hpp deleted file mode 100644 index deea93d1..00000000 --- a/include/msgpack/adaptor/pair_fwd.hpp +++ /dev/null @@ -1,42 +0,0 @@ -// -// 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 -msgpack::object const& operator>> (msgpack::object const& o, std::pair& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::pair& v); - -template -void operator<< (msgpack::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 3ff23020..db96ccaf 100644 --- a/include/msgpack/adaptor/raw.hpp +++ b/include/msgpack/adaptor/raw.hpp @@ -19,8 +19,8 @@ #define MSGPACK_TYPE_RAW_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object_fwd.hpp" -#include +#include "msgpack/adaptor/adaptor_base.hpp" +#include #include namespace msgpack { @@ -61,38 +61,50 @@ struct raw_ref { } }; -} // namespace type +} // namespace type +namespace adaptor { -inline msgpack::object const& operator>> (msgpack::object const& o, msgpack::type::raw_ref& v) -{ - if(o.type != msgpack::type::BIN) { throw msgpack::type_error(); } - v.ptr = o.via.bin.ptr; - v.size = o.via.bin.size; - return o; -} +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, msgpack::type::raw_ref& v) const { + if(o.type != msgpack::type::BIN) { throw msgpack::type_error(); } + v.ptr = o.via.bin.ptr; + v.size = o.via.bin.size; + return o; + } +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const msgpack::type::raw_ref& v) -{ - o.pack_bin(v.size); - o.pack_bin_body(v.ptr, v.size); - return o; -} +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const msgpack::type::raw_ref& v) const { + o.pack_bin(v.size); + o.pack_bin_body(v.ptr, v.size); + return o; + } +}; -inline void operator<< (msgpack::object& o, const msgpack::type::raw_ref& v) -{ - o.type = msgpack::type::BIN; - o.via.bin.ptr = v.ptr; - o.via.bin.size = v.size; -} +template <> +struct object { + void operator()(msgpack::object& o, const msgpack::type::raw_ref& v) const { + o.type = msgpack::type::BIN; + o.via.bin.ptr = v.ptr; + o.via.bin.size = v.size; + } +}; -inline void operator<< (msgpack::object::with_zone& o, const msgpack::type::raw_ref& v) - { static_cast(o) << v; } +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, const msgpack::type::raw_ref& v) const { + static_cast(o) << v; + } +}; +} // namespace adaptor -} // MSGPACK_API_VERSION_NAMESPACE(v1) +} // MSGPACK_API_VERSION_NAMESPACE(v1) -} // namespace msgpack +} // namespace msgpack #endif // MSGPACK_TYPE_RAW_HPP diff --git a/include/msgpack/adaptor/raw_fwd.hpp b/include/msgpack/adaptor/raw_fwd.hpp deleted file mode 100644 index 9441756c..00000000 --- a/include/msgpack/adaptor/raw_fwd.hpp +++ /dev/null @@ -1,50 +0,0 @@ -// -// 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 - - -msgpack::object const& operator>> (msgpack::object const& o, type::raw_ref& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const type::raw_ref& v); - -void operator<< (msgpack::object& o, const type::raw_ref& v); - -void operator<< (msgpack::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 8c2aebcb..a1b41e2f 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -28,104 +28,115 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -template -inline msgpack::object const& operator>> (msgpack::object const& o, std::set& v) -{ - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - msgpack::object* p = o.via.array.ptr + o.via.array.size; - msgpack::object* const pbegin = o.via.array.ptr; - std::set tmp; - while(p > pbegin) { - --p; - tmp.insert(p->as()); - } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::set& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_array(size); - for(typename std::set::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(*it); - } - return o; -} +namespace adaptor { template -inline void operator<< (msgpack::object::with_zone& o, const std::set& v) -{ - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, std::set& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + msgpack::object* p = o.via.array.ptr + o.via.array.size; + msgpack::object* const pbegin = o.via.array.ptr; + std::set tmp; + while(p > pbegin) { + --p; + tmp.insert(p->as()); + } + tmp.swap(v); + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const std::set& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); - msgpack::object* const pend = p + size; - o.via.array.ptr = p; - o.via.array.size = size; - typename std::set::const_iterator it(v.begin()); - do { - *p = msgpack::object(*it, o.zone); - ++p; - ++it; - } while(p < pend); + o.pack_array(size); + for(typename std::set::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(*it); + } + return o; } -} - +}; template -inline msgpack::object const& operator>> (msgpack::object const& o, std::multiset& v) -{ - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - msgpack::object* p = o.via.array.ptr + o.via.array.size; - msgpack::object* const pbegin = o.via.array.ptr; - std::multiset tmp; - while(p > pbegin) { - --p; - tmp.insert(p->as()); +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const std::set& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); + msgpack::object* const pend = p + size; + o.via.array.ptr = p; + o.via.array.size = size; + typename std::set::const_iterator it(v.begin()); + do { + *p = msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::multiset& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_array(size); - for(typename std::multiset::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(*it); - } - return o; -} +}; template -inline void operator<< (msgpack::object::with_zone& o, const std::multiset& v) -{ - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, std::multiset& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + msgpack::object* p = o.via.array.ptr + o.via.array.size; + msgpack::object* const pbegin = o.via.array.ptr; + std::multiset tmp; + while(p > pbegin) { + --p; + tmp.insert(p->as()); + } + tmp.swap(v); + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const std::multiset& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); - msgpack::object* const pend = p + size; - o.via.array.ptr = p; - o.via.array.size = size; - typename std::multiset::const_iterator it(v.begin()); - do { - *p = msgpack::object(*it, o.zone); - ++p; - ++it; - } while(p < pend); + o.pack_array(size); + for(typename std::multiset::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(*it); + } + return o; } -} +}; + +template +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const std::multiset& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); + msgpack::object* const pend = p + size; + o.via.array.ptr = p; + o.via.array.size = size; + typename std::multiset::const_iterator it(v.begin()); + do { + *p = msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/set_fwd.hpp b/include/msgpack/adaptor/set_fwd.hpp deleted file mode 100644 index da48db58..00000000 --- a/include/msgpack/adaptor/set_fwd.hpp +++ /dev/null @@ -1,52 +0,0 @@ -// -// 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 -msgpack::object const& operator>> (msgpack::object const& o, std::set& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::set& v); - -template -void operator<< (msgpack::object::with_zone& o, const std::set& v); - -template -msgpack::object const& operator>> (msgpack::object const& o, std::multiset& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::multiset& v); - -template -void operator<< (msgpack::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 bbf20e98..4472137b 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -28,48 +28,60 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -inline msgpack::object const& operator>> (msgpack::object const& o, std::string& v) -{ - switch (o.type) { - case msgpack::type::BIN: - v.assign(o.via.bin.ptr, o.via.bin.size); - break; - case msgpack::type::STR: - v.assign(o.via.str.ptr, o.via.str.size); - break; - default: - throw msgpack::type_error(); - break; +namespace adaptor { + +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, std::string& v) const { + switch (o.type) { + case msgpack::type::BIN: + v.assign(o.via.bin.ptr, o.via.bin.size); + break; + case msgpack::type::STR: + v.assign(o.via.str.ptr, o.via.str.size); + break; + default: + throw msgpack::type_error(); + break; + } + return o; } - return o; -} +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::string& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_str(size); - o.pack_str_body(v.data(), size); - return o; -} +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, const std::string& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.pack_str(size); + o.pack_str_body(v.data(), size); + return o; + } +}; -inline void operator<< (msgpack::object::with_zone& o, const std::string& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.type = msgpack::type::STR; - char* ptr = static_cast(o.zone.allocate_align(size)); - o.via.str.ptr = ptr; - o.via.str.size = size; - std::memcpy(ptr, v.data(), v.size()); -} +template <> +struct object { + void operator()(msgpack::object& o, const std::string& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = msgpack::type::STR; + o.via.str.ptr = v.data(); + o.via.str.size = size; + } +}; -inline void operator<< (msgpack::object& o, const std::string& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.type = msgpack::type::STR; - o.via.str.ptr = v.data(); - o.via.str.size = size; -} +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, const std::string& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = msgpack::type::STR; + char* ptr = static_cast(o.zone.allocate_align(size)); + o.via.str.ptr = ptr; + o.via.str.size = size; + std::memcpy(ptr, v.data(), v.size()); + } +}; + +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/string_fwd.hpp b/include/msgpack/adaptor/string_fwd.hpp deleted file mode 100644 index 6938b338..00000000 --- a/include/msgpack/adaptor/string_fwd.hpp +++ /dev/null @@ -1,42 +0,0 @@ -// -// 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) { - -msgpack::object const& operator>> (msgpack::object const& o, std::string& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::string& v); - -void operator<< (msgpack::object::with_zone& o, const std::string& v); - -void operator<< (msgpack::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 8c438c66..9d07430a 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) @@ -47,115 +47,126 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -template -inline msgpack::object const& operator>> (msgpack::object const& o, MSGPACK_STD_TR1::unordered_map& v) -{ - if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } - msgpack::object_kv* p(o.via.map.ptr); - msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); - MSGPACK_STD_TR1::unordered_map tmp; - for(; p != pend; ++p) { - K key; - p->key.convert(key); - p->val.convert(tmp[key]); - } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const MSGPACK_STD_TR1::unordered_map& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_map(size); - for(typename MSGPACK_STD_TR1::unordered_map::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(it->first); - o.pack(it->second); - } - return o; -} +namespace adaptor { template -inline void operator<< (msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_map& v) -{ - o.type = msgpack::type::MAP; - if(v.empty()) { - o.via.map.ptr = nullptr; - o.via.map.size = 0; - } else { +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, MSGPACK_STD_TR1::unordered_map& v) const { + if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } + msgpack::object_kv* p(o.via.map.ptr); + msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); + MSGPACK_STD_TR1::unordered_map tmp; + for(; p != pend; ++p) { + K key; + p->key.convert(key); + p->val.convert(tmp[key]); + } + tmp.swap(v); + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const MSGPACK_STD_TR1::unordered_map& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); - msgpack::object_kv* const pend = p + size; - o.via.map.ptr = p; - o.via.map.size = size; - typename MSGPACK_STD_TR1::unordered_map::const_iterator it(v.begin()); - do { - p->key = msgpack::object(it->first, o.zone); - p->val = msgpack::object(it->second, o.zone); - ++p; - ++it; - } while(p < pend); + o.pack_map(size); + for(typename MSGPACK_STD_TR1::unordered_map::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(it->first); + o.pack(it->second); + } + return o; } -} - +}; template -inline msgpack::object const& operator>> (msgpack::object const& o, MSGPACK_STD_TR1::unordered_multimap& v) -{ - if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } - msgpack::object_kv* p(o.via.map.ptr); - msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); - MSGPACK_STD_TR1::unordered_multimap tmp; - for(; p != pend; ++p) { - std::pair value; - p->key.convert(value.first); - p->val.convert(value.second); - tmp.insert(value); +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_map& v) const { + o.type = msgpack::type::MAP; + if(v.empty()) { + o.via.map.ptr = nullptr; + o.via.map.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); + msgpack::object_kv* const pend = p + size; + o.via.map.ptr = p; + o.via.map.size = size; + typename MSGPACK_STD_TR1::unordered_map::const_iterator it(v.begin()); + do { + p->key = msgpack::object(it->first, o.zone); + p->val = msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const MSGPACK_STD_TR1::unordered_multimap& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_map(size); - for(typename MSGPACK_STD_TR1::unordered_multimap::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(it->first); - o.pack(it->second); - } - return o; -} +}; template -inline void operator<< (msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multimap& v) -{ - o.type = msgpack::type::MAP; - if(v.empty()) { - o.via.map.ptr = nullptr; - o.via.map.size = 0; - } else { +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, MSGPACK_STD_TR1::unordered_multimap& v) const { + if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } + msgpack::object_kv* p(o.via.map.ptr); + msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); + MSGPACK_STD_TR1::unordered_multimap tmp; + for(; p != pend; ++p) { + std::pair value; + p->key.convert(value.first); + p->val.convert(value.second); + tmp.insert(value); + } + tmp.swap(v); + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const MSGPACK_STD_TR1::unordered_multimap& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); - msgpack::object_kv* const pend = p + size; - o.via.map.ptr = p; - o.via.map.size = size; - typename MSGPACK_STD_TR1::unordered_multimap::const_iterator it(v.begin()); - do { - p->key = msgpack::object(it->first, o.zone); - p->val = msgpack::object(it->second, o.zone); - ++p; - ++it; - } while(p < pend); + o.pack_map(size); + for(typename MSGPACK_STD_TR1::unordered_multimap::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(it->first); + o.pack(it->second); + } + return o; } -} +}; -} // MSGPACK_API_VERSION_NAMESPACE(v1) +template +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multimap& v) const { + o.type = msgpack::type::MAP; + if(v.empty()) { + o.via.map.ptr = nullptr; + o.via.map.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); + msgpack::object_kv* const pend = p + size; + o.via.map.ptr = p; + o.via.map.size = size; + typename MSGPACK_STD_TR1::unordered_multimap::const_iterator it(v.begin()); + do { + p->key = msgpack::object(it->first, o.zone); + p->val = msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; -} // namespace msgpack +} // namespace adaptor + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack #undef MSGPACK_STD_TR1 diff --git a/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp b/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp deleted file mode 100644 index e7edbd8d..00000000 --- a/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp +++ /dev/null @@ -1,75 +0,0 @@ -// -// 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_UNORDERED_MAP -#include -#define MSGPACK_STD_TR1 std - -#else // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) - -#if __GNUC__ >= 4 - -#define MSGPACK_HAS_STD_TR1_UNORDERED_MAP - -#include -#define MSGPACK_STD_TR1 std::tr1 - -#endif // __GNUC__ >= 4 - -#endif // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) - -#if defined(MSGPACK_STD_TR1) - -namespace msgpack { - -MSGPACK_API_VERSION_NAMESPACE(v1) { - -template -msgpack::object const& operator>> (msgpack::object const& o, MSGPACK_STD_TR1::unordered_map& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const MSGPACK_STD_TR1::unordered_map& v); - -template -void operator<< (msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_map& v); - -template -msgpack::object const& operator>> (msgpack::object const& o, MSGPACK_STD_TR1::unordered_multimap& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const MSGPACK_STD_TR1::unordered_multimap& v); - -template -void operator<< (msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multimap& v); - -} // MSGPACK_API_VERSION_NAMESPACE(v1) - -} // namespace msgpack - -#undef MSGPACK_STD_TR1 - -#endif // 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 958dd20f..25582da7 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) @@ -47,108 +47,120 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -template -inline msgpack::object const& operator>> (msgpack::object const& o, MSGPACK_STD_TR1::unordered_set& v) -{ - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - msgpack::object* p = o.via.array.ptr + o.via.array.size; - msgpack::object* const pbegin = o.via.array.ptr; - MSGPACK_STD_TR1::unordered_set tmp; - while(p > pbegin) { - --p; - tmp.insert(p->as()); - } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const MSGPACK_STD_TR1::unordered_set& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_array(size); - for(typename MSGPACK_STD_TR1::unordered_set::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(*it); - } - return o; -} +namespace adaptor { template -inline void operator<< (msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_set& v) -{ - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, MSGPACK_STD_TR1::unordered_set& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + msgpack::object* p = o.via.array.ptr + o.via.array.size; + msgpack::object* const pbegin = o.via.array.ptr; + MSGPACK_STD_TR1::unordered_set tmp; + while(p > pbegin) { + --p; + tmp.insert(p->as()); + } + tmp.swap(v); + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const MSGPACK_STD_TR1::unordered_set& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); - msgpack::object* const pend = p + size; - o.via.array.ptr = p; - o.via.array.size = size; - typename MSGPACK_STD_TR1::unordered_set::const_iterator it(v.begin()); - do { - *p = msgpack::object(*it, o.zone); - ++p; - ++it; - } while(p < pend); - } -} - - -template -inline msgpack::object const& operator>> (msgpack::object const& o, MSGPACK_STD_TR1::unordered_multiset& v) -{ - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - msgpack::object* p = o.via.array.ptr + o.via.array.size; - msgpack::object* const pbegin = o.via.array.ptr; - MSGPACK_STD_TR1::unordered_multiset tmp; - while(p > pbegin) { - --p; - tmp.insert(p->as()); - } - tmp.swap(v); - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const MSGPACK_STD_TR1::unordered_multiset& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_array(size); - for(typename MSGPACK_STD_TR1::unordered_multiset::const_iterator it(v.begin()), it_end(v.end()); + o.pack_array(size); + for(typename MSGPACK_STD_TR1::unordered_set::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it) { - o.pack(*it); + o.pack(*it); + } + return o; } - return o; -} +}; template -inline void operator<< (msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multiset& v) -{ - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { - uint32_t size = checked_get_container_size(v.size()); - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); - msgpack::object* const pend = p + size; - o.via.array.ptr = p; - o.via.array.size = size; - typename MSGPACK_STD_TR1::unordered_multiset::const_iterator it(v.begin()); - do { - *p = msgpack::object(*it, o.zone); - ++p; - ++it; - } while(p < pend); +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_set& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); + msgpack::object* const pend = p + size; + o.via.array.ptr = p; + o.via.array.size = size; + typename MSGPACK_STD_TR1::unordered_set::const_iterator it(v.begin()); + do { + *p = msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } } -} +}; -} // MSGPACK_API_VERSION_NAMESPACE(v1) -} // namespace msgpack +template +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, MSGPACK_STD_TR1::unordered_multiset& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + msgpack::object* p = o.via.array.ptr + o.via.array.size; + msgpack::object* const pbegin = o.via.array.ptr; + MSGPACK_STD_TR1::unordered_multiset tmp; + while(p > pbegin) { + --p; + tmp.insert(p->as()); + } + tmp.swap(v); + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const MSGPACK_STD_TR1::unordered_multiset& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.pack_array(size); + for(typename MSGPACK_STD_TR1::unordered_multiset::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(*it); + } + return o; + } +}; + +template +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multiset& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); + msgpack::object* const pend = p + size; + o.via.array.ptr = p; + o.via.array.size = size; + typename MSGPACK_STD_TR1::unordered_multiset::const_iterator it(v.begin()); + do { + *p = msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack #undef MSGPACK_STD_TR1 diff --git a/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp b/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp deleted file mode 100644 index fa06e8c4..00000000 --- a/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp +++ /dev/null @@ -1,75 +0,0 @@ -// -// 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_UNORDERED_SET -#include -#define MSGPACK_STD_TR1 std - -#else // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) - -#if __GNUC__ >= 4 - -#define MSGPACK_HAS_STD_TR1_UNORDERED_SET - -#include -#define MSGPACK_STD_TR1 std::tr1 - -#endif // __GNUC__ >= 4 - -#endif // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) - -#if defined(MSGPACK_STD_TR1) - -namespace msgpack { - -MSGPACK_API_VERSION_NAMESPACE(v1) { - -template -msgpack::object const& operator>> (msgpack::object const& o, MSGPACK_STD_TR1::unordered_set& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const MSGPACK_STD_TR1::unordered_set& v); - -template -void operator<< (msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_set& v); - -template -msgpack::object const& operator>> (msgpack::object const& o, MSGPACK_STD_TR1::unordered_multiset& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const MSGPACK_STD_TR1::unordered_multiset& v); - -template -void operator<< (msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multiset& v); - -} // MSGPACK_API_VERSION_NAMESPACE(v1) - -} // namespace msgpack - -#undef MSGPACK_STD_TR1 - -#endif // 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 e5f0de4b..1ae30197 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -28,60 +28,68 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -template -inline msgpack::object const& operator>> (msgpack::object const& o, std::vector& v) -{ - if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - v.resize(o.via.array.size); - if(o.via.array.size > 0) { - msgpack::object* p = o.via.array.ptr; - msgpack::object* const pend = o.via.array.ptr + o.via.array.size; - T* it = &v[0]; - do { - p->convert(*it); - ++p; - ++it; - } while(p < pend); - } - return o; -} - -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::vector& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_array(size); - for(typename std::vector::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(*it); - } - return o; -} +namespace adaptor { template -inline void operator<< (msgpack::object::with_zone& o, const std::vector& v) -{ - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, std::vector& v) const { + if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + v.resize(o.via.array.size); + if(o.via.array.size > 0) { + msgpack::object* p = o.via.array.ptr; + msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + typename std::vector::iterator it = v.begin(); + do { + p->convert(*it); + ++p; + ++it; + } while(p < pend); + } + return o; + } +}; + +template +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const std::vector& v) const { uint32_t size = checked_get_container_size(v.size()); - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); - msgpack::object* const pend = p + size; - o.via.array.ptr = p; - o.via.array.size = size; - typename std::vector::const_iterator it(v.begin()); - do { - *p = msgpack::object(*it, o.zone); - ++p; - ++it; - } while(p < pend); + o.pack_array(size); + for(typename std::vector::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(*it); + } + return o; } -} +}; -} // MSGPACK_API_VERSION_NAMESPACE(v1) +template +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const std::vector& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + uint32_t size = checked_get_container_size(v.size()); + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*size)); + msgpack::object* const pend = p + size; + o.via.array.ptr = p; + o.via.array.size = size; + typename std::vector::const_iterator it(v.begin()); + do { + *p = msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; -} // namespace msgpack +} // namespace adaptor + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack #endif // MSGPACK_TYPE_VECTOR_HPP diff --git a/include/msgpack/adaptor/vector_bool.hpp b/include/msgpack/adaptor/vector_bool.hpp index 93cbd736..7205ddc9 100644 --- a/include/msgpack/adaptor/vector_bool.hpp +++ b/include/msgpack/adaptor/vector_bool.hpp @@ -26,52 +26,62 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -inline msgpack::object const& operator>> (msgpack::object const& o, std::vector& v) -{ - if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } - if (o.via.array.size > 0) { - v.resize(o.via.array.size); - msgpack::object* p = o.via.array.ptr; - for (std::vector::iterator it = v.begin(), end = v.end(); - it != end; - ++it) { - *it = p->as(); - ++p; +namespace adaptor { + +template <> +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, std::vector& v) const { + if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + if (o.via.array.size > 0) { + v.resize(o.via.array.size); + msgpack::object* p = o.via.array.ptr; + for (std::vector::iterator it = v.begin(), end = v.end(); + it != end; + ++it) { + *it = p->as(); + ++p; + } + } + return o; + } +}; + +template <> +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const std::vector& v) const { + o.pack_array(v.size()); + for(std::vector::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(static_cast(*it)); + } + return o; + } +}; + +template <> +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const std::vector& v) const { + o.type = msgpack::type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*v.size())); + msgpack::object* const pend = p + v.size(); + o.via.array.ptr = p; + o.via.array.size = v.size(); + std::vector::const_iterator it(v.begin()); + do { + *p = msgpack::object(static_cast(*it), o.zone); + ++p; + ++it; + } while(p < pend); } } - return o; -} +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::vector& v) -{ - o.pack_array(v.size()); - for(std::vector::const_iterator it(v.begin()), it_end(v.end()); - it != it_end; ++it) { - o.pack(static_cast(*it)); - } - return o; -} - -inline void operator<< (msgpack::object::with_zone& o, const std::vector& v) -{ - o.type = msgpack::type::ARRAY; - if(v.empty()) { - o.via.array.ptr = nullptr; - o.via.array.size = 0; - } else { - msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(msgpack::object)*v.size())); - msgpack::object* const pend = p + v.size(); - o.via.array.ptr = p; - o.via.array.size = v.size(); - std::vector::const_iterator it(v.begin()); - do { - *p = object(static_cast(*it), o.zone); - ++p; - ++it; - } while(p < pend); - } -} +} // namespace adaptor } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/adaptor/vector_bool_fwd.hpp b/include/msgpack/adaptor/vector_bool_fwd.hpp deleted file mode 100644 index 17433c25..00000000 --- a/include/msgpack/adaptor/vector_bool_fwd.hpp +++ /dev/null @@ -1,40 +0,0 @@ -// -// MessagePack for C++ static resolution routine -// -// Copyright (C) 2015 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_BOOL_FWD_HPP -#define MSGPACK_TYPE_VECTOR_BOOL_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::with_zone& o, const std::vector& v); - -} // MSGPACK_API_VERSION_NAMESPACE(v1) - -} // namespace msgpack - -#endif // MSGPACK_TYPE_VECTOR_BOOL_FWD_HPP diff --git a/include/msgpack/adaptor/vector_char.hpp b/include/msgpack/adaptor/vector_char.hpp index e4e1bc6f..c4226591 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_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" #include "msgpack/adaptor/check_container_size.hpp" #include @@ -28,54 +28,66 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -inline msgpack::object const& operator>> (msgpack::object const& o, std::vector& v) -{ - switch (o.type) { - case msgpack::type::BIN: - v.resize(o.via.bin.size); - std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size); - break; - case msgpack::type::STR: - v.resize(o.via.str.size); - std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size); - break; - default: - throw msgpack::type_error(); - break; +namespace adaptor { + +template <> +struct convert > { + msgpack::object const& operator()(msgpack::object const& o, std::vector& v) const { + switch (o.type) { + case msgpack::type::BIN: + v.resize(o.via.bin.size); + std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size); + break; + case msgpack::type::STR: + v.resize(o.via.str.size); + std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size); + break; + default: + throw msgpack::type_error(); + break; + } + return o; } - return o; -} +}; -template -inline msgpack::packer& operator<< (msgpack::packer& o, const std::vector& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.pack_bin(size); - o.pack_bin_body(&v.front(), size); +template <> +struct pack > { + template + msgpack::packer& operator()(msgpack::packer& o, const std::vector& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.pack_bin(size); + o.pack_bin_body(&v.front(), size); - return o; -} + return o; + } +}; -inline void operator<< (msgpack::object& o, const std::vector& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.type = msgpack::type::BIN; - o.via.bin.ptr = &v.front(); - o.via.bin.size = size; -} +template <> +struct object > { + void operator()(msgpack::object& o, const std::vector& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = msgpack::type::BIN; + o.via.bin.ptr = &v.front(); + o.via.bin.size = size; + } +}; -inline void operator<< (msgpack::object::with_zone& o, const std::vector& v) -{ - uint32_t size = checked_get_container_size(v.size()); - o.type = msgpack::type::BIN; - char* ptr = static_cast(o.zone.allocate_align(size)); - o.via.bin.ptr = ptr; - o.via.bin.size = size; - std::memcpy(ptr, &v.front(), size); -} +template <> +struct object_with_zone > { + void operator()(msgpack::object::with_zone& o, const std::vector& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = msgpack::type::BIN; + char* ptr = static_cast(o.zone.allocate_align(size)); + o.via.bin.ptr = ptr; + o.via.bin.size = size; + std::memcpy(ptr, &v.front(), size); + } +}; -} // MSGPACK_API_VERSION_NAMESPACE(v1) +} // namespace adaptor -} // namespace msgpack +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack #endif // MSGPACK_TYPE_VECTOR_CHAR_HPP diff --git a/include/msgpack/adaptor/vector_char_fwd.hpp b/include/msgpack/adaptor/vector_char_fwd.hpp deleted file mode 100644 index 7dcaf00f..00000000 --- a/include/msgpack/adaptor/vector_char_fwd.hpp +++ /dev/null @@ -1,42 +0,0 @@ -// -// 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) { - -msgpack::object const& operator>> (msgpack::object const& o, std::vector& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::vector& v); - -void operator<< (msgpack::object& o, const std::vector& v); - -void operator<< (msgpack::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 deleted file mode 100644 index 2da965cf..00000000 --- a/include/msgpack/adaptor/vector_fwd.hpp +++ /dev/null @@ -1,42 +0,0 @@ -// -// 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 -msgpack::object const& operator>> (msgpack::object const& o, std::vector& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const std::vector& v); - -template -void operator<< (msgpack::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/iterator.hpp b/include/msgpack/iterator.hpp index 7050e8d1..8ccd94e8 100644 --- a/include/msgpack/iterator.hpp +++ b/include/msgpack/iterator.hpp @@ -20,7 +20,7 @@ #define MSGPACK_ITERATOR_HPP #if !defined(MSGPACK_USE_CPP03) -#include +#include namespace msgpack { @@ -30,7 +30,7 @@ namespace msgpack inline const object_kv* begin(const object_map &map) { return map.ptr; } inline object_kv* end(object_map &map) { return map.ptr + map.size; } inline const object_kv* end(const object_map &map) { return map.ptr + map.size; } - + inline object* begin(object_array &array) { return array.ptr; } inline const object* begin(const object_array &array) { return array.ptr; } inline object* end(object_array &array) { return array.ptr + array.size; } diff --git a/include/msgpack/object.hpp b/include/msgpack/object.hpp index 2103eb49..ba95b55a 100644 --- a/include/msgpack/object.hpp +++ b/include/msgpack/object.hpp @@ -19,61 +19,21 @@ #define MSGPACK_OBJECT_HPP #include "msgpack/versioning.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_bool_fwd.hpp" -#include "msgpack/adaptor/vector_char_fwd.hpp" +#include "msgpack/adaptor/adaptor_base.hpp" -#if defined(MSGPACK_USE_CPP03) - -#include "msgpack/adaptor/tr1/unordered_map_fwd.hpp" -#include "msgpack/adaptor/tr1/unordered_set_fwd.hpp" - -#else // 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" -#include "adaptor/cpp11/unordered_map_fwd.hpp" -#include "adaptor/cpp11/unordered_set_fwd.hpp" - -#endif // defined(MSGPACK_USE_CPP03) - -#include +#include #include #include #include #include +#include namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { -struct object::with_zone : object { - with_zone(msgpack::zone& zone) : zone(zone) { } - msgpack::zone& zone; -private: - with_zone(); -}; - struct object::implicit_type { implicit_type(object const& o) : obj(o) { } ~implicit_type() { } @@ -85,49 +45,208 @@ private: msgpack::object const& obj; }; -inline msgpack::object const& operator>> (msgpack::object const& o, msgpack::object& v) -{ - v = o; +namespace detail { +template +struct packer_serializer { + static msgpack::packer& pack(msgpack::packer& o, const T& v) { + v.msgpack_pack(o); + return o; + } +}; +} // namespace detail + +// Adaptor functors' member functions definitions. +template +inline +msgpack::object const& +msgpack::adaptor::convert::operator()(msgpack::object const& o, T& v) const { + v.msgpack_unpack(o.convert()); return o; } template -inline msgpack::object const& operator>> (msgpack::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; +template +inline +msgpack::packer& +msgpack::adaptor::pack::operator()(msgpack::packer& o, T const& v) const { + return detail::packer_serializer::pack(o, v); } +template +inline +void +msgpack::adaptor::object_with_zone::operator()(msgpack::object::with_zone& o, T const& v) const { + v.msgpack_object(static_cast(&o), o.zone); +} + +// Adaptor functor specialization to object +namespace adaptor { + +template <> +struct convert { + msgpack::object const& operator()(msgpack::object const& o, msgpack::object& v) const { + v = o; + return o; + } +}; + +template <> +struct pack { + template + msgpack::packer& operator()(msgpack::packer& o, msgpack::object const& v) const { + switch(v.type) { + case msgpack::type::NIL: + o.pack_nil(); + return o; + + case msgpack::type::BOOLEAN: + if(v.via.boolean) { + o.pack_true(); + } else { + o.pack_false(); + } + return o; + + case msgpack::type::POSITIVE_INTEGER: + o.pack_uint64(v.via.u64); + return o; + + case msgpack::type::NEGATIVE_INTEGER: + o.pack_int64(v.via.i64); + return o; + + case msgpack::type::FLOAT: + o.pack_double(v.via.f64); + return o; + + case msgpack::type::STR: + o.pack_str(v.via.str.size); + o.pack_str_body(v.via.str.ptr, v.via.str.size); + return o; + + case msgpack::type::BIN: + o.pack_bin(v.via.bin.size); + o.pack_bin_body(v.via.bin.ptr, v.via.bin.size); + return o; + + case msgpack::type::EXT: + o.pack_ext(v.via.ext.size, v.via.ext.type()); + o.pack_ext_body(v.via.ext.data(), v.via.ext.size); + return o; + + case msgpack::type::ARRAY: + o.pack_array(v.via.array.size); + for(msgpack::object* p(v.via.array.ptr), + * const pend(v.via.array.ptr + v.via.array.size); + p < pend; ++p) { + msgpack::operator<<(o, *p); + } + return o; + + case msgpack::type::MAP: + o.pack_map(v.via.map.size); + for(msgpack::object_kv* p(v.via.map.ptr), + * const pend(v.via.map.ptr + v.via.map.size); + p < pend; ++p) { + msgpack::operator<<(o, p->key); + msgpack::operator<<(o, p->val); + } + return o; + + default: + throw msgpack::type_error(); + } + } +}; + +template <> +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, msgpack::object const& v) const { + o.type = v.type; + + switch(v.type) { + case msgpack::type::NIL: + case msgpack::type::BOOLEAN: + case msgpack::type::POSITIVE_INTEGER: + case msgpack::type::NEGATIVE_INTEGER: + case msgpack::type::FLOAT: + std::memcpy(&o.via, &v.via, sizeof(v.via)); + return; + + case msgpack::type::STR: { + char* ptr = static_cast(o.zone.allocate_align(v.via.str.size)); + o.via.str.ptr = ptr; + o.via.str.size = v.via.str.size; + std::memcpy(ptr, v.via.str.ptr, v.via.str.size); + return; + } + + case msgpack::type::BIN: { + char* ptr = static_cast(o.zone.allocate_align(v.via.bin.size)); + o.via.bin.ptr = ptr; + o.via.bin.size = v.via.bin.size; + std::memcpy(ptr, v.via.bin.ptr, v.via.bin.size); + return; + } + + case msgpack::type::EXT: { + char* ptr = static_cast(o.zone.allocate_align(v.via.ext.size + 1)); + o.via.ext.ptr = ptr; + o.via.ext.size = v.via.ext.size; + std::memcpy(ptr, v.via.ext.ptr, v.via.ext.size + 1); + return; + } + + case msgpack::type::ARRAY: + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(msgpack::object) * v.via.array.size)); + o.via.array.size = v.via.array.size; + for (msgpack::object + * po(o.via.array.ptr), + * pv(v.via.array.ptr), + * const pvend(v.via.array.ptr + v.via.array.size); + pv < pvend; + ++po, ++pv) { + new (po) msgpack::object(*pv, o.zone); + } + return; + + case msgpack::type::MAP: + o.via.map.ptr = (msgpack::object_kv*)o.zone.allocate_align(sizeof(msgpack::object_kv) * v.via.map.size); + o.via.map.size = v.via.map.size; + for(msgpack::object_kv + * po(o.via.map.ptr), + * pv(v.via.map.ptr), + * const pvend(v.via.map.ptr + v.via.map.size); + pv < pvend; + ++po, ++pv) { + msgpack::object_kv* kv = new (po) msgpack::object_kv; + new (&kv->key) msgpack::object(pv->key, o.zone); + new (&kv->val) msgpack::object(pv->val, o.zone); + } + return; + + default: + throw msgpack::type_error(); + } + + } +}; + +// Adaptor functor specialization to object::with_zone + +template <> +struct object_with_zone { + void operator()( + msgpack::object::with_zone& o, + msgpack::object::with_zone const& v) const { + o << static_cast(v); + } +}; + + +} // namespace adaptor + + // obsolete template class define : public Type { @@ -150,166 +269,7 @@ public: } }; -namespace detail { -template -struct packer_serializer { - static msgpack::packer& pack(msgpack::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 msgpack::packer& operator<< (msgpack::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 - // msgpack::packer& operator<< (msgpack::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 msgpack::packer& operator<< (msgpack::packer& o, const your_class& v) { - // // packing operation - // } - // } // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) - // } // namespace msgpack - // - v.msgpack_pack(o); - return o; - } -}; -} - -inline void operator<< (msgpack::object::with_zone& o, const msgpack::object& v) -{ - o.type = v.type; - - switch(v.type) { - case msgpack::type::NIL: - case msgpack::type::BOOLEAN: - case msgpack::type::POSITIVE_INTEGER: - case msgpack::type::NEGATIVE_INTEGER: - case msgpack::type::FLOAT: - std::memcpy(&o.via, &v.via, sizeof(v.via)); - return; - - case msgpack::type::STR: { - char* ptr = static_cast(o.zone.allocate_align(v.via.str.size)); - o.via.str.ptr = ptr; - o.via.str.size = v.via.str.size; - std::memcpy(ptr, v.via.str.ptr, v.via.str.size); - return; - } - - case msgpack::type::BIN: { - char* ptr = static_cast(o.zone.allocate_align(v.via.bin.size)); - o.via.bin.ptr = ptr; - o.via.bin.size = v.via.bin.size; - std::memcpy(ptr, v.via.bin.ptr, v.via.bin.size); - return; - } - - case msgpack::type::EXT: { - char* ptr = static_cast(o.zone.allocate_align(v.via.ext.size + 1)); - o.via.ext.ptr = ptr; - o.via.ext.size = v.via.ext.size; - std::memcpy(ptr, v.via.ext.ptr, v.via.ext.size + 1); - return; - } - - case msgpack::type::ARRAY: - o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object) * v.via.array.size)); - o.via.array.size = v.via.array.size; - for (msgpack::object - * po(o.via.array.ptr), - * pv(v.via.array.ptr), - * const pvend(v.via.array.ptr + v.via.array.size); - pv < pvend; - ++po, ++pv) { - new (po) msgpack::object(*pv, o.zone); - } - return; - - case msgpack::type::MAP: - o.via.map.ptr = (object_kv*)o.zone.allocate_align(sizeof(object_kv) * v.via.map.size); - o.via.map.size = v.via.map.size; - for(msgpack::object_kv - * po(o.via.map.ptr), - * pv(v.via.map.ptr), - * const pvend(v.via.map.ptr + v.via.map.size); - pv < pvend; - ++po, ++pv) { - object_kv* kv = new (po) object_kv; - new (&kv->key) msgpack::object(pv->key, o.zone); - new (&kv->val) msgpack::object(pv->val, o.zone); - } - return; - - default: - throw msgpack::type_error(); - } -} - -inline void operator<< (msgpack::object::with_zone& o, const msgpack::object::with_zone& v) -{ - return o << static_cast(v); -} - // deconvert operator -template -inline void operator<< (msgpack::object::with_zone& o, const T& v) -{ - // If you get a error 'const class your_class has no member named 'msgpack_object', - // 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) { - // void operator<< (object::with_zone& 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) { - // void operator<< (object::with_zone& 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: - // - // void operator<< (object::with_zone& o, const your_class& v) { - // // set object attributes using v. - // } - // } // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) - // } // namespace msgpack - // - v.msgpack_object(static_cast(&o), o.zone); -} template template @@ -452,42 +412,6 @@ inline object::object() template inline object::object(const T& v) { - // If you get a error 'no matching function call to - // operator<<(msgpack::v?::object::object(const T&) - // [with T = your_class]' - // - // 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) { - // void operator<< (object& 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) { - // void operator<< (object& 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: - // - // void operator<< (object& o, const your_class& v) { - // // set object attributes using v. - // } - // } // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) - // } // namespace msgpack - // msgpack::operator<<(*this, v); } diff --git a/include/msgpack/object_fwd.hpp b/include/msgpack/object_fwd.hpp index 7469f6f1..c84b5730 100644 --- a/include/msgpack/object_fwd.hpp +++ b/include/msgpack/object_fwd.hpp @@ -143,37 +143,12 @@ struct object_kv { msgpack::object val; }; -namespace detail { -template -struct packer_serializer; -} // namespace detail - -msgpack::object const& operator>> (msgpack::object const& o, msgpack::object& v); - -template -msgpack::object const& operator>> (msgpack::object const& o, T& v); - -template -void operator<< (msgpack::object::with_zone& o, const T& v); - -void operator<< (msgpack::object::with_zone& o, const msgpack::object& v); - -void operator<< (msgpack::object::with_zone& o, const msgpack::object::with_zone& v); - -template -class packer; - -template -msgpack::packer& operator<< (msgpack::packer& o, const msgpack::object& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const msgpack::object::with_zone& v); - -template -msgpack::packer& operator<< (msgpack::packer& o, const T& v); - -template -void operator<< (msgpack::object::with_zone& o, const T& v); +struct object::with_zone : object { + with_zone(msgpack::zone& zone) : zone(zone) { } + msgpack::zone& zone; +private: + with_zone(); +}; } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/pack.hpp b/include/msgpack/pack.hpp index dd5652fd..dc81271a 100644 --- a/include/msgpack/pack.hpp +++ b/include/msgpack/pack.hpp @@ -19,6 +19,7 @@ #define MSGPACK_PACK_HPP #include "msgpack/versioning.hpp" +#include "msgpack/cpp_config.hpp" #include #include @@ -80,16 +81,16 @@ public: packer& pack_array(uint32_t n); - packer& pack_map(uint32_t n); + packer& pack_map(uint32_t n); - packer& pack_str(uint32_t l); - packer& pack_str_body(const char* b, uint32_t l); + packer& pack_str(uint32_t l); + packer& pack_str_body(const char* b, uint32_t l); - packer& pack_bin(uint32_t l); - packer& pack_bin_body(const char* b, uint32_t l); + packer& pack_bin(uint32_t l); + packer& pack_bin_body(const char* b, uint32_t l); packer& pack_ext(size_t l, int8_t type); - packer& pack_ext_body(const char* b, uint32_t l); + packer& pack_ext_body(const char* b, uint32_t l); private: template @@ -119,11 +120,13 @@ private: private: packer(const packer&); packer& operator=(const packer&); + packer(); #else // defined(MSGPACK_USE_CPP03) +public: packer(const packer&) = delete; packer& operator=(const packer&) = delete; + packer() = delete; #endif // defined(MSGPACK_USE_CPP03) - packer(); }; @@ -139,14 +142,6 @@ inline void pack(Stream& s, const T& v) packer(s).pack(v); } -// serialize operator -template -inline msgpack::packer& operator<< (msgpack::packer& o, const T& v) -{ - return detail::packer_serializer::pack(o, v); -} - - #if defined(__LITTLE_ENDIAN__) template diff --git a/include/msgpack_fwd.hpp b/include/msgpack_fwd.hpp deleted file mode 100644 index b41cb1ae..00000000 --- a/include/msgpack_fwd.hpp +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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_FWD_HPP -#define MSGPACK_FWD_HPP - -#include "msgpack/versioning.hpp" -#include "msgpack/zone.hpp" -#include "msgpack/object_fwd.hpp" -#include "msgpack/iterator.hpp" -#include "msgpack/adaptor/define.hpp" -#include "msgpack/pack.hpp" - -#endif // MSGPACK_FWD_HPP diff --git a/preprocess b/preprocess index e25eff3f..5efab359 100755 --- a/preprocess +++ b/preprocess @@ -13,6 +13,5 @@ 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 677f2161..a960ea95 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -54,65 +54,38 @@ nobase_include_HEADERS = \ if ENABLE_CXX nobase_include_HEADERS += \ ../include/msgpack.hpp \ - ../include/msgpack_fwd.hpp \ + ../include/msgpack/adaptor/adaptor_base.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/check_container_size.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/cpp11/unordered_map.hpp \ - ../include/msgpack/adaptor/cpp11/unordered_map_fwd.hpp \ ../include/msgpack/adaptor/cpp11/unordered_set.hpp \ - ../include/msgpack/adaptor/cpp11/unordered_set_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_bool.hpp \ - ../include/msgpack/adaptor/vector_bool_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 \ diff --git a/test/convert.cpp b/test/convert.cpp index e0e30996..1ad27473 100644 --- a/test/convert.cpp +++ b/test/convert.cpp @@ -1,4 +1,4 @@ -#include +#include #include class enum_member { @@ -17,8 +17,6 @@ public: MSGPACK_ADD_ENUM(enum_member::flags_t); -#include - class compatibility { public: compatibility() : str1("default"), str2("default") { } diff --git a/test/msgpack_container.cpp b/test/msgpack_container.cpp index c9a7ce81..552d6d57 100644 --- a/test/msgpack_container.cpp +++ b/test/msgpack_container.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include @@ -38,8 +38,6 @@ public: MSGPACK_ADD_ENUM(TestEnumMemberClass::TestEnumType); -#include - using namespace std; const unsigned int kLoop = 1000; diff --git a/test/msgpack_cpp11.cpp b/test/msgpack_cpp11.cpp index 4c7df379..6dd187cb 100644 --- a/test/msgpack_cpp11.cpp +++ b/test/msgpack_cpp11.cpp @@ -1,4 +1,4 @@ -#include +#include #include @@ -29,8 +29,6 @@ public: MSGPACK_ADD_ENUM(TestEnumClassMemberClass::TestEnumClassType); -#include - using namespace std; const unsigned int kLoop = 10000; diff --git a/test/object.cpp b/test/object.cpp index 62cc62a7..148b54b0 100644 --- a/test/object.cpp +++ b/test/object.cpp @@ -1,4 +1,4 @@ -#include +#include #include @@ -34,10 +34,6 @@ MSGPACK_ADD_ENUM(outer_enum_class::enum_class_test); #endif // !defined(MSGPACK_USE_CPP03) - - -#include - struct myclass { myclass() : num(0), str("default") { } diff --git a/test/object_with_zone.cpp b/test/object_with_zone.cpp index e543e890..c203ee46 100644 --- a/test/object_with_zone.cpp +++ b/test/object_with_zone.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include @@ -40,9 +40,6 @@ MSGPACK_ADD_ENUM(outer_enum_class::enum_class_test); -#include - - using namespace std; const unsigned int kLoop = 1000; diff --git a/tmp/msgpack/versioning.hpp b/tmp/msgpack/versioning.hpp new file mode 100644 index 00000000..46263525 --- /dev/null +++ b/tmp/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