From 53795c74aead4e6021bc788b788f8ed5b4a0166d Mon Sep 17 00:00:00 2001 From: Andrej Rode Date: Mon, 3 Apr 2017 18:49:58 -0700 Subject: uhd: add cut-down rpclib source tree and import tool --- .../include/rpc/msgpack/adaptor/adaptor_base.hpp | 92 + .../include/rpc/msgpack/adaptor/array_ref.hpp | 182 + .../rpclib/include/rpc/msgpack/adaptor/bool.hpp | 74 + .../include/rpc/msgpack/adaptor/boost/fusion.hpp | 168 + .../rpc/msgpack/adaptor/boost/msgpack_variant.hpp | 438 + .../include/rpc/msgpack/adaptor/boost/optional.hpp | 104 + .../rpc/msgpack/adaptor/boost/string_ref.hpp | 95 + .../include/rpc/msgpack/adaptor/char_ptr.hpp | 165 + .../rpc/msgpack/adaptor/check_container_size.hpp | 75 + .../include/rpc/msgpack/adaptor/cpp11/array.hpp | 146 + .../rpc/msgpack/adaptor/cpp11/array_char.hpp | 97 + .../msgpack/adaptor/cpp11/array_unsigned_char.hpp | 97 + .../rpc/msgpack/adaptor/cpp11/forward_list.hpp | 102 + .../rpc/msgpack/adaptor/cpp11/shared_ptr.hpp | 90 + .../include/rpc/msgpack/adaptor/cpp11/tuple.hpp | 184 + .../rpc/msgpack/adaptor/cpp11/unique_ptr.hpp | 90 + .../rpc/msgpack/adaptor/cpp11/unordered_map.hpp | 190 + .../rpc/msgpack/adaptor/cpp11/unordered_set.hpp | 180 + .../rpclib/include/rpc/msgpack/adaptor/define.hpp | 39 + .../rpclib/include/rpc/msgpack/adaptor/deque.hpp | 116 + .../msgpack/adaptor/detail/cpp03_define_array.hpp | 3498 +++++ .../msgpack/adaptor/detail/cpp03_define_map.hpp | 2799 ++++ .../msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp | 13917 +++++++++++++++++++ .../msgpack/adaptor/detail/cpp11_define_array.hpp | 201 + .../msgpack/adaptor/detail/cpp11_define_map.hpp | 171 + .../msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp | 283 + .../rpclib/include/rpc/msgpack/adaptor/ext.hpp | 245 + .../rpclib/include/rpc/msgpack/adaptor/fixint.hpp | 306 + .../rpclib/include/rpc/msgpack/adaptor/float.hpp | 131 + .../rpclib/include/rpc/msgpack/adaptor/int.hpp | 436 + .../rpclib/include/rpc/msgpack/adaptor/list.hpp | 114 + .../rpclib/include/rpc/msgpack/adaptor/map.hpp | 314 + .../include/rpc/msgpack/adaptor/msgpack_tuple.hpp | 29 + .../rpclib/include/rpc/msgpack/adaptor/nil.hpp | 92 + .../rpclib/include/rpc/msgpack/adaptor/pair.hpp | 91 + .../rpclib/include/rpc/msgpack/adaptor/raw.hpp | 114 + .../rpclib/include/rpc/msgpack/adaptor/set.hpp | 196 + .../rpclib/include/rpc/msgpack/adaptor/string.hpp | 94 + .../rpc/msgpack/adaptor/tr1/unordered_map.hpp | 179 + .../rpc/msgpack/adaptor/tr1/unordered_set.hpp | 173 + .../rpclib/include/rpc/msgpack/adaptor/v4raw.hpp | 114 + .../rpclib/include/rpc/msgpack/adaptor/vector.hpp | 129 + .../include/rpc/msgpack/adaptor/vector_bool.hpp | 96 + .../include/rpc/msgpack/adaptor/vector_char.hpp | 97 + .../rpc/msgpack/adaptor/vector_unsigned_char.hpp | 97 + .../deps/rpclib/include/rpc/msgpack/cpp_config.hpp | 135 + .../include/rpc/msgpack/detail/cpp03_zone.hpp | 676 + .../include/rpc/msgpack/detail/cpp11_zone.hpp | 376 + host/lib/deps/rpclib/include/rpc/msgpack/fbuffer.h | 46 + .../deps/rpclib/include/rpc/msgpack/fbuffer.hpp | 68 + .../deps/rpclib/include/rpc/msgpack/gcc_atomic.h | 33 + .../deps/rpclib/include/rpc/msgpack/iterator.hpp | 46 + host/lib/deps/rpclib/include/rpc/msgpack/meta.hpp | 59 + host/lib/deps/rpclib/include/rpc/msgpack/object.h | 119 + .../lib/deps/rpclib/include/rpc/msgpack/object.hpp | 837 ++ .../deps/rpclib/include/rpc/msgpack/object_fwd.hpp | 203 + host/lib/deps/rpclib/include/rpc/msgpack/pack.h | 155 + host/lib/deps/rpclib/include/rpc/msgpack/pack.hpp | 1098 ++ .../deps/rpclib/include/rpc/msgpack/pack_define.h | 26 + .../rpclib/include/rpc/msgpack/pack_template.h | 917 ++ host/lib/deps/rpclib/include/rpc/msgpack/predef.h | 19 + .../include/rpc/msgpack/predef/architecture.h | 30 + .../rpc/msgpack/predef/architecture/alpha.h | 60 + .../include/rpc/msgpack/predef/architecture/arm.h | 71 + .../rpc/msgpack/predef/architecture/blackfin.h | 47 + .../rpc/msgpack/predef/architecture/convex.h | 67 + .../include/rpc/msgpack/predef/architecture/ia64.h | 49 + .../include/rpc/msgpack/predef/architecture/m68k.h | 83 + .../include/rpc/msgpack/predef/architecture/mips.h | 74 + .../rpc/msgpack/predef/architecture/parisc.h | 65 + .../include/rpc/msgpack/predef/architecture/ppc.h | 73 + .../rpc/msgpack/predef/architecture/pyramid.h | 43 + .../include/rpc/msgpack/predef/architecture/rs6k.h | 56 + .../rpc/msgpack/predef/architecture/sparc.h | 55 + .../rpc/msgpack/predef/architecture/superh.h | 68 + .../rpc/msgpack/predef/architecture/sys370.h | 44 + .../rpc/msgpack/predef/architecture/sys390.h | 44 + .../include/rpc/msgpack/predef/architecture/x86.h | 38 + .../rpc/msgpack/predef/architecture/x86/32.h | 87 + .../rpc/msgpack/predef/architecture/x86/64.h | 50 + .../include/rpc/msgpack/predef/architecture/z.h | 43 + .../rpclib/include/rpc/msgpack/predef/compiler.h | 41 + .../include/rpc/msgpack/predef/compiler/borland.h | 64 + .../include/rpc/msgpack/predef/compiler/clang.h | 57 + .../include/rpc/msgpack/predef/compiler/comeau.h | 62 + .../include/rpc/msgpack/predef/compiler/compaq.h | 67 + .../include/rpc/msgpack/predef/compiler/diab.h | 57 + .../rpc/msgpack/predef/compiler/digitalmars.h | 57 + .../include/rpc/msgpack/predef/compiler/dignus.h | 57 + .../include/rpc/msgpack/predef/compiler/edg.h | 57 + .../include/rpc/msgpack/predef/compiler/ekopath.h | 58 + .../include/rpc/msgpack/predef/compiler/gcc.h | 69 + .../include/rpc/msgpack/predef/compiler/gcc_xml.h | 53 + .../rpc/msgpack/predef/compiler/greenhills.h | 67 + .../include/rpc/msgpack/predef/compiler/hp_acc.h | 62 + .../include/rpc/msgpack/predef/compiler/iar.h | 57 + .../include/rpc/msgpack/predef/compiler/ibm.h | 73 + .../include/rpc/msgpack/predef/compiler/intel.h | 66 + .../include/rpc/msgpack/predef/compiler/kai.h | 57 + .../include/rpc/msgpack/predef/compiler/llvm.h | 58 + .../include/rpc/msgpack/predef/compiler/metaware.h | 54 + .../rpc/msgpack/predef/compiler/metrowerks.h | 78 + .../include/rpc/msgpack/predef/compiler/microtec.h | 54 + .../include/rpc/msgpack/predef/compiler/mpw.h | 64 + .../include/rpc/msgpack/predef/compiler/palm.h | 57 + .../include/rpc/msgpack/predef/compiler/pgi.h | 61 + .../rpc/msgpack/predef/compiler/sgi_mipspro.h | 67 + .../include/rpc/msgpack/predef/compiler/sunpro.h | 67 + .../include/rpc/msgpack/predef/compiler/tendra.h | 54 + .../include/rpc/msgpack/predef/compiler/visualc.h | 92 + .../include/rpc/msgpack/predef/compiler/watcom.h | 57 + .../include/rpc/msgpack/predef/detail/_cassert.h | 17 + .../include/rpc/msgpack/predef/detail/_exception.h | 15 + .../rpc/msgpack/predef/detail/comp_detected.h | 10 + .../rpc/msgpack/predef/detail/endian_compat.h | 26 + .../rpc/msgpack/predef/detail/os_detected.h | 10 + .../rpc/msgpack/predef/detail/platform_detected.h | 10 + .../include/rpc/msgpack/predef/detail/test.h | 17 + .../rpclib/include/rpc/msgpack/predef/language.h | 15 + .../include/rpc/msgpack/predef/language/objc.h | 43 + .../include/rpc/msgpack/predef/language/stdc.h | 54 + .../include/rpc/msgpack/predef/language/stdcpp.h | 124 + .../rpclib/include/rpc/msgpack/predef/library.h | 14 + .../rpclib/include/rpc/msgpack/predef/library/c.h | 18 + .../include/rpc/msgpack/predef/library/c/_prefix.h | 13 + .../include/rpc/msgpack/predef/library/c/gnu.h | 62 + .../include/rpc/msgpack/predef/library/c/uc.h | 48 + .../include/rpc/msgpack/predef/library/c/vms.h | 48 + .../include/rpc/msgpack/predef/library/c/zos.h | 57 + .../include/rpc/msgpack/predef/library/std.h | 23 + .../rpc/msgpack/predef/library/std/_prefix.h | 23 + .../include/rpc/msgpack/predef/library/std/cxx.h | 47 + .../rpc/msgpack/predef/library/std/dinkumware.h | 53 + .../rpc/msgpack/predef/library/std/libcomo.h | 48 + .../rpc/msgpack/predef/library/std/modena.h | 46 + .../include/rpc/msgpack/predef/library/std/msl.h | 54 + .../rpc/msgpack/predef/library/std/roguewave.h | 57 + .../include/rpc/msgpack/predef/library/std/sgi.h | 52 + .../rpc/msgpack/predef/library/std/stdcpp3.h | 54 + .../rpc/msgpack/predef/library/std/stlport.h | 60 + .../include/rpc/msgpack/predef/library/std/vacpp.h | 45 + .../deps/rpclib/include/rpc/msgpack/predef/make.h | 89 + .../deps/rpclib/include/rpc/msgpack/predef/os.h | 31 + .../rpclib/include/rpc/msgpack/predef/os/aix.h | 67 + .../rpclib/include/rpc/msgpack/predef/os/amigaos.h | 47 + .../rpclib/include/rpc/msgpack/predef/os/android.h | 46 + .../rpclib/include/rpc/msgpack/predef/os/beos.h | 46 + .../rpclib/include/rpc/msgpack/predef/os/bsd.h | 95 + .../include/rpc/msgpack/predef/os/bsd/bsdi.h | 48 + .../include/rpc/msgpack/predef/os/bsd/dragonfly.h | 50 + .../include/rpc/msgpack/predef/os/bsd/free.h | 60 + .../rpclib/include/rpc/msgpack/predef/os/bsd/net.h | 84 + .../include/rpc/msgpack/predef/os/bsd/open.h | 171 + .../rpclib/include/rpc/msgpack/predef/os/cygwin.h | 46 + .../rpclib/include/rpc/msgpack/predef/os/haiku.h | 47 + .../rpclib/include/rpc/msgpack/predef/os/hpux.h | 48 + .../rpclib/include/rpc/msgpack/predef/os/ios.h | 51 + .../rpclib/include/rpc/msgpack/predef/os/irix.h | 47 + .../rpclib/include/rpc/msgpack/predef/os/linux.h | 47 + .../rpclib/include/rpc/msgpack/predef/os/macos.h | 66 + .../rpclib/include/rpc/msgpack/predef/os/os400.h | 46 + .../rpclib/include/rpc/msgpack/predef/os/qnxnto.h | 60 + .../rpclib/include/rpc/msgpack/predef/os/solaris.h | 47 + .../rpclib/include/rpc/msgpack/predef/os/unix.h | 76 + .../rpclib/include/rpc/msgpack/predef/os/vms.h | 53 + .../rpclib/include/rpc/msgpack/predef/os/windows.h | 51 + .../deps/rpclib/include/rpc/msgpack/predef/other.h | 14 + .../include/rpc/msgpack/predef/other/endian.h | 205 + .../rpclib/include/rpc/msgpack/predef/platform.h | 19 + .../include/rpc/msgpack/predef/platform/mingw.h | 70 + .../rpc/msgpack/predef/platform/windows_desktop.h | 44 + .../rpc/msgpack/predef/platform/windows_phone.h | 42 + .../rpc/msgpack/predef/platform/windows_runtime.h | 44 + .../rpc/msgpack/predef/platform/windows_store.h | 42 + .../rpclib/include/rpc/msgpack/predef/version.h | 15 + .../include/rpc/msgpack/predef/version_number.h | 54 + .../rpclib/include/rpc/msgpack/preprocessor.hpp | 19 + .../rpc/msgpack/preprocessor/arithmetic.hpp | 25 + .../rpc/msgpack/preprocessor/arithmetic/add.hpp | 51 + .../rpc/msgpack/preprocessor/arithmetic/dec.hpp | 288 + .../preprocessor/arithmetic/detail/div_base.hpp | 61 + .../rpc/msgpack/preprocessor/arithmetic/div.hpp | 39 + .../rpc/msgpack/preprocessor/arithmetic/inc.hpp | 288 + .../rpc/msgpack/preprocessor/arithmetic/mod.hpp | 39 + .../rpc/msgpack/preprocessor/arithmetic/mul.hpp | 53 + .../rpc/msgpack/preprocessor/arithmetic/sub.hpp | 50 + .../include/rpc/msgpack/preprocessor/array.hpp | 32 + .../rpc/msgpack/preprocessor/array/data.hpp | 28 + .../msgpack/preprocessor/array/detail/get_data.hpp | 55 + .../rpc/msgpack/preprocessor/array/elem.hpp | 29 + .../rpc/msgpack/preprocessor/array/enum.hpp | 33 + .../rpc/msgpack/preprocessor/array/insert.hpp | 55 + .../rpc/msgpack/preprocessor/array/pop_back.hpp | 37 + .../rpc/msgpack/preprocessor/array/pop_front.hpp | 38 + .../rpc/msgpack/preprocessor/array/push_back.hpp | 35 + .../rpc/msgpack/preprocessor/array/push_front.hpp | 35 + .../rpc/msgpack/preprocessor/array/remove.hpp | 54 + .../rpc/msgpack/preprocessor/array/replace.hpp | 49 + .../rpc/msgpack/preprocessor/array/reverse.hpp | 29 + .../rpc/msgpack/preprocessor/array/size.hpp | 28 + .../rpc/msgpack/preprocessor/array/to_list.hpp | 47 + .../rpc/msgpack/preprocessor/array/to_seq.hpp | 46 + .../rpc/msgpack/preprocessor/array/to_tuple.hpp | 33 + .../rpc/msgpack/preprocessor/assert_msg.hpp | 17 + .../include/rpc/msgpack/preprocessor/cat.hpp | 35 + .../include/rpc/msgpack/preprocessor/comma.hpp | 17 + .../include/rpc/msgpack/preprocessor/comma_if.hpp | 17 + .../rpc/msgpack/preprocessor/comparison.hpp | 24 + .../rpc/msgpack/preprocessor/comparison/equal.hpp | 34 + .../msgpack/preprocessor/comparison/greater.hpp | 38 + .../preprocessor/comparison/greater_equal.hpp | 38 + .../rpc/msgpack/preprocessor/comparison/less.hpp | 46 + .../msgpack/preprocessor/comparison/less_equal.hpp | 39 + .../msgpack/preprocessor/comparison/not_equal.hpp | 814 ++ .../rpc/msgpack/preprocessor/config/config.hpp | 101 + .../rpc/msgpack/preprocessor/config/limits.hpp | 30 + .../include/rpc/msgpack/preprocessor/control.hpp | 22 + .../rpc/msgpack/preprocessor/control/deduce_d.hpp | 22 + .../preprocessor/control/detail/dmc/while.hpp | 536 + .../preprocessor/control/detail/edg/while.hpp | 534 + .../preprocessor/control/detail/msvc/while.hpp | 277 + .../msgpack/preprocessor/control/detail/while.hpp | 536 + .../rpc/msgpack/preprocessor/control/expr_if.hpp | 30 + .../rpc/msgpack/preprocessor/control/expr_iif.hpp | 31 + .../rpc/msgpack/preprocessor/control/if.hpp | 30 + .../rpc/msgpack/preprocessor/control/iif.hpp | 34 + .../rpc/msgpack/preprocessor/control/while.hpp | 312 + .../include/rpc/msgpack/preprocessor/debug.hpp | 18 + .../rpc/msgpack/preprocessor/debug/assert.hpp | 44 + .../rpc/msgpack/preprocessor/debug/error.hpp | 33 + .../rpc/msgpack/preprocessor/debug/line.hpp | 35 + .../include/rpc/msgpack/preprocessor/dec.hpp | 17 + .../rpc/msgpack/preprocessor/detail/auto_rec.hpp | 293 + .../rpc/msgpack/preprocessor/detail/check.hpp | 48 + .../msgpack/preprocessor/detail/dmc/auto_rec.hpp | 286 + .../rpc/msgpack/preprocessor/detail/is_binary.hpp | 30 + .../rpc/msgpack/preprocessor/detail/is_nullary.hpp | 30 + .../rpc/msgpack/preprocessor/detail/is_unary.hpp | 30 + .../rpc/msgpack/preprocessor/detail/null.hpp | 17 + .../rpc/msgpack/preprocessor/detail/split.hpp | 35 + .../include/rpc/msgpack/preprocessor/empty.hpp | 17 + .../include/rpc/msgpack/preprocessor/enum.hpp | 17 + .../rpc/msgpack/preprocessor/enum_params.hpp | 17 + .../preprocessor/enum_params_with_a_default.hpp | 17 + .../preprocessor/enum_params_with_defaults.hpp | 17 + .../rpc/msgpack/preprocessor/enum_shifted.hpp | 17 + .../msgpack/preprocessor/enum_shifted_params.hpp | 17 + .../include/rpc/msgpack/preprocessor/expand.hpp | 17 + .../include/rpc/msgpack/preprocessor/expr_if.hpp | 17 + .../rpc/msgpack/preprocessor/facilities.hpp | 23 + .../rpc/msgpack/preprocessor/facilities/apply.hpp | 34 + .../preprocessor/facilities/detail/is_empty.hpp | 55 + .../rpc/msgpack/preprocessor/facilities/empty.hpp | 23 + .../rpc/msgpack/preprocessor/facilities/expand.hpp | 28 + .../msgpack/preprocessor/facilities/identity.hpp | 23 + .../msgpack/preprocessor/facilities/intercept.hpp | 277 + .../rpc/msgpack/preprocessor/facilities/is_1.hpp | 23 + .../msgpack/preprocessor/facilities/is_empty.hpp | 56 + .../preprocessor/facilities/is_empty_or_1.hpp | 31 + .../preprocessor/facilities/is_empty_variadic.hpp | 57 + .../msgpack/preprocessor/facilities/overload.hpp | 25 + .../include/rpc/msgpack/preprocessor/for.hpp | 17 + .../include/rpc/msgpack/preprocessor/identity.hpp | 17 + .../rpclib/include/rpc/msgpack/preprocessor/if.hpp | 17 + .../include/rpc/msgpack/preprocessor/inc.hpp | 17 + .../include/rpc/msgpack/preprocessor/iterate.hpp | 17 + .../include/rpc/msgpack/preprocessor/iteration.hpp | 19 + .../iteration/detail/bounds/lower1.hpp | 99 + .../iteration/detail/bounds/lower2.hpp | 99 + .../iteration/detail/bounds/lower3.hpp | 99 + .../iteration/detail/bounds/lower4.hpp | 99 + .../iteration/detail/bounds/lower5.hpp | 99 + .../iteration/detail/bounds/upper1.hpp | 99 + .../iteration/detail/bounds/upper2.hpp | 99 + .../iteration/detail/bounds/upper3.hpp | 99 + .../iteration/detail/bounds/upper4.hpp | 99 + .../iteration/detail/bounds/upper5.hpp | 99 + .../preprocessor/iteration/detail/finish.hpp | 99 + .../iteration/detail/iter/forward1.hpp | 1342 ++ .../iteration/detail/iter/forward2.hpp | 1338 ++ .../iteration/detail/iter/forward3.hpp | 1338 ++ .../iteration/detail/iter/forward4.hpp | 1338 ++ .../iteration/detail/iter/forward5.hpp | 1338 ++ .../iteration/detail/iter/reverse1.hpp | 1296 ++ .../iteration/detail/iter/reverse2.hpp | 1296 ++ .../iteration/detail/iter/reverse3.hpp | 1296 ++ .../iteration/detail/iter/reverse4.hpp | 1296 ++ .../iteration/detail/iter/reverse5.hpp | 1296 ++ .../preprocessor/iteration/detail/local.hpp | 812 ++ .../preprocessor/iteration/detail/rlocal.hpp | 782 ++ .../msgpack/preprocessor/iteration/detail/self.hpp | 21 + .../preprocessor/iteration/detail/start.hpp | 99 + .../rpc/msgpack/preprocessor/iteration/iterate.hpp | 82 + .../rpc/msgpack/preprocessor/iteration/local.hpp | 26 + .../rpc/msgpack/preprocessor/iteration/self.hpp | 19 + .../include/rpc/msgpack/preprocessor/library.hpp | 36 + .../include/rpc/msgpack/preprocessor/limits.hpp | 17 + .../include/rpc/msgpack/preprocessor/list.hpp | 37 + .../include/rpc/msgpack/preprocessor/list/adt.hpp | 73 + .../rpc/msgpack/preprocessor/list/append.hpp | 40 + .../include/rpc/msgpack/preprocessor/list/at.hpp | 39 + .../include/rpc/msgpack/preprocessor/list/cat.hpp | 42 + .../preprocessor/list/detail/dmc/fold_left.hpp | 279 + .../preprocessor/list/detail/edg/fold_left.hpp | 536 + .../preprocessor/list/detail/edg/fold_right.hpp | 794 ++ .../msgpack/preprocessor/list/detail/fold_left.hpp | 279 + .../preprocessor/list/detail/fold_right.hpp | 277 + .../include/rpc/msgpack/preprocessor/list/enum.hpp | 41 + .../rpc/msgpack/preprocessor/list/filter.hpp | 54 + .../rpc/msgpack/preprocessor/list/first_n.hpp | 58 + .../rpc/msgpack/preprocessor/list/fold_left.hpp | 303 + .../rpc/msgpack/preprocessor/list/fold_right.hpp | 40 + .../rpc/msgpack/preprocessor/list/for_each.hpp | 49 + .../rpc/msgpack/preprocessor/list/for_each_i.hpp | 65 + .../msgpack/preprocessor/list/for_each_product.hpp | 141 + .../rpc/msgpack/preprocessor/list/rest_n.hpp | 55 + .../rpc/msgpack/preprocessor/list/reverse.hpp | 40 + .../include/rpc/msgpack/preprocessor/list/size.hpp | 58 + .../rpc/msgpack/preprocessor/list/to_array.hpp | 155 + .../rpc/msgpack/preprocessor/list/to_seq.hpp | 32 + .../rpc/msgpack/preprocessor/list/to_tuple.hpp | 61 + .../rpc/msgpack/preprocessor/list/transform.hpp | 49 + .../include/rpc/msgpack/preprocessor/logical.hpp | 29 + .../rpc/msgpack/preprocessor/logical/and.hpp | 30 + .../rpc/msgpack/preprocessor/logical/bitand.hpp | 38 + .../rpc/msgpack/preprocessor/logical/bitnor.hpp | 38 + .../rpc/msgpack/preprocessor/logical/bitor.hpp | 38 + .../rpc/msgpack/preprocessor/logical/bitxor.hpp | 38 + .../rpc/msgpack/preprocessor/logical/bool.hpp | 288 + .../rpc/msgpack/preprocessor/logical/compl.hpp | 36 + .../rpc/msgpack/preprocessor/logical/nor.hpp | 30 + .../rpc/msgpack/preprocessor/logical/not.hpp | 30 + .../rpc/msgpack/preprocessor/logical/or.hpp | 30 + .../rpc/msgpack/preprocessor/logical/xor.hpp | 30 + .../include/rpc/msgpack/preprocessor/max.hpp | 17 + .../include/rpc/msgpack/preprocessor/min.hpp | 17 + .../rpc/msgpack/preprocessor/punctuation.hpp | 22 + .../rpc/msgpack/preprocessor/punctuation/comma.hpp | 21 + .../msgpack/preprocessor/punctuation/comma_if.hpp | 31 + .../punctuation/detail/is_begin_parens.hpp | 48 + .../preprocessor/punctuation/is_begin_parens.hpp | 51 + .../rpc/msgpack/preprocessor/punctuation/paren.hpp | 23 + .../msgpack/preprocessor/punctuation/paren_if.hpp | 38 + .../preprocessor/punctuation/remove_parens.hpp | 39 + .../include/rpc/msgpack/preprocessor/repeat.hpp | 17 + .../rpc/msgpack/preprocessor/repeat_2nd.hpp | 17 + .../rpc/msgpack/preprocessor/repeat_3rd.hpp | 17 + .../rpc/msgpack/preprocessor/repeat_from_to.hpp | 17 + .../msgpack/preprocessor/repeat_from_to_2nd.hpp | 17 + .../msgpack/preprocessor/repeat_from_to_3rd.hpp | 17 + .../rpc/msgpack/preprocessor/repetition.hpp | 32 + .../msgpack/preprocessor/repetition/deduce_r.hpp | 22 + .../msgpack/preprocessor/repetition/deduce_z.hpp | 22 + .../preprocessor/repetition/detail/dmc/for.hpp | 536 + .../preprocessor/repetition/detail/edg/for.hpp | 534 + .../msgpack/preprocessor/repetition/detail/for.hpp | 536 + .../preprocessor/repetition/detail/msvc/for.hpp | 277 + .../rpc/msgpack/preprocessor/repetition/enum.hpp | 66 + .../preprocessor/repetition/enum_binary_params.hpp | 54 + .../preprocessor/repetition/enum_params.hpp | 41 + .../repetition/enum_params_with_a_default.hpp | 25 + .../repetition/enum_params_with_defaults.hpp | 24 + .../preprocessor/repetition/enum_shifted.hpp | 68 + .../repetition/enum_shifted_binary_params.hpp | 51 + .../repetition/enum_shifted_params.hpp | 44 + .../preprocessor/repetition/enum_trailing.hpp | 63 + .../repetition/enum_trailing_binary_params.hpp | 53 + .../repetition/enum_trailing_params.hpp | 38 + .../rpc/msgpack/preprocessor/repetition/for.hpp | 306 + .../rpc/msgpack/preprocessor/repetition/repeat.hpp | 825 ++ .../preprocessor/repetition/repeat_from_to.hpp | 87 + .../include/rpc/msgpack/preprocessor/selection.hpp | 18 + .../rpc/msgpack/preprocessor/selection/max.hpp | 39 + .../rpc/msgpack/preprocessor/selection/min.hpp | 39 + .../include/rpc/msgpack/preprocessor/seq.hpp | 44 + .../include/rpc/msgpack/preprocessor/seq/cat.hpp | 49 + .../preprocessor/seq/detail/binary_transform.hpp | 48 + .../rpc/msgpack/preprocessor/seq/detail/split.hpp | 284 + .../include/rpc/msgpack/preprocessor/seq/elem.hpp | 304 + .../include/rpc/msgpack/preprocessor/seq/enum.hpp | 288 + .../rpc/msgpack/preprocessor/seq/filter.hpp | 54 + .../rpc/msgpack/preprocessor/seq/first_n.hpp | 30 + .../rpc/msgpack/preprocessor/seq/fold_left.hpp | 1070 ++ .../rpc/msgpack/preprocessor/seq/fold_right.hpp | 288 + .../rpc/msgpack/preprocessor/seq/for_each.hpp | 60 + .../rpc/msgpack/preprocessor/seq/for_each_i.hpp | 61 + .../msgpack/preprocessor/seq/for_each_product.hpp | 126 + .../rpc/msgpack/preprocessor/seq/insert.hpp | 28 + .../rpc/msgpack/preprocessor/seq/pop_back.hpp | 29 + .../rpc/msgpack/preprocessor/seq/pop_front.hpp | 27 + .../rpc/msgpack/preprocessor/seq/push_back.hpp | 19 + .../rpc/msgpack/preprocessor/seq/push_front.hpp | 19 + .../rpc/msgpack/preprocessor/seq/remove.hpp | 29 + .../rpc/msgpack/preprocessor/seq/replace.hpp | 29 + .../rpc/msgpack/preprocessor/seq/rest_n.hpp | 30 + .../rpc/msgpack/preprocessor/seq/reverse.hpp | 39 + .../include/rpc/msgpack/preprocessor/seq/seq.hpp | 44 + .../include/rpc/msgpack/preprocessor/seq/size.hpp | 547 + .../rpc/msgpack/preprocessor/seq/subseq.hpp | 28 + .../rpc/msgpack/preprocessor/seq/to_array.hpp | 28 + .../rpc/msgpack/preprocessor/seq/to_list.hpp | 29 + .../rpc/msgpack/preprocessor/seq/to_tuple.hpp | 27 + .../rpc/msgpack/preprocessor/seq/transform.hpp | 48 + .../preprocessor/seq/variadic_seq_to_seq.hpp | 28 + .../include/rpc/msgpack/preprocessor/slot.hpp | 17 + .../rpc/msgpack/preprocessor/slot/counter.hpp | 25 + .../msgpack/preprocessor/slot/detail/counter.hpp | 269 + .../rpc/msgpack/preprocessor/slot/detail/def.hpp | 49 + .../msgpack/preprocessor/slot/detail/shared.hpp | 247 + .../rpc/msgpack/preprocessor/slot/detail/slot1.hpp | 267 + .../rpc/msgpack/preprocessor/slot/detail/slot2.hpp | 267 + .../rpc/msgpack/preprocessor/slot/detail/slot3.hpp | 267 + .../rpc/msgpack/preprocessor/slot/detail/slot4.hpp | 267 + .../rpc/msgpack/preprocessor/slot/detail/slot5.hpp | 267 + .../include/rpc/msgpack/preprocessor/slot/slot.hpp | 32 + .../include/rpc/msgpack/preprocessor/stringize.hpp | 33 + .../include/rpc/msgpack/preprocessor/tuple.hpp | 35 + .../preprocessor/tuple/detail/is_single_return.hpp | 28 + .../include/rpc/msgpack/preprocessor/tuple/eat.hpp | 106 + .../rpc/msgpack/preprocessor/tuple/elem.hpp | 201 + .../rpc/msgpack/preprocessor/tuple/enum.hpp | 22 + .../rpc/msgpack/preprocessor/tuple/insert.hpp | 37 + .../rpc/msgpack/preprocessor/tuple/pop_back.hpp | 64 + .../rpc/msgpack/preprocessor/tuple/pop_front.hpp | 65 + .../rpc/msgpack/preprocessor/tuple/push_back.hpp | 31 + .../rpc/msgpack/preprocessor/tuple/push_front.hpp | 32 + .../include/rpc/msgpack/preprocessor/tuple/rem.hpp | 149 + .../rpc/msgpack/preprocessor/tuple/remove.hpp | 64 + .../rpc/msgpack/preprocessor/tuple/replace.hpp | 37 + .../rpc/msgpack/preprocessor/tuple/reverse.hpp | 117 + .../rpc/msgpack/preprocessor/tuple/size.hpp | 28 + .../rpc/msgpack/preprocessor/tuple/to_array.hpp | 39 + .../rpc/msgpack/preprocessor/tuple/to_list.hpp | 118 + .../rpc/msgpack/preprocessor/tuple/to_seq.hpp | 119 + .../include/rpc/msgpack/preprocessor/variadic.hpp | 23 + .../variadic/detail/is_single_return.hpp | 28 + .../rpc/msgpack/preprocessor/variadic/elem.hpp | 94 + .../rpc/msgpack/preprocessor/variadic/size.hpp | 30 + .../rpc/msgpack/preprocessor/variadic/to_array.hpp | 32 + .../rpc/msgpack/preprocessor/variadic/to_list.hpp | 25 + .../rpc/msgpack/preprocessor/variadic/to_seq.hpp | 25 + .../rpc/msgpack/preprocessor/variadic/to_tuple.hpp | 24 + .../include/rpc/msgpack/preprocessor/while.hpp | 17 + .../rpc/msgpack/preprocessor/wstringize.hpp | 29 + host/lib/deps/rpclib/include/rpc/msgpack/sbuffer.h | 118 + .../deps/rpclib/include/rpc/msgpack/sbuffer.hpp | 160 + host/lib/deps/rpclib/include/rpc/msgpack/sysdep.h | 195 + host/lib/deps/rpclib/include/rpc/msgpack/type.hpp | 51 + host/lib/deps/rpclib/include/rpc/msgpack/unpack.h | 278 + .../lib/deps/rpclib/include/rpc/msgpack/unpack.hpp | 1719 +++ .../rpclib/include/rpc/msgpack/unpack_define.h | 97 + .../rpclib/include/rpc/msgpack/unpack_template.h | 482 + host/lib/deps/rpclib/include/rpc/msgpack/util.h | 23 + host/lib/deps/rpclib/include/rpc/msgpack/version.h | 46 + .../deps/rpclib/include/rpc/msgpack/version.hpp | 44 + .../rpclib/include/rpc/msgpack/version_master.h | 3 + .../deps/rpclib/include/rpc/msgpack/versioning.hpp | 77 + .../deps/rpclib/include/rpc/msgpack/vrefbuffer.h | 149 + .../deps/rpclib/include/rpc/msgpack/vrefbuffer.hpp | 300 + host/lib/deps/rpclib/include/rpc/msgpack/zbuffer.h | 208 + .../deps/rpclib/include/rpc/msgpack/zbuffer.hpp | 175 + host/lib/deps/rpclib/include/rpc/msgpack/zone.h | 171 + host/lib/deps/rpclib/include/rpc/msgpack/zone.hpp | 29 + 463 files changed, 80996 insertions(+) create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/adaptor_base.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/array_ref.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/bool.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/fusion.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/msgpack_variant.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/optional.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/string_ref.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/char_ptr.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/check_container_size.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array_char.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array_unsigned_char.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/forward_list.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/shared_ptr.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/tuple.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unique_ptr.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unordered_map.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unordered_set.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/define.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/deque.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_define_array.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_define_map.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_define_array.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_define_map.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/ext.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/fixint.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/float.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/int.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/list.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/map.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/msgpack_tuple.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/nil.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/pair.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/raw.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/set.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/string.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/tr1/unordered_map.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/tr1/unordered_set.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/v4raw.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_bool.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_char.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_unsigned_char.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/cpp_config.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/detail/cpp03_zone.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/detail/cpp11_zone.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/fbuffer.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/fbuffer.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/gcc_atomic.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/iterator.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/meta.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/object.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/object.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/object_fwd.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/pack.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/pack.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/pack_define.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/pack_template.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/alpha.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/arm.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/blackfin.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/convex.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/ia64.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/m68k.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/mips.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/parisc.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/ppc.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/pyramid.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/rs6k.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/sparc.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/superh.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/sys370.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/sys390.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/x86.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/x86/32.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/x86/64.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/architecture/z.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/borland.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/clang.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/comeau.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/compaq.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/diab.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/digitalmars.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/dignus.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/edg.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/ekopath.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/gcc.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/gcc_xml.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/greenhills.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/hp_acc.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/iar.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/ibm.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/intel.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/kai.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/llvm.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/metaware.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/metrowerks.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/microtec.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/mpw.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/palm.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/pgi.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/sgi_mipspro.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/sunpro.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/tendra.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/visualc.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/compiler/watcom.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/detail/_cassert.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/detail/_exception.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/detail/comp_detected.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/detail/endian_compat.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/detail/os_detected.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/detail/platform_detected.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/detail/test.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/language.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/language/objc.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/language/stdc.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/language/stdcpp.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/c.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/c/_prefix.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/c/gnu.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/c/uc.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/c/vms.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/c/zos.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std/_prefix.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std/cxx.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std/dinkumware.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std/libcomo.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std/modena.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std/msl.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std/roguewave.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std/sgi.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std/stdcpp3.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std/stlport.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/library/std/vacpp.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/make.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/aix.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/amigaos.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/android.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/beos.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/bsd.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/bsd/bsdi.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/bsd/dragonfly.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/bsd/free.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/bsd/net.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/bsd/open.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/cygwin.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/haiku.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/hpux.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/ios.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/irix.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/linux.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/macos.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/os400.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/qnxnto.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/solaris.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/unix.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/vms.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/os/windows.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/other.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/other/endian.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/platform.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/platform/mingw.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/platform/windows_desktop.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/platform/windows_phone.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/platform/windows_runtime.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/platform/windows_store.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/version.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/predef/version_number.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/arithmetic.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/arithmetic/add.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/arithmetic/dec.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/arithmetic/detail/div_base.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/arithmetic/div.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/arithmetic/inc.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/arithmetic/mod.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/arithmetic/mul.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/arithmetic/sub.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/data.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/detail/get_data.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/elem.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/enum.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/insert.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/pop_back.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/pop_front.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/push_back.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/push_front.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/remove.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/replace.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/reverse.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/size.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/to_list.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/to_seq.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/array/to_tuple.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/assert_msg.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/cat.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/comma.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/comma_if.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/comparison.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/comparison/equal.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/comparison/greater.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/comparison/greater_equal.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/comparison/less.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/comparison/less_equal.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/comparison/not_equal.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/config/config.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/config/limits.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/control.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/control/deduce_d.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/control/detail/dmc/while.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/control/detail/edg/while.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/control/detail/msvc/while.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/control/detail/while.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/control/expr_if.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/control/expr_iif.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/control/if.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/control/iif.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/control/while.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/debug.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/debug/assert.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/debug/error.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/debug/line.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/dec.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/detail/auto_rec.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/detail/check.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/detail/dmc/auto_rec.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/detail/is_binary.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/detail/is_nullary.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/detail/is_unary.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/detail/null.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/detail/split.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/empty.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/enum.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/enum_params.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/enum_params_with_a_default.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/enum_params_with_defaults.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/enum_shifted.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/enum_shifted_params.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/expand.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/expr_if.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities/apply.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities/detail/is_empty.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities/empty.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities/expand.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities/identity.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities/intercept.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities/is_1.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities/is_empty.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities/is_empty_or_1.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities/is_empty_variadic.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/facilities/overload.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/for.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/identity.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/if.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/inc.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iterate.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/bounds/lower1.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/bounds/lower2.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/bounds/lower3.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/bounds/lower4.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/bounds/lower5.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/bounds/upper1.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/bounds/upper2.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/bounds/upper3.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/bounds/upper4.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/bounds/upper5.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/finish.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/iter/forward1.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/iter/forward2.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/iter/forward3.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/iter/forward4.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/iter/forward5.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/iter/reverse1.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/iter/reverse2.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/iter/reverse3.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/iter/reverse4.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/iter/reverse5.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/local.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/rlocal.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/self.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/detail/start.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/iterate.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/local.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/iteration/self.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/library.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/limits.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/adt.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/append.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/at.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/cat.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/detail/dmc/fold_left.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/detail/edg/fold_left.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/detail/edg/fold_right.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/detail/fold_left.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/detail/fold_right.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/enum.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/filter.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/first_n.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/fold_left.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/fold_right.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/for_each.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/for_each_i.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/for_each_product.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/rest_n.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/reverse.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/size.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/to_array.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/to_seq.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/to_tuple.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/list/transform.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical/and.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical/bitand.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical/bitnor.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical/bitor.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical/bitxor.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical/bool.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical/compl.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical/nor.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical/not.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical/or.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/logical/xor.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/max.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/min.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/punctuation.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/punctuation/comma.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/punctuation/comma_if.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/punctuation/detail/is_begin_parens.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/punctuation/is_begin_parens.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/punctuation/paren.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/punctuation/paren_if.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/punctuation/remove_parens.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repeat.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repeat_2nd.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repeat_3rd.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repeat_from_to.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repeat_from_to_2nd.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repeat_from_to_3rd.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/deduce_r.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/deduce_z.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/detail/dmc/for.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/detail/edg/for.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/detail/for.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/detail/msvc/for.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/enum.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/enum_binary_params.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/enum_params.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/enum_params_with_a_default.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/enum_params_with_defaults.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/enum_shifted.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/enum_shifted_binary_params.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/enum_shifted_params.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/enum_trailing.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/enum_trailing_binary_params.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/enum_trailing_params.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/for.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/repeat.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/repetition/repeat_from_to.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/selection.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/selection/max.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/selection/min.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/cat.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/detail/binary_transform.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/detail/split.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/elem.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/enum.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/filter.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/first_n.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/fold_left.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/fold_right.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/for_each.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/for_each_i.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/for_each_product.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/insert.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/pop_back.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/pop_front.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/push_back.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/push_front.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/remove.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/replace.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/rest_n.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/reverse.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/seq.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/size.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/subseq.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/to_array.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/to_list.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/to_tuple.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/transform.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/seq/variadic_seq_to_seq.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/slot.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/slot/counter.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/slot/detail/counter.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/slot/detail/def.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/slot/detail/shared.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/slot/detail/slot1.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/slot/detail/slot2.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/slot/detail/slot3.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/slot/detail/slot4.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/slot/detail/slot5.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/slot/slot.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/stringize.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/detail/is_single_return.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/eat.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/elem.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/enum.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/insert.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/pop_back.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/pop_front.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/push_back.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/push_front.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/rem.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/remove.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/replace.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/reverse.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/size.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/to_array.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/to_list.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/tuple/to_seq.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/variadic.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/variadic/detail/is_single_return.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/variadic/elem.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/variadic/size.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/variadic/to_array.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/variadic/to_list.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/variadic/to_seq.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/variadic/to_tuple.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/while.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/preprocessor/wstringize.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/sbuffer.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/sbuffer.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/sysdep.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/type.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/unpack.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/unpack.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/unpack_define.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/unpack_template.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/util.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/version.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/version.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/version_master.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/versioning.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/vrefbuffer.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/vrefbuffer.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/zbuffer.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/zbuffer.hpp create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/zone.h create mode 100644 host/lib/deps/rpclib/include/rpc/msgpack/zone.hpp (limited to 'host/lib/deps/rpclib/include/rpc/msgpack') diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/adaptor_base.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/adaptor_base.hpp new file mode 100644 index 000000000..70f19b0c4 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/adaptor_base.hpp @@ -0,0 +1,92 @@ +// +// 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 "rpc/msgpack/object_fwd.hpp" + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +template +class packer; + +namespace adaptor { + +// Adaptor functors + +template +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, T& v) const; +}; + +template +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, T const& v) const; +}; + +template +struct object { + void operator()(clmdep_msgpack::object& o, T const& v) const; +}; + +template +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, T const& v) const; +}; + +} // namespace adaptor + +// operators + +template +inline +clmdep_msgpack::object const& operator>> (clmdep_msgpack::object const& o, T& v) { + return adaptor::convert()(o, v); +} + +template +inline +clmdep_msgpack::packer& operator<< (clmdep_msgpack::packer& o, T const& v) { + return adaptor::pack()(o, v); +} + +template +inline +void operator<< (clmdep_msgpack::object& o, T const& v) { + adaptor::object()(o, v); +} + +template +inline +void operator<< (clmdep_msgpack::object::with_zone& o, T const& v) { + adaptor::object_with_zone()(o, v); +} + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + + +#endif // MSGPACK_ADAPTOR_BASE_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/array_ref.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/array_ref.hpp new file mode 100644 index 000000000..393fc906e --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/array_ref.hpp @@ -0,0 +1,182 @@ +// +// 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_ARRAY_REF_HPP +#define MSGPACK_TYPE_ARRAY_REF_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" +#include +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace type { + +template +struct array_ref { + array_ref() : data(nullptr) {} + array_ref(T& t) : data(&t) {} + + T* data; + + template + bool operator==(array_ref const& t) const { + return *data == *t.data; + } + template + bool operator!=(array_ref const& t) const { + return !(*data == *t.data); + } + template + bool operator< (array_ref const& t) const + { + return *data < *t.data; + } + template + bool operator> (array_ref const& t) const + { + return *t.data < *data; + } + template + bool operator<= (array_ref const& t) const + { + return !(*t.data < *data); + } + template + bool operator>= (array_ref const& t) const + { + return !(*data < *t.data); + } +}; + +template +inline array_ref make_array_ref(T const& t) { + return array_ref(t); +} + +template +inline array_ref make_array_ref(T& t) { + return array_ref(t); +} + + +} // namespace type + +namespace adaptor { + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, clmdep_msgpack::type::array_ref& v) const { + if (!v.data) { throw clmdep_msgpack::type_error(); } + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if (v.data->size() < o.via.bin.size) { throw clmdep_msgpack::type_error(); } + if (o.via.array.size > 0) { + clmdep_msgpack::object* p = o.via.array.ptr; + clmdep_msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + typename T::iterator it = v.data->begin(); + do { + p->convert(*it); + ++p; + ++it; + } while(p < pend); + } + return o; + } +}; + +template +struct convert > > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, clmdep_msgpack::type::array_ref >& v) const { + if (!v.data) { throw clmdep_msgpack::type_error(); } + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + v.data->resize(o.via.bin.size); + if (o.via.array.size > 0) { + clmdep_msgpack::object* p = o.via.array.ptr; + clmdep_msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + typename std::vector::iterator it = v.data->begin(); + do { + p->convert(*it); + ++p; + ++it; + } while(p < pend); + } + return o; + } +}; + +template +struct pack > { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const clmdep_msgpack::type::array_ref& v) const { + if (!v.data) { throw clmdep_msgpack::type_error(); } + uint32_t size = checked_get_container_size(v.data->size()); + o.pack_array(size); + for (typename T::const_iterator it(v.data->begin()), it_end(v.data->end()); + it != it_end; ++it) { + o.pack(*it); + } + return o; + } +}; + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const clmdep_msgpack::type::array_ref& v) const { + if (!v.data) { throw clmdep_msgpack::type_error(); } + o.type = clmdep_msgpack::type::ARRAY; + if (v.data->empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } + else { + uint32_t size = checked_get_container_size(v.data->size()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + clmdep_msgpack::object* const pend = p + size; + o.via.array.ptr = p; + o.via.array.size = size; + typename T::const_iterator it(v.data->begin()); + do { +#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) + *p = clmdep_msgpack::object(*it, o.zone); +#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) +#pragma GCC diagnostic pop +#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_ARRAY_REF_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/bool.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/bool.hpp new file mode 100644 index 000000000..f5867ca3f --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/bool.hpp @@ -0,0 +1,74 @@ +// +// 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_HPP +#define MSGPACK_TYPE_BOOL_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, bool& v) const { + if(o.type != clmdep_msgpack::type::BOOLEAN) { throw clmdep_msgpack::type_error(); } + v = o.via.boolean; + return o; + } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const bool& v) const { + if(v) { o.pack_true(); } + else { o.pack_false(); } + return o; + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, bool v) const { + o.type = clmdep_msgpack::type::BOOLEAN; + o.via.boolean = v; + } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, bool v) const { + static_cast(o) << v; + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_BOOL_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/fusion.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/fusion.hpp new file mode 100644 index 000000000..98085f2ba --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/fusion.hpp @@ -0,0 +1,168 @@ +// +// 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_BOOST_FUSION_HPP +#define MSGPACK_TYPE_BOOST_FUSION_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" +#include "rpc/msgpack/meta.hpp" + +#if !defined (MSGPACK_USE_CPP03) +#include "rpc/msgpack/adaptor/cpp11/tuple.hpp" +#endif // #if !defined (MSGPACK_USE_CPP03) + +#include +#include +#include +#include +#include +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +#if !defined (MSGPACK_USE_CPP03) + +template +struct as< + T, + typename clmdep_msgpack::enable_if< + boost::fusion::traits::is_sequence::value && + boost::mpl::fold< + T, + boost::mpl::bool_, + boost::mpl::if_ < + boost::mpl::and_< + boost::mpl::_1, + clmdep_msgpack::has_as + >, + boost::mpl::bool_, + boost::mpl::bool_ + > + >::type::value + >::type +> { + T operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if (o.via.array.size != checked_get_container_size(boost::mpl::size::value)) { + throw clmdep_msgpack::type_error(); + } + using tuple_t = decltype(to_tuple(std::declval(), gen_seq::value>())); + return to_t( + o.as(), + clmdep_msgpack::gen_seq::value>()); + } + template + static std::tuple< + typename std::remove_reference< + typename boost::fusion::result_of::at_c::type + >::type...> + to_tuple(U const& u, seq) { + return std::make_tuple(boost::fusion::at_c(u)...); + } + template + static T to_t(U const& u, seq) { + return T(std::get(u)...); + } +}; + +#endif // !defined (MSGPACK_USE_CPP03) + +template +struct convert::value>::type > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, T& v) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if (o.via.array.size != checked_get_container_size(boost::fusion::size(v))) { + throw clmdep_msgpack::type_error(); + } + uint32_t index = 0; + boost::fusion::for_each(v, convert_imp(o, index)); + return o; + } +private: + struct convert_imp { + convert_imp(clmdep_msgpack::object const& obj, uint32_t& index):obj_(obj), index_(index) {} + template + void operator()(U& v) const { + clmdep_msgpack::adaptor::convert()(obj_.via.array.ptr[index_++], v); + } + private: + clmdep_msgpack::object const& obj_; + uint32_t& index_; + }; +}; + +template +struct pack::value>::type > { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const T& v) const { + uint32_t size = checked_get_container_size(boost::fusion::size(v)); + o.pack_array(size); + boost::fusion::for_each(v, pack_imp(o)); + return o; + } +private: + template + struct pack_imp { + pack_imp(clmdep_msgpack::packer& stream):stream_(stream) {} + template + void operator()(U const& v) const { + stream_.pack(v); + } + private: + clmdep_msgpack::packer& stream_; + }; +}; + +template +struct object_with_zone::value>::type > { + void operator()(clmdep_msgpack::object::with_zone& o, const T& v) const { + uint32_t size = checked_get_container_size(boost::fusion::size(v)); + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + o.via.array.size = size; + uint32_t count = 0; + boost::fusion::for_each(v, with_zone_imp(o, count)); + } +private: + struct with_zone_imp { + with_zone_imp(clmdep_msgpack::object::with_zone const& obj, uint32_t& count):obj_(obj), count_(count) {} + template + void operator()(U const& v) const { + obj_.via.array.ptr[count_++] = clmdep_msgpack::object(v, obj_.zone); + } + clmdep_msgpack::object::with_zone const& obj_; + uint32_t& count_; + }; +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_BOOST_FUSION_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/msgpack_variant.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/msgpack_variant.hpp new file mode 100644 index 000000000..7dbd2bec4 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/msgpack_variant.hpp @@ -0,0 +1,438 @@ +// +// 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_BOOST_MSGPACK_VARIANT_HPP +#define MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP + +#if defined(MSGPACK_USE_BOOST) + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" +#include "rpc/msgpack/adaptor/boost/string_ref.hpp" + +#include "rpc/msgpack/adaptor/nil.hpp" +#include "rpc/msgpack/adaptor/bool.hpp" +#include "rpc/msgpack/adaptor/int.hpp" +#include "rpc/msgpack/adaptor/float.hpp" +#include "rpc/msgpack/adaptor/string.hpp" +#include "rpc/msgpack/adaptor/vector_char.hpp" +#include "rpc/msgpack/adaptor/raw.hpp" +#include "rpc/msgpack/adaptor/ext.hpp" +#include "rpc/msgpack/adaptor/vector.hpp" +#include "rpc/msgpack/adaptor/map.hpp" + +#include +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace type { + + +template +struct basic_variant : + boost::variant< + nil, // NIL + bool, // BOOL + int64_t, // NEGATIVE_INTEGER + uint64_t, // POSITIVE_INTEGER + double, // FLOAT + std::string, // STR +#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + boost::string_ref, // STR +#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + std::vector, // BIN + clmdep_msgpack::type::raw_ref, // BIN + ext, // EXT + ext_ref, // EXT + boost::recursive_wrapper > >, // ARRAY + boost::recursive_wrapper, basic_variant > >, // MAP + boost::recursive_wrapper, basic_variant > >// MAP + >, + private boost::totally_ordered > { + typedef boost::variant< + nil, // NIL + bool, // BOOL + int64_t, // NEGATIVE_INTEGER + uint64_t, // POSITIVE_INTEGER + double, // FLOAT + std::string, // STR +#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + boost::string_ref, // STR +#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + std::vector, // BIN + clmdep_msgpack::type::raw_ref, // BIN + ext, // EXT + ext_ref, // EXT + boost::recursive_wrapper > >, // ARRAY + boost::recursive_wrapper, basic_variant > >, // MAP + boost::recursive_wrapper, basic_variant > >// MAP + > base; + basic_variant() {} + template + basic_variant(T const& t):base(t) {} + basic_variant(char const* p):base(std::string(p)) {} + basic_variant(char v) { + int_init(v); + } + basic_variant(signed char v) { + int_init(v); + } + basic_variant(unsigned char v):base(uint64_t(v)) {} + basic_variant(signed int v) { + int_init(v); + } + basic_variant(unsigned int v):base(uint64_t(v)) {} + basic_variant(signed long v) { + int_init(v); + } + basic_variant(unsigned long v):base(uint64_t(v)) {} + basic_variant(signed long long v) { + int_init(v); + } + basic_variant(unsigned long long v):base(uint64_t(v)) {} + + bool is_nil() const { + return boost::get(this); + } + bool is_bool() const { + return boost::get(this); + } + bool is_int64_t() const { + return boost::get(this); + } + bool is_uint64_t() const { + return boost::get(this); + } + bool is_double() const { + return boost::get(this); + } + bool is_string() const { + return boost::get(this); + } +#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + bool is_boost_string_ref() const { + return boost::get(this); + } +#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + bool is_vector_char() const { + return boost::get >(this); + } + bool is_vector_char() { + return boost::get >(this); + } + bool is_raw_ref() const { + return boost::get(this); + } + bool is_ext() const { + return boost::get(this); + } + bool is_ext_ref() const { + return boost::get(this); + } + bool is_vector() const { + return boost::get > >(this); + } + bool is_map() const { + return boost::get, basic_variant > >(this); + } + bool is_multimap() const { + return boost::get, basic_variant > >(this); + } + + bool as_bool() const { + return boost::get(*this); + } + int64_t as_int64_t() const { + return boost::get(*this); + } + int64_t& as_int64_t() { + return boost::get(*this); + } + uint64_t as_uint64_t() const { + return boost::get(*this); + } + uint64_t& as_uint64_t() { + return boost::get(*this); + } + double as_double() const { + return boost::get(*this); + } + double& as_double() { + return boost::get(*this); + } + std::string const& as_string() const { + return boost::get(*this); + } + std::string& as_string() { + return boost::get(*this); + } +#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + boost::string_ref const& as_boost_string_ref() const { + return boost::get(*this); + } + boost::string_ref& as_boost_string_ref() { + return boost::get(*this); + } +#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + std::vector const& as_vector_char() const { + return boost::get >(*this); + } + std::vector& as_vector_char() { + return boost::get >(*this); + } + raw_ref const& as_raw_ref() const { + return boost::get(*this); + } + ext const& as_ext() const { + return boost::get(*this); + } + ext& as_ext() { + return boost::get(*this); + } + ext_ref const& as_ext_ref() const { + return boost::get(*this); + } + std::vector > const& as_vector() const { + return boost::get > >(*this); + } + std::vector >& as_vector() { + return boost::get > >(*this); + } + std::map, basic_variant > const& as_map() const { + return boost::get, basic_variant > >(*this); + } + std::map, basic_variant >& as_map() { + return boost::get, basic_variant > >(*this); + } + std::multimap, basic_variant > const& as_multimap() const { + return boost::get, basic_variant > >(*this); + } + std::multimap, basic_variant >& as_multimap() { + return boost::get, basic_variant > >(*this); + } +private: + template + void int_init(T v) { + if (v < 0) { + static_cast(*this) = int64_t(v); + } + else { + static_cast(*this) = uint64_t(v); + } + } +}; + +template +inline bool operator<(basic_variant const& lhs, basic_variant const& rhs) { + return + static_cast::base const&>(lhs) < + static_cast::base const&>(rhs); +} + +template +inline bool operator==(basic_variant const& lhs, basic_variant const& rhs) { + return + static_cast::base const&>(lhs) == + static_cast::base const&>(rhs); +} + +typedef basic_variant, ext> variant; +typedef basic_variant< +#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + boost::string_ref, +#else // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + std::string, +#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + raw_ref, ext_ref> variant_ref; + +} // namespace type + +namespace adaptor { + +#if !defined (MSGPACK_USE_CPP03) + +template +struct as > { + clmdep_msgpack::type::basic_variant operator()(clmdep_msgpack::object const& o) const { + switch(o.type) { + case type::NIL: + return o.as(); + case type::BOOLEAN: + return o.as(); + case type::POSITIVE_INTEGER: + return o.as(); + case type::NEGATIVE_INTEGER: + return o.as(); + case type::FLOAT: + return o.as(); + case type::STR: + return o.as(); + case type::BIN: + return o.as(); + case type::EXT: + return o.as(); + case type::ARRAY: + return o.as > >(); + case type::MAP: + return o.as, clmdep_msgpack::type::basic_variant > >(); + default: + break; + } + return clmdep_msgpack::type::basic_variant(); + } +}; + +#endif // !defined (MSGPACK_USE_CPP03) + + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + clmdep_msgpack::type::basic_variant& v) const { + switch(o.type) { + case type::NIL: + v = o.as(); + break; + case type::BOOLEAN: + v = o.as(); + break; + case type::POSITIVE_INTEGER: + v = o.as(); + break; + case type::NEGATIVE_INTEGER: + v = o.as(); + break; + case type::FLOAT: + v = o.as(); + break; + case type::STR: + v = o.as(); + break; + case type::BIN: + v = o.as(); + break; + case type::EXT: + v = o.as(); + break; + case type::ARRAY: + v = o.as > >(); + break; + case type::MAP: + v = o.as, clmdep_msgpack::type::basic_variant > >(); + break; + default: + break; + } + return o; + } +}; + +namespace detail { + +template +struct pack_imp : boost::static_visitor { + template + void operator()(T const& value) const { + pack()(o_, value); + } + pack_imp(packer& o):o_(o) {} + packer& o_; +}; + +} // namespace detail + +template +struct pack > { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const clmdep_msgpack::type::basic_variant& v) const { + boost::apply_visitor(detail::pack_imp(o), v); + return o; + } +}; + +namespace detail { + +struct object_imp : boost::static_visitor { + void operator()(clmdep_msgpack::type::nil const& v) const { + object()(o_, v); + } + void operator()(bool const& v) const { + object()(o_, v); + } + void operator()(uint64_t const& v) const { + object()(o_, v); + } + void operator()(int64_t const& v) const { + object()(o_, v); + } + void operator()(double const& v) const { + object()(o_, v); + } + template + void operator()(T const&) const { + throw clmdep_msgpack::type_error(); + } + object_imp(clmdep_msgpack::object& o):o_(o) {} + clmdep_msgpack::object& o_; +}; + +} // namespace detail + +template +struct object > { + void operator()(clmdep_msgpack::object& o, const clmdep_msgpack::type::basic_variant& v) const { + boost::apply_visitor(detail::object_imp(o), v); + } +}; + +namespace detail { + +struct object_with_zone_imp : boost::static_visitor { + template + void operator()(T const& v) const { + object_with_zone()(o_, v); + } + object_with_zone_imp(clmdep_msgpack::object::with_zone& o):o_(o) {} + clmdep_msgpack::object::with_zone& o_; +}; + +} // namespace detail + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const clmdep_msgpack::type::basic_variant& v) const { + boost::apply_visitor(detail::object_with_zone_imp(o), v); + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_USE_BOOST +#endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/optional.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/optional.hpp new file mode 100644 index 000000000..74f7908e0 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/optional.hpp @@ -0,0 +1,104 @@ +// +// 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_BOOST_OPTIONAL_HPP +#define MSGPACK_TYPE_BOOST_OPTIONAL_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +// To supress warning on Boost.1.58.0 +#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) + +#include + +#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) +#pragma GCC diagnostic pop +#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +#if !defined (MSGPACK_USE_CPP03) + +template +struct as, typename std::enable_if::value>::type> { + boost::optional operator()(clmdep_msgpack::object const& o) const { + if(o.is_nil()) return boost::none; + return o.as(); + } +}; + +#endif // !defined (MSGPACK_USE_CPP03) + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, boost::optional& v) const { + if(o.is_nil()) v = boost::none; + else { + T t; + clmdep_msgpack::adaptor::convert()(o, t); + v = t; + } + return o; + } +}; + +template +struct pack > { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const boost::optional& v) const { + if (v) o.pack(*v); + else o.pack_nil(); + return o; + } +}; + +template +struct object > { + void operator()(clmdep_msgpack::object& o, const boost::optional& v) const { + if (v) clmdep_msgpack::adaptor::object()(o, *v); + else o.type = clmdep_msgpack::type::NIL; + } +}; + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const boost::optional& v) const { + if (v) clmdep_msgpack::adaptor::object_with_zone()(o, *v); + else o.type = clmdep_msgpack::type::NIL; + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_BOOST_OPTIONAL_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/string_ref.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/string_ref.hpp new file mode 100644 index 000000000..6dea3da5f --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/boost/string_ref.hpp @@ -0,0 +1,95 @@ +// +// 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_BOOST_STRING_REF_HPP +#define MSGPACK_TYPE_BOOST_STRING_REF_HPP + +#include +#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, boost::string_ref& v) const { + switch (o.type) { + case clmdep_msgpack::type::BIN: + v = boost::string_ref(o.via.bin.ptr, o.via.bin.size); + break; + case clmdep_msgpack::type::STR: + v = boost::string_ref(o.via.str.ptr, o.via.str.size); + break; + default: + throw clmdep_msgpack::type_error(); + break; + } + return o; + } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const boost::string_ref& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.pack_str(size); + o.pack_str_body(v.data(), size); + return o; + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, const boost::string_ref& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = clmdep_msgpack::type::STR; + o.via.str.ptr = v.data(); + o.via.str.size = size; + } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, const boost::string_ref& v) const { + static_cast(o) << v; + } +}; + + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 + +#endif // MSGPACK_TYPE_BOOST_STRING_REF_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/char_ptr.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/char_ptr.hpp new file mode 100644 index 000000000..0743524a2 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/char_ptr.hpp @@ -0,0 +1,165 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014-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_CHAR_PTR_HPP +#define MSGPACK_TYPE_CHAR_PTR_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/object_fwd.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_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()(clmdep_msgpack::object::with_zone& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = clmdep_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()(clmdep_msgpack::object& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = clmdep_msgpack::type::STR; + o.via.str.ptr = v; + o.via.str.size = size; + } +}; + + +template <> +struct pack { + template + packer& operator()(packer& o, char* v) const { + return o << static_cast(v); + } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, char* v) const { + o << static_cast(v); + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, char* v) const { + o << static_cast(v); + } +}; + +template +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_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()(clmdep_msgpack::object::with_zone& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = clmdep_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()(clmdep_msgpack::object& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = clmdep_msgpack::type::STR; + o.via.str.ptr = v; + o.via.str.size = size; + } +}; + +template +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_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()(clmdep_msgpack::object::with_zone& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = clmdep_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()(clmdep_msgpack::object& o, const char* v) const { + uint32_t size = checked_get_container_size(std::strlen(v)); + o.type = clmdep_msgpack::type::STR; + o.via.str.ptr = v; + o.via.str.size = size; + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_CHAR_PTR_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/check_container_size.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/check_container_size.hpp new file mode 100644 index 000000000..a5b4531b3 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/check_container_size.hpp @@ -0,0 +1,75 @@ +// +// 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_CHECK_CONTAINER_SIZE_HPP +#define MSGPACK_CHECK_CONTAINER_SIZE_HPP + +#include "rpc/msgpack/versioning.hpp" +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +struct container_size_overflow : public std::runtime_error { + explicit container_size_overflow(const std::string& msg) + :std::runtime_error(msg) {} +#if !defined(MSGPACK_USE_CPP03) + explicit container_size_overflow(const char* msg): + std::runtime_error(msg) {} +#endif // !defined(MSGPACK_USE_CPP03) +}; + +namespace detail { + +template +inline void check_container_size(std::size_t size) { + if (size > 0xffffffff) throw container_size_overflow("container size overflow"); +} + +template <> +inline void check_container_size<4>(std::size_t /*size*/) { +} + +template +inline void check_container_size_for_ext(std::size_t size) { + if (size > 0xffffffff) throw container_size_overflow("container size overflow"); +} + +template <> +inline void check_container_size_for_ext<4>(std::size_t size) { + if (size > 0xfffffffe) throw container_size_overflow("container size overflow"); +} + +} // namespace detail + +template +inline uint32_t checked_get_container_size(T size) { + detail::check_container_size(size); + return static_cast(size); +} + + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_CHECK_CONTAINER_SIZE_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array.hpp new file mode 100644 index 000000000..0a234a1be --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array.hpp @@ -0,0 +1,146 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014-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_CPP11_ARRAY_HPP +#define MSGPACK_CPP11_ARRAY_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" +#include "rpc/msgpack/meta.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +namespace detail { + +namespace array { + +template +inline std::array concat( + std::array&& a1, + std::array&& a2, + clmdep_msgpack::seq, + clmdep_msgpack::seq) { + return {{ std::move(a1[I1])..., std::move(a2[I2])... }}; +} + +template +inline std::array concat(std::array&& a1, std::array&& a2) { + return concat(std::move(a1), std::move(a2), clmdep_msgpack::gen_seq(), clmdep_msgpack::gen_seq()); +} + +template +struct as_impl { + static std::array as(clmdep_msgpack::object const& o) { + clmdep_msgpack::object* p = o.via.array.ptr + N - 1; + return concat(as_impl::as(o), std::array{{p->as()}}); + } +}; + +template +struct as_impl { + static std::array as(clmdep_msgpack::object const& o) { + clmdep_msgpack::object* p = o.via.array.ptr; + return std::array{{p->as()}}; + } +}; + +template +struct as_impl { + static std::array as(clmdep_msgpack::object const&) { + return std::array(); + } +}; + +} // namespace array + +} // namespace detail + +template +struct as, typename std::enable_if::value>::type> { + std::array operator()(clmdep_msgpack::object const& o) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size != N) { throw clmdep_msgpack::type_error(); } + return detail::array::as_impl::as(o); + } +}; + +template +struct convert> { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::array& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size != N) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size > 0) { + clmdep_msgpack::object* p = o.via.array.ptr; + clmdep_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 +struct pack> { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::array& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.pack_array(size); + for(auto const& e : v) o.pack(e); + return o; + } +}; + +template +struct object_with_zone> { + void operator()(clmdep_msgpack::object::with_zone& o, const std::array& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + o.via.array.size = size; + o.via.array.ptr = p; + for (auto const& e : v) *p++ = clmdep_msgpack::object(e, o.zone); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP11_ARRAY_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array_char.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array_char.hpp new file mode 100644 index 000000000..e2a5dcf41 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array_char.hpp @@ -0,0 +1,97 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014-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_ARRAY_CHAR_HPP +#define MSGPACK_TYPE_ARRAY_CHAR_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template +struct convert> { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::array& v) const { + switch (o.type) { + case clmdep_msgpack::type::BIN: + if(o.via.bin.size != N) { throw clmdep_msgpack::type_error(); } + std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size); + break; + case clmdep_msgpack::type::STR: + if(o.via.str.size != N) { throw clmdep_msgpack::type_error(); } + std::memcpy(v.data(), o.via.str.ptr, N); + break; + default: + throw clmdep_msgpack::type_error(); + break; + } + return o; + } +}; + +template +struct pack> { + template + clmdep_msgpack::packer& operator()(clmdep_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 +struct object> { + void operator()(clmdep_msgpack::object& o, const std::array& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = clmdep_msgpack::type::BIN; + o.via.bin.ptr = v.data(); + o.via.bin.size = size; + } +}; + +template +struct object_with_zone> { + void operator()(clmdep_msgpack::object::with_zone& o, const std::array& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = clmdep_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 adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_ARRAY_CHAR_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array_unsigned_char.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array_unsigned_char.hpp new file mode 100644 index 000000000..35b1df63e --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/array_unsigned_char.hpp @@ -0,0 +1,97 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014-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_ARRAY_UNSIGNED_CHAR_HPP +#define MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template +struct convert> { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::array& v) const { + switch (o.type) { + case clmdep_msgpack::type::BIN: + if(o.via.bin.size != N) { throw clmdep_msgpack::type_error(); } + std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size); + break; + case clmdep_msgpack::type::STR: + if(o.via.str.size != N) { throw clmdep_msgpack::type_error(); } + std::memcpy(v.data(), o.via.str.ptr, N); + break; + default: + throw clmdep_msgpack::type_error(); + break; + } + return o; + } +}; + +template +struct pack> { + template + clmdep_msgpack::packer& operator()(clmdep_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(reinterpret_cast(v.data()), size); + + return o; + } +}; + +template +struct object> { + void operator()(clmdep_msgpack::object& o, const std::array& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = clmdep_msgpack::type::BIN; + o.via.bin.ptr = reinterpret_cast(v.data()); + o.via.bin.size = size; + } +}; + +template +struct object_with_zone> { + void operator()(clmdep_msgpack::object::with_zone& o, const std::array& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = clmdep_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 adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/forward_list.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/forward_list.hpp new file mode 100644 index 000000000..b12007609 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/forward_list.hpp @@ -0,0 +1,102 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 KONDO-2015 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_HPP +#define MSGPACK_CPP11_FORWARD_LIST_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template + struct as, typename std::enable_if::value>::type> { + std::forward_list operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + std::forward_list v; + clmdep_msgpack::object* p = o.via.array.ptr + o.via.array.size; + clmdep_msgpack::object* const pend = o.via.array.ptr; + while (p != pend) { + --p; + v.push_front(p->as()); + } + return v; + } +}; + +template +struct convert> { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::forward_list& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + v.resize(o.via.array.size); + clmdep_msgpack::object* p = o.via.array.ptr; + for (auto &e : v) { + p->convert(e); + ++p; + } + return o; + } +}; + +template +struct pack> { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::forward_list& v) const { + 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 +struct object_with_zone> { + void operator()(clmdep_msgpack::object::with_zone& o, const std::forward_list& v) const { + o.type = clmdep_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; + clmdep_msgpack::object* p = static_cast( + o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + o.via.array.ptr = p; + for(auto const& e : v) *p++ = clmdep_msgpack::object(e, o.zone); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP11_FORWARD_LIST_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/shared_ptr.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/shared_ptr.hpp new file mode 100644 index 000000000..9054c7810 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/shared_ptr.hpp @@ -0,0 +1,90 @@ +// +// 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_CPP11_SHARED_PTR_HPP +#define MSGPACK_CPP11_SHARED_PTR_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template +struct as, typename std::enable_if::value>::type> { + std::shared_ptr operator()(clmdep_msgpack::object const& o) const { + if(o.is_nil()) return nullptr; + return std::make_shared(o.as()); + } +}; + +template +struct convert> { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::shared_ptr& v) const { + if(o.is_nil()) v.reset(); + else { + v = std::make_shared(); + clmdep_msgpack::adaptor::convert()(o, *v); + } + return o; + } +}; + +template +struct pack> { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::shared_ptr& v) const { + if (v) o.pack(*v); + else o.pack_nil(); + return o; + } +}; + +template +struct object > { + void operator()(clmdep_msgpack::object& o, const std::shared_ptr& v) const { + if (v) clmdep_msgpack::adaptor::object()(o, *v); + else o.type = clmdep_msgpack::type::NIL; + } +}; + +template +struct object_with_zone> { + void operator()(clmdep_msgpack::object::with_zone& o, const std::shared_ptr& v) const { + if (v) clmdep_msgpack::adaptor::object_with_zone()(o, *v); + else o.type = clmdep_msgpack::type::NIL; + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP11_SHARED_PTR_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/tuple.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/tuple.hpp new file mode 100644 index 000000000..35be7b12d --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/tuple.hpp @@ -0,0 +1,184 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2015 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_HPP +#define MSGPACK_CPP11_TUPLE_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" +#include "rpc/msgpack/meta.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +// --- Pack from tuple to packer stream --- +template +struct StdTuplePacker { + static void pack( + clmdep_msgpack::packer& o, + const Tuple& v) { + StdTuplePacker::pack(o, v); + o.pack(std::get(v)); + } +}; + +template +struct StdTuplePacker { + static void pack ( + clmdep_msgpack::packer&, + const Tuple&) { + } +}; + +namespace adaptor { + +template +struct pack> { + template + clmdep_msgpack::packer& operator()( + clmdep_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 --- + +template +struct StdTupleAs; + +template +struct StdTupleAsImpl { + static std::tuple as(clmdep_msgpack::object const& o) { + return std::tuple_cat( + std::make_tuple(o.via.array.ptr[o.via.array.size - sizeof...(Args) - 1].as()), + StdTupleAs::as(o)); + } +}; + +template +struct StdTupleAs { + static std::tuple as(clmdep_msgpack::object const& o) { + return StdTupleAsImpl::as(o); + } +}; + +template <> +struct StdTupleAs<> { + static std::tuple<> as (clmdep_msgpack::object const&) { + return std::tuple<>(); + } +}; + +template +struct StdTupleConverter { + static void convert( + clmdep_msgpack::object const& o, + Tuple& v) { + StdTupleConverter::convert(o, v); + o.via.array.ptr[N-1].convert(v))>::type>(std::get(v)); + } +}; + +template +struct StdTupleConverter { + static void convert ( + clmdep_msgpack::object const&, + Tuple&) { + } +}; + +namespace adaptor { + +template +struct as, typename std::enable_if::value>::type> { + std::tuple operator()( + clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if (o.via.array.size < sizeof...(Args)) { throw clmdep_msgpack::type_error(); } + return StdTupleAs::as(o); + } +}; + +template +struct convert> { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + std::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < sizeof...(Args)) { throw clmdep_msgpack::type_error(); } + StdTupleConverter::convert(o, v); + return o; + } +}; + +} // namespace adaptor + +// --- Convert from tuple to object with zone --- +template +struct StdTupleToObjectWithZone { + static void convert( + clmdep_msgpack::object::with_zone& o, + const Tuple& v) { + StdTupleToObjectWithZone::convert(o, v); + o.via.array.ptr[N-1] = clmdep_msgpack::object(std::get(v), o.zone); + } +}; + +template +struct StdTupleToObjectWithZone { + static void convert ( + clmdep_msgpack::object::with_zone&, + const Tuple&) { + } +}; + +namespace adaptor { + +template +struct object_with_zone> { + void operator()( + clmdep_msgpack::object::with_zone& o, + std::tuple const& v) const { + uint32_t size = checked_get_container_size(sizeof...(Args)); + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + o.via.array.size = size; + StdTupleToObjectWithZone::convert(o, v); + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP11_TUPLE_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unique_ptr.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unique_ptr.hpp new file mode 100644 index 000000000..49792b069 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unique_ptr.hpp @@ -0,0 +1,90 @@ +// +// 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_CPP11_UNIQUE_PTR_HPP +#define MSGPACK_CPP11_UNIQUE_PTR_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template +struct as, typename std::enable_if::value>::type> { + std::unique_ptr operator()(clmdep_msgpack::object const& o) const { + if(o.is_nil()) return nullptr; + return std::unique_ptr(new T(o.as())); + } +}; + +template +struct convert> { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::unique_ptr& v) const { + if(o.is_nil()) v.reset(); + else { + v.reset(new T); + clmdep_msgpack::adaptor::convert()(o, *v); + } + return o; + } +}; + +template +struct pack> { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::unique_ptr& v) const { + if (v) o.pack(*v); + else o.pack_nil(); + return o; + } +}; + +template +struct object > { + void operator()(clmdep_msgpack::object& o, const std::unique_ptr& v) const { + if (v) clmdep_msgpack::adaptor::object()(o, *v); + else o.type = clmdep_msgpack::type::NIL; + } +}; + +template +struct object_with_zone> { + void operator()(clmdep_msgpack::object::with_zone& o, const std::unique_ptr& v) const { + if (v) clmdep_msgpack::adaptor::object_with_zone()(o, *v); + else o.type = clmdep_msgpack::type::NIL; + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP11_UNIQUE_PTR_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unordered_map.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unordered_map.hpp new file mode 100644 index 000000000..428c987de --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unordered_map.hpp @@ -0,0 +1,190 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014-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_UNORDERED_MAP_HPP +#define MSGPACK_TYPE_UNORDERED_MAP_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template +struct as< + std::unordered_map, + typename std::enable_if::value && clmdep_msgpack::has_as::value>::type> { + std::unordered_map operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object_kv* p(o.via.map.ptr); + clmdep_msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); + std::unordered_map v; + for (; p != pend; ++p) { + v.emplace(p->key.as(), p->val.as()); + } + return v; + } +}; + +template +struct convert> { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::unordered_map& v) const { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object_kv* p(o.via.map.ptr); + clmdep_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[std::move(key)]); + } + v = std::move(tmp); + return o; + } +}; + +template +struct pack> { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::unordered_map& v) const { + 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; + } +}; + +template +struct object_with_zone> { + void operator()(clmdep_msgpack::object::with_zone& o, const std::unordered_map& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object_kv)*size)); + clmdep_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 = clmdep_msgpack::object(it->first, o.zone); + p->val = clmdep_msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + + +template +struct as< + std::unordered_multimap, + typename std::enable_if::value && clmdep_msgpack::has_as::value>::type> { + std::unordered_multimap operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object_kv* p(o.via.map.ptr); + clmdep_msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); + std::unordered_multimap v; + for (; p != pend; ++p) { + v.emplace(p->key.as(), p->val.as()); + } + return v; + } +}; + +template +struct convert> { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::unordered_multimap& v) const { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object_kv* p(o.via.map.ptr); + clmdep_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(std::move(value)); + } + v = std::move(tmp); + return o; + } +}; + +template +struct pack> { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::unordered_multimap& v) const { + 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 +struct object_with_zone> { + void operator()(clmdep_msgpack::object::with_zone& o, const std::unordered_multimap& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object_kv)*size)); + clmdep_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 = clmdep_msgpack::object(it->first, o.zone); + p->val = clmdep_msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + + +#endif // MSGPACK_TYPE_UNORDERED_MAP_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unordered_set.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unordered_set.hpp new file mode 100644 index 000000000..2e5eeef11 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/cpp11/unordered_set.hpp @@ -0,0 +1,180 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014-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_UNORDERED_SET_HPP +#define MSGPACK_TYPE_UNORDERED_SET_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template +struct as, typename std::enable_if::value>::type> { + std::unordered_set operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object* p = o.via.array.ptr + o.via.array.size; + clmdep_msgpack::object* const pbegin = o.via.array.ptr; + std::unordered_set v; + while (p > pbegin) { + --p; + v.insert(p->as()); + } + return v; + } +}; + +template +struct convert> { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::unordered_set& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object* p = o.via.array.ptr + o.via.array.size; + clmdep_msgpack::object* const pbegin = o.via.array.ptr; + std::unordered_set tmp; + while(p > pbegin) { + --p; + tmp.insert(p->as()); + } + v = std::move(tmp); + return o; + } +}; + +template +struct pack> { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::unordered_set& v) const { + 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; + } +}; + +template +struct object_with_zone> { + void operator()(clmdep_msgpack::object::with_zone& o, const std::unordered_set& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + clmdep_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 = clmdep_msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + + +template +struct as, typename std::enable_if::value>::type> { + std::unordered_multiset operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object* p = o.via.array.ptr + o.via.array.size; + clmdep_msgpack::object* const pbegin = o.via.array.ptr; + std::unordered_multiset v; + while (p > pbegin) { + --p; + v.insert(p->as()); + } + return v; + } +}; + +template +struct convert> { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::unordered_multiset& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object* p = o.via.array.ptr + o.via.array.size; + clmdep_msgpack::object* const pbegin = o.via.array.ptr; + std::unordered_multiset tmp; + while(p > pbegin) { + --p; + tmp.insert(p->as()); + } + v = std::move(tmp); + return o; + } +}; + +template +struct pack> { + template + clmdep_msgpack::packer& operator()(clmdep_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()(clmdep_msgpack::object::with_zone& o, const std::unordered_multiset& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + clmdep_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 = clmdep_msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_UNORDERED_SET_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/define.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/define.hpp new file mode 100644 index 000000000..dce5f53c9 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/define.hpp @@ -0,0 +1,39 @@ +// +// 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_DEFINE_HPP +#define MSGPACK_DEFINE_HPP + +#include "rpc/msgpack/cpp_config.hpp" + +#if defined(MSGPACK_USE_CPP03) +#include "detail/cpp03_define_array.hpp" +#include "detail/cpp03_define_map.hpp" +#else // MSGPACK_USE_CPP03 +#include "detail/cpp11_define_array.hpp" +#include "detail/cpp11_define_map.hpp" +#endif // MSGPACK_USE_CPP03 + +#if defined(MSGPACK_USE_DEFINE_MAP) +#define MSGPACK_DEFINE MSGPACK_DEFINE_MAP +#define MSGPACK_BASE MSGPACK_BASE_MAP +#else // defined(MSGPACK_USE_DEFINE_MAP) +#define MSGPACK_DEFINE MSGPACK_DEFINE_ARRAY +#define MSGPACK_BASE MSGPACK_BASE_ARRAY +#endif // defined(MSGPACK_USE_DEFINE_MAP) + +#endif // MSGPACK_DEFINE_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/deque.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/deque.hpp new file mode 100644 index 000000000..e2e5b8530 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/deque.hpp @@ -0,0 +1,116 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2015 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_DEQUE_HPP +#define MSGPACK_TYPE_DEQUE_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +#if !defined(MSGPACK_USE_CPP03) + +template +struct as, typename std::enable_if::value>::type> { + std::deque operator()(const clmdep_msgpack::object& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + std::deque v; + if (o.via.array.size > 0) { + clmdep_msgpack::object* p = o.via.array.ptr; + clmdep_msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + do { + v.push_back(p->as()); + ++p; + } while (p < pend); + } + return v; + } +}; + +#endif // !defined(MSGPACK_USE_CPP03) + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::deque& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + v.resize(o.via.array.size); + clmdep_msgpack::object* p = o.via.array.ptr; + clmdep_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 + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::deque& v) const { + 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; + } +}; + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const std::deque& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + clmdep_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 = clmdep_msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif /* msgpack/type/deque.hpp */ diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_define_array.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_define_array.hpp new file mode 100644 index 000000000..b93dc7062 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_define_array.hpp @@ -0,0 +1,3498 @@ +// +// 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_CPP03_DEFINE_ARRAY_HPP +#define MSGPACK_CPP03_DEFINE_ARRAY_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/msgpack_tuple.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/object_fwd.hpp" + +#define MSGPACK_DEFINE_ARRAY(...) \ + template \ + void msgpack_pack(Packer& pk) const \ + { \ + clmdep_msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \ + } \ + void msgpack_unpack(clmdep_msgpack::object const& o) \ + { \ + clmdep_msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \ + }\ + template \ + void msgpack_object(MSGPACK_OBJECT* o, clmdep_msgpack::zone& z) const \ + { \ + clmdep_msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(o, z); \ + } + +#define MSGPACK_BASE_ARRAY(base) (*const_cast(static_cast(this))) + +// MSGPACK_ADD_ENUM must be used in the global namespace. +#define MSGPACK_ADD_ENUM(enum_name) \ + namespace clmdep_msgpack { \ + /** @cond */ \ + MSGPACK_API_VERSION_NAMESPACE(v1) { \ + /** @endcond */ \ + namespace adaptor { \ + template<> \ + struct convert { \ + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, enum_name& v) const {\ + int tmp; \ + o >> tmp; \ + v = static_cast(tmp); \ + return o; \ + } \ + }; \ + template<> \ + struct object { \ + void operator()(clmdep_msgpack::object& o, const enum_name& v) const {\ + o << static_cast(v); \ + } \ + }; \ + template<> \ + struct object_with_zone { \ + void operator()(clmdep_msgpack::object::with_zone& o, const enum_name& v) const { \ + o << static_cast(v); \ + } \ + }; \ + template<> \ + struct pack { \ + template \ + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const enum_name& v) const { \ + return o << static_cast(v); \ + } \ + }; \ + } \ + /** @cond */ \ + } \ + /** @endcond */ \ + } + +namespace clmdep_msgpack { +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond +namespace type { + +/// @cond + +template +struct define_array; +/// @endcond + +template <> +struct define_array<> { + typedef define_array<> value_type; + typedef tuple<> tuple_type; + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(0); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone&) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = nullptr; + o->via.array.size = 0; + } +}; + +/// @cond + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0) : + a0(_a0) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(1); + + pk.pack(a0); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*1)); + o->via.array.size = 1; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + } + + A0& a0; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1) : + a0(_a0), a1(_a1) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(2); + + pk.pack(a0); + pk.pack(a1); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*2)); + o->via.array.size = 2; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + } + + A0& a0; + A1& a1; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2) : + a0(_a0), a1(_a1), a2(_a2) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(3); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*3)); + o->via.array.size = 3; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + } + + A0& a0; + A1& a1; + A2& a2; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(4); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*4)); + o->via.array.size = 4; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(5); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*5)); + o->via.array.size = 5; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(6); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*6)); + o->via.array.size = 6; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(7); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*7)); + o->via.array.size = 7; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(8); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*8)); + o->via.array.size = 8; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(9); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*9)); + o->via.array.size = 9; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(10); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*10)); + o->via.array.size = 10; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(11); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*11)); + o->via.array.size = 11; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(12); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*12)); + o->via.array.size = 12; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(13); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*13)); + o->via.array.size = 13; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(14); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*14)); + o->via.array.size = 14; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(15); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*15)); + o->via.array.size = 15; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(16); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*16)); + o->via.array.size = 16; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(17); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*17)); + o->via.array.size = 17; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(18); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*18)); + o->via.array.size = 18; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(19); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*19)); + o->via.array.size = 19; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(20); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*20)); + o->via.array.size = 20; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(21); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*21)); + o->via.array.size = 21; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(22); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 22: ptr[21].convert(a21); + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*22)); + o->via.array.size = 22; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + o->via.array.ptr[21] = clmdep_msgpack::object(a21, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(23); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 23: ptr[22].convert(a22); + case 22: ptr[21].convert(a21); + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*23)); + o->via.array.size = 23; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + o->via.array.ptr[21] = clmdep_msgpack::object(a21, z); + o->via.array.ptr[22] = clmdep_msgpack::object(a22, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(24); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 24: ptr[23].convert(a23); + case 23: ptr[22].convert(a22); + case 22: ptr[21].convert(a21); + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*24)); + o->via.array.size = 24; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + o->via.array.ptr[21] = clmdep_msgpack::object(a21, z); + o->via.array.ptr[22] = clmdep_msgpack::object(a22, z); + o->via.array.ptr[23] = clmdep_msgpack::object(a23, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(25); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 25: ptr[24].convert(a24); + case 24: ptr[23].convert(a23); + case 23: ptr[22].convert(a22); + case 22: ptr[21].convert(a21); + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*25)); + o->via.array.size = 25; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + o->via.array.ptr[21] = clmdep_msgpack::object(a21, z); + o->via.array.ptr[22] = clmdep_msgpack::object(a22, z); + o->via.array.ptr[23] = clmdep_msgpack::object(a23, z); + o->via.array.ptr[24] = clmdep_msgpack::object(a24, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(26); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + pk.pack(a25); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 26: ptr[25].convert(a25); + case 25: ptr[24].convert(a24); + case 24: ptr[23].convert(a23); + case 23: ptr[22].convert(a22); + case 22: ptr[21].convert(a21); + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*26)); + o->via.array.size = 26; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + o->via.array.ptr[21] = clmdep_msgpack::object(a21, z); + o->via.array.ptr[22] = clmdep_msgpack::object(a22, z); + o->via.array.ptr[23] = clmdep_msgpack::object(a23, z); + o->via.array.ptr[24] = clmdep_msgpack::object(a24, z); + o->via.array.ptr[25] = clmdep_msgpack::object(a25, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; + A25& a25; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(27); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + pk.pack(a25); + pk.pack(a26); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 27: ptr[26].convert(a26); + case 26: ptr[25].convert(a25); + case 25: ptr[24].convert(a24); + case 24: ptr[23].convert(a23); + case 23: ptr[22].convert(a22); + case 22: ptr[21].convert(a21); + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*27)); + o->via.array.size = 27; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + o->via.array.ptr[21] = clmdep_msgpack::object(a21, z); + o->via.array.ptr[22] = clmdep_msgpack::object(a22, z); + o->via.array.ptr[23] = clmdep_msgpack::object(a23, z); + o->via.array.ptr[24] = clmdep_msgpack::object(a24, z); + o->via.array.ptr[25] = clmdep_msgpack::object(a25, z); + o->via.array.ptr[26] = clmdep_msgpack::object(a26, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; + A25& a25; + A26& a26; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(28); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + pk.pack(a25); + pk.pack(a26); + pk.pack(a27); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 28: ptr[27].convert(a27); + case 27: ptr[26].convert(a26); + case 26: ptr[25].convert(a25); + case 25: ptr[24].convert(a24); + case 24: ptr[23].convert(a23); + case 23: ptr[22].convert(a22); + case 22: ptr[21].convert(a21); + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*28)); + o->via.array.size = 28; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + o->via.array.ptr[21] = clmdep_msgpack::object(a21, z); + o->via.array.ptr[22] = clmdep_msgpack::object(a22, z); + o->via.array.ptr[23] = clmdep_msgpack::object(a23, z); + o->via.array.ptr[24] = clmdep_msgpack::object(a24, z); + o->via.array.ptr[25] = clmdep_msgpack::object(a25, z); + o->via.array.ptr[26] = clmdep_msgpack::object(a26, z); + o->via.array.ptr[27] = clmdep_msgpack::object(a27, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; + A25& a25; + A26& a26; + A27& a27; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(29); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + pk.pack(a25); + pk.pack(a26); + pk.pack(a27); + pk.pack(a28); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 29: ptr[28].convert(a28); + case 28: ptr[27].convert(a27); + case 27: ptr[26].convert(a26); + case 26: ptr[25].convert(a25); + case 25: ptr[24].convert(a24); + case 24: ptr[23].convert(a23); + case 23: ptr[22].convert(a22); + case 22: ptr[21].convert(a21); + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*29)); + o->via.array.size = 29; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + o->via.array.ptr[21] = clmdep_msgpack::object(a21, z); + o->via.array.ptr[22] = clmdep_msgpack::object(a22, z); + o->via.array.ptr[23] = clmdep_msgpack::object(a23, z); + o->via.array.ptr[24] = clmdep_msgpack::object(a24, z); + o->via.array.ptr[25] = clmdep_msgpack::object(a25, z); + o->via.array.ptr[26] = clmdep_msgpack::object(a26, z); + o->via.array.ptr[27] = clmdep_msgpack::object(a27, z); + o->via.array.ptr[28] = clmdep_msgpack::object(a28, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; + A25& a25; + A26& a26; + A27& a27; + A28& a28; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28, A29& _a29) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(30); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + pk.pack(a25); + pk.pack(a26); + pk.pack(a27); + pk.pack(a28); + pk.pack(a29); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 30: ptr[29].convert(a29); + case 29: ptr[28].convert(a28); + case 28: ptr[27].convert(a27); + case 27: ptr[26].convert(a26); + case 26: ptr[25].convert(a25); + case 25: ptr[24].convert(a24); + case 24: ptr[23].convert(a23); + case 23: ptr[22].convert(a22); + case 22: ptr[21].convert(a21); + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*30)); + o->via.array.size = 30; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + o->via.array.ptr[21] = clmdep_msgpack::object(a21, z); + o->via.array.ptr[22] = clmdep_msgpack::object(a22, z); + o->via.array.ptr[23] = clmdep_msgpack::object(a23, z); + o->via.array.ptr[24] = clmdep_msgpack::object(a24, z); + o->via.array.ptr[25] = clmdep_msgpack::object(a25, z); + o->via.array.ptr[26] = clmdep_msgpack::object(a26, z); + o->via.array.ptr[27] = clmdep_msgpack::object(a27, z); + o->via.array.ptr[28] = clmdep_msgpack::object(a28, z); + o->via.array.ptr[29] = clmdep_msgpack::object(a29, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; + A25& a25; + A26& a26; + A27& a27; + A28& a28; + A29& a29; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28, A29& _a29, A30& _a30) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29), a30(_a30) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(31); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + pk.pack(a25); + pk.pack(a26); + pk.pack(a27); + pk.pack(a28); + pk.pack(a29); + pk.pack(a30); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 31: ptr[30].convert(a30); + case 30: ptr[29].convert(a29); + case 29: ptr[28].convert(a28); + case 28: ptr[27].convert(a27); + case 27: ptr[26].convert(a26); + case 26: ptr[25].convert(a25); + case 25: ptr[24].convert(a24); + case 24: ptr[23].convert(a23); + case 23: ptr[22].convert(a22); + case 22: ptr[21].convert(a21); + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*31)); + o->via.array.size = 31; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + o->via.array.ptr[21] = clmdep_msgpack::object(a21, z); + o->via.array.ptr[22] = clmdep_msgpack::object(a22, z); + o->via.array.ptr[23] = clmdep_msgpack::object(a23, z); + o->via.array.ptr[24] = clmdep_msgpack::object(a24, z); + o->via.array.ptr[25] = clmdep_msgpack::object(a25, z); + o->via.array.ptr[26] = clmdep_msgpack::object(a26, z); + o->via.array.ptr[27] = clmdep_msgpack::object(a27, z); + o->via.array.ptr[28] = clmdep_msgpack::object(a28, z); + o->via.array.ptr[29] = clmdep_msgpack::object(a29, z); + o->via.array.ptr[30] = clmdep_msgpack::object(a30, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; + A25& a25; + A26& a26; + A27& a27; + A28& a28; + A29& a29; + A30& a30; +}; + +template +struct define_array { + typedef define_array value_type; + typedef tuple tuple_type; + define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28, A29& _a29, A30& _a30, A31& _a31) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29), a30(_a30), a31(_a31) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(32); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + pk.pack(a25); + pk.pack(a26); + pk.pack(a27); + pk.pack(a28); + pk.pack(a29); + pk.pack(a30); + pk.pack(a31); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + const size_t size = o.via.array.size; + if(size > 0) { + clmdep_msgpack::object *ptr = o.via.array.ptr; + switch(size) { + default: + case 32: ptr[31].convert(a31); + case 31: ptr[30].convert(a30); + case 30: ptr[29].convert(a29); + case 29: ptr[28].convert(a28); + case 28: ptr[27].convert(a27); + case 27: ptr[26].convert(a26); + case 26: ptr[25].convert(a25); + case 25: ptr[24].convert(a24); + case 24: ptr[23].convert(a23); + case 23: ptr[22].convert(a22); + case 22: ptr[21].convert(a21); + case 21: ptr[20].convert(a20); + case 20: ptr[19].convert(a19); + case 19: ptr[18].convert(a18); + case 18: ptr[17].convert(a17); + case 17: ptr[16].convert(a16); + case 16: ptr[15].convert(a15); + case 15: ptr[14].convert(a14); + case 14: ptr[13].convert(a13); + case 13: ptr[12].convert(a12); + case 12: ptr[11].convert(a11); + case 11: ptr[10].convert(a10); + case 10: ptr[9].convert(a9); + case 9: ptr[8].convert(a8); + case 8: ptr[7].convert(a7); + case 7: ptr[6].convert(a6); + case 6: ptr[5].convert(a5); + case 5: ptr[4].convert(a4); + case 4: ptr[3].convert(a3); + case 3: ptr[2].convert(a2); + case 2: ptr[1].convert(a1); + case 1: ptr[0].convert(a0); + } + } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*32)); + o->via.array.size = 32; + + o->via.array.ptr[0] = clmdep_msgpack::object(a0, z); + o->via.array.ptr[1] = clmdep_msgpack::object(a1, z); + o->via.array.ptr[2] = clmdep_msgpack::object(a2, z); + o->via.array.ptr[3] = clmdep_msgpack::object(a3, z); + o->via.array.ptr[4] = clmdep_msgpack::object(a4, z); + o->via.array.ptr[5] = clmdep_msgpack::object(a5, z); + o->via.array.ptr[6] = clmdep_msgpack::object(a6, z); + o->via.array.ptr[7] = clmdep_msgpack::object(a7, z); + o->via.array.ptr[8] = clmdep_msgpack::object(a8, z); + o->via.array.ptr[9] = clmdep_msgpack::object(a9, z); + o->via.array.ptr[10] = clmdep_msgpack::object(a10, z); + o->via.array.ptr[11] = clmdep_msgpack::object(a11, z); + o->via.array.ptr[12] = clmdep_msgpack::object(a12, z); + o->via.array.ptr[13] = clmdep_msgpack::object(a13, z); + o->via.array.ptr[14] = clmdep_msgpack::object(a14, z); + o->via.array.ptr[15] = clmdep_msgpack::object(a15, z); + o->via.array.ptr[16] = clmdep_msgpack::object(a16, z); + o->via.array.ptr[17] = clmdep_msgpack::object(a17, z); + o->via.array.ptr[18] = clmdep_msgpack::object(a18, z); + o->via.array.ptr[19] = clmdep_msgpack::object(a19, z); + o->via.array.ptr[20] = clmdep_msgpack::object(a20, z); + o->via.array.ptr[21] = clmdep_msgpack::object(a21, z); + o->via.array.ptr[22] = clmdep_msgpack::object(a22, z); + o->via.array.ptr[23] = clmdep_msgpack::object(a23, z); + o->via.array.ptr[24] = clmdep_msgpack::object(a24, z); + o->via.array.ptr[25] = clmdep_msgpack::object(a25, z); + o->via.array.ptr[26] = clmdep_msgpack::object(a26, z); + o->via.array.ptr[27] = clmdep_msgpack::object(a27, z); + o->via.array.ptr[28] = clmdep_msgpack::object(a28, z); + o->via.array.ptr[29] = clmdep_msgpack::object(a29, z); + o->via.array.ptr[30] = clmdep_msgpack::object(a30, z); + o->via.array.ptr[31] = clmdep_msgpack::object(a31, z); + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; + A25& a25; + A26& a26; + A27& a27; + A28& a28; + A29& a29; + A30& a30; + A31& a31; +}; + +/// @endcond + +inline define_array<> make_define_array() +{ + return define_array<>(); +} + +/// @cond + +template +inline define_array make_define_array(A0& a0) +{ + return define_array(a0); +} + +template +inline define_array make_define_array(A0& a0, A1& a1) +{ + return define_array(a0, a1); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2) +{ + return define_array(a0, a1, a2); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3) +{ + return define_array(a0, a1, a2, a3); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4) +{ + return define_array(a0, a1, a2, a3, a4); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) +{ + return define_array(a0, a1, a2, a3, a4, a5); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29, A30& a30) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30); +} + +template +inline define_array make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29, A30& a30, A31& a31) +{ + return define_array(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31); +} + +/// @endcond + +} // namespace type +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond +} // namespace clmdep_msgpack + + +#endif // MSGPACK_CPP03_DEFINE_ARRAY_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_define_map.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_define_map.hpp new file mode 100644 index 000000000..814240548 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_define_map.hpp @@ -0,0 +1,2799 @@ +// +// 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_CPP03_DEFINE_MAP_HPP +#define MSGPACK_CPP03_DEFINE_MAP_HPP + +// BOOST_PP_VARIADICS is defined in boost/preprocessor/config/config.hpp +// http://www.boost.org/libs/preprocessor/doc/ref/variadics.html +// However, supporting compiler detection is not complete. msgpack-c requires +// variadic macro arguments support. So BOOST_PP_VARIADICS is defined here explicitly. +#if !defined(MSGPACK_PP_VARIADICS) +#define MSGPACK_PP_VARIADICS +#endif + +#include + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/msgpack_tuple.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/object_fwd.hpp" + +#define MSGPACK_DEFINE_MAP_EACH_PROC(r, data, elem) \ + MSGPACK_PP_IF( \ + MSGPACK_PP_IS_BEGIN_PARENS(elem), \ + elem, \ + (MSGPACK_PP_STRINGIZE(elem))(elem) \ + ) + +#define MSGPACK_DEFINE_MAP_IMPL(...) \ + MSGPACK_PP_SEQ_TO_TUPLE( \ + MSGPACK_PP_SEQ_FOR_EACH( \ + MSGPACK_DEFINE_MAP_EACH_PROC, \ + 0, \ + MSGPACK_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \ + ) \ + ) + +#define MSGPACK_DEFINE_MAP(...) \ + template \ + void msgpack_pack(Packer& pk) const \ + { \ + clmdep_msgpack::type::make_define_map \ + MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ + .msgpack_pack(pk); \ + } \ + void msgpack_unpack(clmdep_msgpack::object const& o) \ + { \ + clmdep_msgpack::type::make_define_map \ + MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ + .msgpack_unpack(o); \ + }\ + template \ + void msgpack_object(MSGPACK_OBJECT* o, clmdep_msgpack::zone& z) const \ + { \ + clmdep_msgpack::type::make_define_map \ + MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ + .msgpack_object(o, z); \ + } + +#define MSGPACK_BASE_MAP(base) \ + (MSGPACK_PP_STRINGIZE(base))(*const_cast(static_cast(this))) + +namespace clmdep_msgpack { +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond +namespace type { + +/// @cond + +template +struct define_map; +/// @endcond + +template <> +struct define_map<> { + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(0); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone&) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = nullptr; + o->via.map.size = 0; + } +}; + +/// @cond + +template +struct define_map { + define_map(A0& _a0, A1& _a1) : + a0(_a0), a1(_a1) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(1); + + pk.pack(a0); + pk.pack(a1); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*1)); + o->via.map.size = 1; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + } + + A0& a0; + A1& a1; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(2); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*2)); + o->via.map.size = 2; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(3); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*3)); + o->via.map.size = 3; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(4); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*4)); + o->via.map.size = 4; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(5); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*5)); + o->via.map.size = 5; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(6); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + { + std::map::const_iterator it = kvmap.find(a10); + if (it != kvmap.end()) { + it->second->convert(a11); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*6)); + o->via.map.size = 6; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + o->via.map.ptr[5].key = clmdep_msgpack::object(a10, z); + o->via.map.ptr[5].val = clmdep_msgpack::object(a11, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(7); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + { + std::map::const_iterator it = kvmap.find(a10); + if (it != kvmap.end()) { + it->second->convert(a11); + } + } + + { + std::map::const_iterator it = kvmap.find(a12); + if (it != kvmap.end()) { + it->second->convert(a13); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*7)); + o->via.map.size = 7; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + o->via.map.ptr[5].key = clmdep_msgpack::object(a10, z); + o->via.map.ptr[5].val = clmdep_msgpack::object(a11, z); + + o->via.map.ptr[6].key = clmdep_msgpack::object(a12, z); + o->via.map.ptr[6].val = clmdep_msgpack::object(a13, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(8); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + { + std::map::const_iterator it = kvmap.find(a10); + if (it != kvmap.end()) { + it->second->convert(a11); + } + } + + { + std::map::const_iterator it = kvmap.find(a12); + if (it != kvmap.end()) { + it->second->convert(a13); + } + } + + { + std::map::const_iterator it = kvmap.find(a14); + if (it != kvmap.end()) { + it->second->convert(a15); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*8)); + o->via.map.size = 8; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + o->via.map.ptr[5].key = clmdep_msgpack::object(a10, z); + o->via.map.ptr[5].val = clmdep_msgpack::object(a11, z); + + o->via.map.ptr[6].key = clmdep_msgpack::object(a12, z); + o->via.map.ptr[6].val = clmdep_msgpack::object(a13, z); + + o->via.map.ptr[7].key = clmdep_msgpack::object(a14, z); + o->via.map.ptr[7].val = clmdep_msgpack::object(a15, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(9); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + { + std::map::const_iterator it = kvmap.find(a10); + if (it != kvmap.end()) { + it->second->convert(a11); + } + } + + { + std::map::const_iterator it = kvmap.find(a12); + if (it != kvmap.end()) { + it->second->convert(a13); + } + } + + { + std::map::const_iterator it = kvmap.find(a14); + if (it != kvmap.end()) { + it->second->convert(a15); + } + } + + { + std::map::const_iterator it = kvmap.find(a16); + if (it != kvmap.end()) { + it->second->convert(a17); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*9)); + o->via.map.size = 9; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + o->via.map.ptr[5].key = clmdep_msgpack::object(a10, z); + o->via.map.ptr[5].val = clmdep_msgpack::object(a11, z); + + o->via.map.ptr[6].key = clmdep_msgpack::object(a12, z); + o->via.map.ptr[6].val = clmdep_msgpack::object(a13, z); + + o->via.map.ptr[7].key = clmdep_msgpack::object(a14, z); + o->via.map.ptr[7].val = clmdep_msgpack::object(a15, z); + + o->via.map.ptr[8].key = clmdep_msgpack::object(a16, z); + o->via.map.ptr[8].val = clmdep_msgpack::object(a17, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(10); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + { + std::map::const_iterator it = kvmap.find(a10); + if (it != kvmap.end()) { + it->second->convert(a11); + } + } + + { + std::map::const_iterator it = kvmap.find(a12); + if (it != kvmap.end()) { + it->second->convert(a13); + } + } + + { + std::map::const_iterator it = kvmap.find(a14); + if (it != kvmap.end()) { + it->second->convert(a15); + } + } + + { + std::map::const_iterator it = kvmap.find(a16); + if (it != kvmap.end()) { + it->second->convert(a17); + } + } + + { + std::map::const_iterator it = kvmap.find(a18); + if (it != kvmap.end()) { + it->second->convert(a19); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*10)); + o->via.map.size = 10; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + o->via.map.ptr[5].key = clmdep_msgpack::object(a10, z); + o->via.map.ptr[5].val = clmdep_msgpack::object(a11, z); + + o->via.map.ptr[6].key = clmdep_msgpack::object(a12, z); + o->via.map.ptr[6].val = clmdep_msgpack::object(a13, z); + + o->via.map.ptr[7].key = clmdep_msgpack::object(a14, z); + o->via.map.ptr[7].val = clmdep_msgpack::object(a15, z); + + o->via.map.ptr[8].key = clmdep_msgpack::object(a16, z); + o->via.map.ptr[8].val = clmdep_msgpack::object(a17, z); + + o->via.map.ptr[9].key = clmdep_msgpack::object(a18, z); + o->via.map.ptr[9].val = clmdep_msgpack::object(a19, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(11); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + { + std::map::const_iterator it = kvmap.find(a10); + if (it != kvmap.end()) { + it->second->convert(a11); + } + } + + { + std::map::const_iterator it = kvmap.find(a12); + if (it != kvmap.end()) { + it->second->convert(a13); + } + } + + { + std::map::const_iterator it = kvmap.find(a14); + if (it != kvmap.end()) { + it->second->convert(a15); + } + } + + { + std::map::const_iterator it = kvmap.find(a16); + if (it != kvmap.end()) { + it->second->convert(a17); + } + } + + { + std::map::const_iterator it = kvmap.find(a18); + if (it != kvmap.end()) { + it->second->convert(a19); + } + } + + { + std::map::const_iterator it = kvmap.find(a20); + if (it != kvmap.end()) { + it->second->convert(a21); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*11)); + o->via.map.size = 11; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + o->via.map.ptr[5].key = clmdep_msgpack::object(a10, z); + o->via.map.ptr[5].val = clmdep_msgpack::object(a11, z); + + o->via.map.ptr[6].key = clmdep_msgpack::object(a12, z); + o->via.map.ptr[6].val = clmdep_msgpack::object(a13, z); + + o->via.map.ptr[7].key = clmdep_msgpack::object(a14, z); + o->via.map.ptr[7].val = clmdep_msgpack::object(a15, z); + + o->via.map.ptr[8].key = clmdep_msgpack::object(a16, z); + o->via.map.ptr[8].val = clmdep_msgpack::object(a17, z); + + o->via.map.ptr[9].key = clmdep_msgpack::object(a18, z); + o->via.map.ptr[9].val = clmdep_msgpack::object(a19, z); + + o->via.map.ptr[10].key = clmdep_msgpack::object(a20, z); + o->via.map.ptr[10].val = clmdep_msgpack::object(a21, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(12); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + { + std::map::const_iterator it = kvmap.find(a10); + if (it != kvmap.end()) { + it->second->convert(a11); + } + } + + { + std::map::const_iterator it = kvmap.find(a12); + if (it != kvmap.end()) { + it->second->convert(a13); + } + } + + { + std::map::const_iterator it = kvmap.find(a14); + if (it != kvmap.end()) { + it->second->convert(a15); + } + } + + { + std::map::const_iterator it = kvmap.find(a16); + if (it != kvmap.end()) { + it->second->convert(a17); + } + } + + { + std::map::const_iterator it = kvmap.find(a18); + if (it != kvmap.end()) { + it->second->convert(a19); + } + } + + { + std::map::const_iterator it = kvmap.find(a20); + if (it != kvmap.end()) { + it->second->convert(a21); + } + } + + { + std::map::const_iterator it = kvmap.find(a22); + if (it != kvmap.end()) { + it->second->convert(a23); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*12)); + o->via.map.size = 12; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + o->via.map.ptr[5].key = clmdep_msgpack::object(a10, z); + o->via.map.ptr[5].val = clmdep_msgpack::object(a11, z); + + o->via.map.ptr[6].key = clmdep_msgpack::object(a12, z); + o->via.map.ptr[6].val = clmdep_msgpack::object(a13, z); + + o->via.map.ptr[7].key = clmdep_msgpack::object(a14, z); + o->via.map.ptr[7].val = clmdep_msgpack::object(a15, z); + + o->via.map.ptr[8].key = clmdep_msgpack::object(a16, z); + o->via.map.ptr[8].val = clmdep_msgpack::object(a17, z); + + o->via.map.ptr[9].key = clmdep_msgpack::object(a18, z); + o->via.map.ptr[9].val = clmdep_msgpack::object(a19, z); + + o->via.map.ptr[10].key = clmdep_msgpack::object(a20, z); + o->via.map.ptr[10].val = clmdep_msgpack::object(a21, z); + + o->via.map.ptr[11].key = clmdep_msgpack::object(a22, z); + o->via.map.ptr[11].val = clmdep_msgpack::object(a23, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(13); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + pk.pack(a25); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + { + std::map::const_iterator it = kvmap.find(a10); + if (it != kvmap.end()) { + it->second->convert(a11); + } + } + + { + std::map::const_iterator it = kvmap.find(a12); + if (it != kvmap.end()) { + it->second->convert(a13); + } + } + + { + std::map::const_iterator it = kvmap.find(a14); + if (it != kvmap.end()) { + it->second->convert(a15); + } + } + + { + std::map::const_iterator it = kvmap.find(a16); + if (it != kvmap.end()) { + it->second->convert(a17); + } + } + + { + std::map::const_iterator it = kvmap.find(a18); + if (it != kvmap.end()) { + it->second->convert(a19); + } + } + + { + std::map::const_iterator it = kvmap.find(a20); + if (it != kvmap.end()) { + it->second->convert(a21); + } + } + + { + std::map::const_iterator it = kvmap.find(a22); + if (it != kvmap.end()) { + it->second->convert(a23); + } + } + + { + std::map::const_iterator it = kvmap.find(a24); + if (it != kvmap.end()) { + it->second->convert(a25); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*13)); + o->via.map.size = 13; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + o->via.map.ptr[5].key = clmdep_msgpack::object(a10, z); + o->via.map.ptr[5].val = clmdep_msgpack::object(a11, z); + + o->via.map.ptr[6].key = clmdep_msgpack::object(a12, z); + o->via.map.ptr[6].val = clmdep_msgpack::object(a13, z); + + o->via.map.ptr[7].key = clmdep_msgpack::object(a14, z); + o->via.map.ptr[7].val = clmdep_msgpack::object(a15, z); + + o->via.map.ptr[8].key = clmdep_msgpack::object(a16, z); + o->via.map.ptr[8].val = clmdep_msgpack::object(a17, z); + + o->via.map.ptr[9].key = clmdep_msgpack::object(a18, z); + o->via.map.ptr[9].val = clmdep_msgpack::object(a19, z); + + o->via.map.ptr[10].key = clmdep_msgpack::object(a20, z); + o->via.map.ptr[10].val = clmdep_msgpack::object(a21, z); + + o->via.map.ptr[11].key = clmdep_msgpack::object(a22, z); + o->via.map.ptr[11].val = clmdep_msgpack::object(a23, z); + + o->via.map.ptr[12].key = clmdep_msgpack::object(a24, z); + o->via.map.ptr[12].val = clmdep_msgpack::object(a25, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; + A25& a25; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(14); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + pk.pack(a25); + pk.pack(a26); + pk.pack(a27); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + { + std::map::const_iterator it = kvmap.find(a10); + if (it != kvmap.end()) { + it->second->convert(a11); + } + } + + { + std::map::const_iterator it = kvmap.find(a12); + if (it != kvmap.end()) { + it->second->convert(a13); + } + } + + { + std::map::const_iterator it = kvmap.find(a14); + if (it != kvmap.end()) { + it->second->convert(a15); + } + } + + { + std::map::const_iterator it = kvmap.find(a16); + if (it != kvmap.end()) { + it->second->convert(a17); + } + } + + { + std::map::const_iterator it = kvmap.find(a18); + if (it != kvmap.end()) { + it->second->convert(a19); + } + } + + { + std::map::const_iterator it = kvmap.find(a20); + if (it != kvmap.end()) { + it->second->convert(a21); + } + } + + { + std::map::const_iterator it = kvmap.find(a22); + if (it != kvmap.end()) { + it->second->convert(a23); + } + } + + { + std::map::const_iterator it = kvmap.find(a24); + if (it != kvmap.end()) { + it->second->convert(a25); + } + } + + { + std::map::const_iterator it = kvmap.find(a26); + if (it != kvmap.end()) { + it->second->convert(a27); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*14)); + o->via.map.size = 14; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + o->via.map.ptr[5].key = clmdep_msgpack::object(a10, z); + o->via.map.ptr[5].val = clmdep_msgpack::object(a11, z); + + o->via.map.ptr[6].key = clmdep_msgpack::object(a12, z); + o->via.map.ptr[6].val = clmdep_msgpack::object(a13, z); + + o->via.map.ptr[7].key = clmdep_msgpack::object(a14, z); + o->via.map.ptr[7].val = clmdep_msgpack::object(a15, z); + + o->via.map.ptr[8].key = clmdep_msgpack::object(a16, z); + o->via.map.ptr[8].val = clmdep_msgpack::object(a17, z); + + o->via.map.ptr[9].key = clmdep_msgpack::object(a18, z); + o->via.map.ptr[9].val = clmdep_msgpack::object(a19, z); + + o->via.map.ptr[10].key = clmdep_msgpack::object(a20, z); + o->via.map.ptr[10].val = clmdep_msgpack::object(a21, z); + + o->via.map.ptr[11].key = clmdep_msgpack::object(a22, z); + o->via.map.ptr[11].val = clmdep_msgpack::object(a23, z); + + o->via.map.ptr[12].key = clmdep_msgpack::object(a24, z); + o->via.map.ptr[12].val = clmdep_msgpack::object(a25, z); + + o->via.map.ptr[13].key = clmdep_msgpack::object(a26, z); + o->via.map.ptr[13].val = clmdep_msgpack::object(a27, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; + A25& a25; + A26& a26; + A27& a27; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28, A29& _a29) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(15); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + pk.pack(a25); + pk.pack(a26); + pk.pack(a27); + pk.pack(a28); + pk.pack(a29); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + { + std::map::const_iterator it = kvmap.find(a10); + if (it != kvmap.end()) { + it->second->convert(a11); + } + } + + { + std::map::const_iterator it = kvmap.find(a12); + if (it != kvmap.end()) { + it->second->convert(a13); + } + } + + { + std::map::const_iterator it = kvmap.find(a14); + if (it != kvmap.end()) { + it->second->convert(a15); + } + } + + { + std::map::const_iterator it = kvmap.find(a16); + if (it != kvmap.end()) { + it->second->convert(a17); + } + } + + { + std::map::const_iterator it = kvmap.find(a18); + if (it != kvmap.end()) { + it->second->convert(a19); + } + } + + { + std::map::const_iterator it = kvmap.find(a20); + if (it != kvmap.end()) { + it->second->convert(a21); + } + } + + { + std::map::const_iterator it = kvmap.find(a22); + if (it != kvmap.end()) { + it->second->convert(a23); + } + } + + { + std::map::const_iterator it = kvmap.find(a24); + if (it != kvmap.end()) { + it->second->convert(a25); + } + } + + { + std::map::const_iterator it = kvmap.find(a26); + if (it != kvmap.end()) { + it->second->convert(a27); + } + } + + { + std::map::const_iterator it = kvmap.find(a28); + if (it != kvmap.end()) { + it->second->convert(a29); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*15)); + o->via.map.size = 15; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + o->via.map.ptr[5].key = clmdep_msgpack::object(a10, z); + o->via.map.ptr[5].val = clmdep_msgpack::object(a11, z); + + o->via.map.ptr[6].key = clmdep_msgpack::object(a12, z); + o->via.map.ptr[6].val = clmdep_msgpack::object(a13, z); + + o->via.map.ptr[7].key = clmdep_msgpack::object(a14, z); + o->via.map.ptr[7].val = clmdep_msgpack::object(a15, z); + + o->via.map.ptr[8].key = clmdep_msgpack::object(a16, z); + o->via.map.ptr[8].val = clmdep_msgpack::object(a17, z); + + o->via.map.ptr[9].key = clmdep_msgpack::object(a18, z); + o->via.map.ptr[9].val = clmdep_msgpack::object(a19, z); + + o->via.map.ptr[10].key = clmdep_msgpack::object(a20, z); + o->via.map.ptr[10].val = clmdep_msgpack::object(a21, z); + + o->via.map.ptr[11].key = clmdep_msgpack::object(a22, z); + o->via.map.ptr[11].val = clmdep_msgpack::object(a23, z); + + o->via.map.ptr[12].key = clmdep_msgpack::object(a24, z); + o->via.map.ptr[12].val = clmdep_msgpack::object(a25, z); + + o->via.map.ptr[13].key = clmdep_msgpack::object(a26, z); + o->via.map.ptr[13].val = clmdep_msgpack::object(a27, z); + + o->via.map.ptr[14].key = clmdep_msgpack::object(a28, z); + o->via.map.ptr[14].val = clmdep_msgpack::object(a29, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; + A25& a25; + A26& a26; + A27& a27; + A28& a28; + A29& a29; +}; + +template +struct define_map { + define_map(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28, A29& _a29, A30& _a30, A31& _a31) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29), a30(_a30), a31(_a31) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_map(16); + + pk.pack(a0); + pk.pack(a1); + pk.pack(a2); + pk.pack(a3); + pk.pack(a4); + pk.pack(a5); + pk.pack(a6); + pk.pack(a7); + pk.pack(a8); + pk.pack(a9); + pk.pack(a10); + pk.pack(a11); + pk.pack(a12); + pk.pack(a13); + pk.pack(a14); + pk.pack(a15); + pk.pack(a16); + pk.pack(a17); + pk.pack(a18); + pk.pack(a19); + pk.pack(a20); + pk.pack(a21); + pk.pack(a22); + pk.pack(a23); + pk.pack(a24); + pk.pack(a25); + pk.pack(a26); + pk.pack(a27); + pk.pack(a28); + pk.pack(a29); + pk.pack(a30); + pk.pack(a31); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.insert( + std::map::value_type( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val + ) + ); + } + + { + std::map::const_iterator it = kvmap.find(a0); + if (it != kvmap.end()) { + it->second->convert(a1); + } + } + + { + std::map::const_iterator it = kvmap.find(a2); + if (it != kvmap.end()) { + it->second->convert(a3); + } + } + + { + std::map::const_iterator it = kvmap.find(a4); + if (it != kvmap.end()) { + it->second->convert(a5); + } + } + + { + std::map::const_iterator it = kvmap.find(a6); + if (it != kvmap.end()) { + it->second->convert(a7); + } + } + + { + std::map::const_iterator it = kvmap.find(a8); + if (it != kvmap.end()) { + it->second->convert(a9); + } + } + + { + std::map::const_iterator it = kvmap.find(a10); + if (it != kvmap.end()) { + it->second->convert(a11); + } + } + + { + std::map::const_iterator it = kvmap.find(a12); + if (it != kvmap.end()) { + it->second->convert(a13); + } + } + + { + std::map::const_iterator it = kvmap.find(a14); + if (it != kvmap.end()) { + it->second->convert(a15); + } + } + + { + std::map::const_iterator it = kvmap.find(a16); + if (it != kvmap.end()) { + it->second->convert(a17); + } + } + + { + std::map::const_iterator it = kvmap.find(a18); + if (it != kvmap.end()) { + it->second->convert(a19); + } + } + + { + std::map::const_iterator it = kvmap.find(a20); + if (it != kvmap.end()) { + it->second->convert(a21); + } + } + + { + std::map::const_iterator it = kvmap.find(a22); + if (it != kvmap.end()) { + it->second->convert(a23); + } + } + + { + std::map::const_iterator it = kvmap.find(a24); + if (it != kvmap.end()) { + it->second->convert(a25); + } + } + + { + std::map::const_iterator it = kvmap.find(a26); + if (it != kvmap.end()) { + it->second->convert(a27); + } + } + + { + std::map::const_iterator it = kvmap.find(a28); + if (it != kvmap.end()) { + it->second->convert(a29); + } + } + + { + std::map::const_iterator it = kvmap.find(a30); + if (it != kvmap.end()) { + it->second->convert(a31); + } + } + + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*16)); + o->via.map.size = 16; + + o->via.map.ptr[0].key = clmdep_msgpack::object(a0, z); + o->via.map.ptr[0].val = clmdep_msgpack::object(a1, z); + + o->via.map.ptr[1].key = clmdep_msgpack::object(a2, z); + o->via.map.ptr[1].val = clmdep_msgpack::object(a3, z); + + o->via.map.ptr[2].key = clmdep_msgpack::object(a4, z); + o->via.map.ptr[2].val = clmdep_msgpack::object(a5, z); + + o->via.map.ptr[3].key = clmdep_msgpack::object(a6, z); + o->via.map.ptr[3].val = clmdep_msgpack::object(a7, z); + + o->via.map.ptr[4].key = clmdep_msgpack::object(a8, z); + o->via.map.ptr[4].val = clmdep_msgpack::object(a9, z); + + o->via.map.ptr[5].key = clmdep_msgpack::object(a10, z); + o->via.map.ptr[5].val = clmdep_msgpack::object(a11, z); + + o->via.map.ptr[6].key = clmdep_msgpack::object(a12, z); + o->via.map.ptr[6].val = clmdep_msgpack::object(a13, z); + + o->via.map.ptr[7].key = clmdep_msgpack::object(a14, z); + o->via.map.ptr[7].val = clmdep_msgpack::object(a15, z); + + o->via.map.ptr[8].key = clmdep_msgpack::object(a16, z); + o->via.map.ptr[8].val = clmdep_msgpack::object(a17, z); + + o->via.map.ptr[9].key = clmdep_msgpack::object(a18, z); + o->via.map.ptr[9].val = clmdep_msgpack::object(a19, z); + + o->via.map.ptr[10].key = clmdep_msgpack::object(a20, z); + o->via.map.ptr[10].val = clmdep_msgpack::object(a21, z); + + o->via.map.ptr[11].key = clmdep_msgpack::object(a22, z); + o->via.map.ptr[11].val = clmdep_msgpack::object(a23, z); + + o->via.map.ptr[12].key = clmdep_msgpack::object(a24, z); + o->via.map.ptr[12].val = clmdep_msgpack::object(a25, z); + + o->via.map.ptr[13].key = clmdep_msgpack::object(a26, z); + o->via.map.ptr[13].val = clmdep_msgpack::object(a27, z); + + o->via.map.ptr[14].key = clmdep_msgpack::object(a28, z); + o->via.map.ptr[14].val = clmdep_msgpack::object(a29, z); + + o->via.map.ptr[15].key = clmdep_msgpack::object(a30, z); + o->via.map.ptr[15].val = clmdep_msgpack::object(a31, z); + + } + + A0& a0; + A1& a1; + A2& a2; + A3& a3; + A4& a4; + A5& a5; + A6& a6; + A7& a7; + A8& a8; + A9& a9; + A10& a10; + A11& a11; + A12& a12; + A13& a13; + A14& a14; + A15& a15; + A16& a16; + A17& a17; + A18& a18; + A19& a19; + A20& a20; + A21& a21; + A22& a22; + A23& a23; + A24& a24; + A25& a25; + A26& a26; + A27& a27; + A28& a28; + A29& a29; + A30& a30; + A31& a31; +}; + +/// @endcond + +inline define_map<> make_define_map() +{ + return define_map<>(); +} + +/// @cond + +template +inline define_map make_define_map(A0& a0) +{ + return define_map(a0); +} + +template +inline define_map make_define_map(A0& a0, A1& a1) +{ + return define_map(a0, a1); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2) +{ + return define_map(a0, a1, a2); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3) +{ + return define_map(a0, a1, a2, a3); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4) +{ + return define_map(a0, a1, a2, a3, a4); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) +{ + return define_map(a0, a1, a2, a3, a4, a5); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29, A30& a30) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30); +} + +template +inline define_map make_define_map(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29, A30& a30, A31& a31) +{ + return define_map(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31); +} + +/// @endcond + +} // namespace type +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP03_DEFINE_MAP_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp new file mode 100644 index 000000000..0ec6d4f3c --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp @@ -0,0 +1,13917 @@ +// +// 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_HPP +#define MSGPACK_CPP03_MSGPACK_TUPLE_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/object.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace type { + +// FIXME operator== +// FIXME operator!= + + +/// @cond +template +struct tuple; +/// @endcond + +template +struct tuple_element; + +template +struct const_tuple_element; + +template +struct tuple_type { + typedef T type; + typedef T value_type; + typedef T& reference; + typedef const T& const_reference; + typedef const T& transparent_reference; +}; + +template +struct tuple_type { + typedef T type; + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T& transparent_reference; +}; + +template +struct tuple_type { + typedef T type; + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef const T& transparent_reference; +}; + +/// @cond + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 21> : tuple_type { + tuple_element(tuple& x) : m_x(x.a21) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 21> : tuple_type { + tuple_element(tuple& x) : m_x(x.a21) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 22> : tuple_type { + tuple_element(tuple& x) : m_x(x.a22) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 21> : tuple_type { + tuple_element(tuple& x) : m_x(x.a21) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 22> : tuple_type { + tuple_element(tuple& x) : m_x(x.a22) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 23> : tuple_type { + tuple_element(tuple& x) : m_x(x.a23) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 21> : tuple_type { + tuple_element(tuple& x) : m_x(x.a21) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 22> : tuple_type { + tuple_element(tuple& x) : m_x(x.a22) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 23> : tuple_type { + tuple_element(tuple& x) : m_x(x.a23) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 24> : tuple_type { + tuple_element(tuple& x) : m_x(x.a24) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 21> : tuple_type { + tuple_element(tuple& x) : m_x(x.a21) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 22> : tuple_type { + tuple_element(tuple& x) : m_x(x.a22) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 23> : tuple_type { + tuple_element(tuple& x) : m_x(x.a23) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 24> : tuple_type { + tuple_element(tuple& x) : m_x(x.a24) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 25> : tuple_type { + tuple_element(tuple& x) : m_x(x.a25) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 21> : tuple_type { + tuple_element(tuple& x) : m_x(x.a21) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 22> : tuple_type { + tuple_element(tuple& x) : m_x(x.a22) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 23> : tuple_type { + tuple_element(tuple& x) : m_x(x.a23) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 24> : tuple_type { + tuple_element(tuple& x) : m_x(x.a24) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 25> : tuple_type { + tuple_element(tuple& x) : m_x(x.a25) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 26> : tuple_type { + tuple_element(tuple& x) : m_x(x.a26) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 21> : tuple_type { + tuple_element(tuple& x) : m_x(x.a21) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 22> : tuple_type { + tuple_element(tuple& x) : m_x(x.a22) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 23> : tuple_type { + tuple_element(tuple& x) : m_x(x.a23) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 24> : tuple_type { + tuple_element(tuple& x) : m_x(x.a24) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 25> : tuple_type { + tuple_element(tuple& x) : m_x(x.a25) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 26> : tuple_type { + tuple_element(tuple& x) : m_x(x.a26) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 27> : tuple_type { + tuple_element(tuple& x) : m_x(x.a27) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 21> : tuple_type { + tuple_element(tuple& x) : m_x(x.a21) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 22> : tuple_type { + tuple_element(tuple& x) : m_x(x.a22) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 23> : tuple_type { + tuple_element(tuple& x) : m_x(x.a23) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 24> : tuple_type { + tuple_element(tuple& x) : m_x(x.a24) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 25> : tuple_type { + tuple_element(tuple& x) : m_x(x.a25) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 26> : tuple_type { + tuple_element(tuple& x) : m_x(x.a26) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 27> : tuple_type { + tuple_element(tuple& x) : m_x(x.a27) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 28> : tuple_type { + tuple_element(tuple& x) : m_x(x.a28) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 21> : tuple_type { + tuple_element(tuple& x) : m_x(x.a21) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 22> : tuple_type { + tuple_element(tuple& x) : m_x(x.a22) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 23> : tuple_type { + tuple_element(tuple& x) : m_x(x.a23) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 24> : tuple_type { + tuple_element(tuple& x) : m_x(x.a24) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 25> : tuple_type { + tuple_element(tuple& x) : m_x(x.a25) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 26> : tuple_type { + tuple_element(tuple& x) : m_x(x.a26) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 27> : tuple_type { + tuple_element(tuple& x) : m_x(x.a27) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 28> : tuple_type { + tuple_element(tuple& x) : m_x(x.a28) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 29> : tuple_type { + tuple_element(tuple& x) : m_x(x.a29) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 21> : tuple_type { + tuple_element(tuple& x) : m_x(x.a21) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 22> : tuple_type { + tuple_element(tuple& x) : m_x(x.a22) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 23> : tuple_type { + tuple_element(tuple& x) : m_x(x.a23) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 24> : tuple_type { + tuple_element(tuple& x) : m_x(x.a24) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 25> : tuple_type { + tuple_element(tuple& x) : m_x(x.a25) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 26> : tuple_type { + tuple_element(tuple& x) : m_x(x.a26) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 27> : tuple_type { + tuple_element(tuple& x) : m_x(x.a27) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 28> : tuple_type { + tuple_element(tuple& x) : m_x(x.a28) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 29> : tuple_type { + tuple_element(tuple& x) : m_x(x.a29) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 30> : tuple_type { + tuple_element(tuple& x) : m_x(x.a30) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + +template +struct tuple_element, 0> : tuple_type { + tuple_element(tuple& x) : m_x(x.a0) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 1> : tuple_type { + tuple_element(tuple& x) : m_x(x.a1) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 2> : tuple_type { + tuple_element(tuple& x) : m_x(x.a2) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 3> : tuple_type { + tuple_element(tuple& x) : m_x(x.a3) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 4> : tuple_type { + tuple_element(tuple& x) : m_x(x.a4) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 5> : tuple_type { + tuple_element(tuple& x) : m_x(x.a5) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 6> : tuple_type { + tuple_element(tuple& x) : m_x(x.a6) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 7> : tuple_type { + tuple_element(tuple& x) : m_x(x.a7) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 8> : tuple_type { + tuple_element(tuple& x) : m_x(x.a8) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 9> : tuple_type { + tuple_element(tuple& x) : m_x(x.a9) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 10> : tuple_type { + tuple_element(tuple& x) : m_x(x.a10) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 11> : tuple_type { + tuple_element(tuple& x) : m_x(x.a11) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 12> : tuple_type { + tuple_element(tuple& x) : m_x(x.a12) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 13> : tuple_type { + tuple_element(tuple& x) : m_x(x.a13) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 14> : tuple_type { + tuple_element(tuple& x) : m_x(x.a14) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 15> : tuple_type { + tuple_element(tuple& x) : m_x(x.a15) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 16> : tuple_type { + tuple_element(tuple& x) : m_x(x.a16) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 17> : tuple_type { + tuple_element(tuple& x) : m_x(x.a17) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 18> : tuple_type { + tuple_element(tuple& x) : m_x(x.a18) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 19> : tuple_type { + tuple_element(tuple& x) : m_x(x.a19) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 20> : tuple_type { + tuple_element(tuple& x) : m_x(x.a20) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 21> : tuple_type { + tuple_element(tuple& x) : m_x(x.a21) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 22> : tuple_type { + tuple_element(tuple& x) : m_x(x.a22) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 23> : tuple_type { + tuple_element(tuple& x) : m_x(x.a23) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 24> : tuple_type { + tuple_element(tuple& x) : m_x(x.a24) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 25> : tuple_type { + tuple_element(tuple& x) : m_x(x.a25) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 26> : tuple_type { + tuple_element(tuple& x) : m_x(x.a26) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 27> : tuple_type { + tuple_element(tuple& x) : m_x(x.a27) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 28> : tuple_type { + tuple_element(tuple& x) : m_x(x.a28) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 29> : tuple_type { + tuple_element(tuple& x) : m_x(x.a29) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 30> : tuple_type { + tuple_element(tuple& x) : m_x(x.a30) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + +template +struct tuple_element, 31> : tuple_type { + tuple_element(tuple& x) : m_x(x.a31) {} + typename tuple_type::reference get() { return m_x; } + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::reference m_x; +}; + + + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 21> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a21) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 21> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a21) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 22> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a22) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 21> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a21) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 22> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a22) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 23> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a23) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 21> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a21) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 22> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a22) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 23> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a23) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 24> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a24) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 21> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a21) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 22> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a22) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 23> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a23) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 24> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a24) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 25> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a25) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 21> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a21) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 22> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a22) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 23> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a23) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 24> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a24) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 25> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a25) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 26> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a26) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 21> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a21) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 22> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a22) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 23> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a23) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 24> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a24) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 25> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a25) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 26> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a26) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 27> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a27) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 21> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a21) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 22> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a22) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 23> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a23) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 24> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a24) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 25> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a25) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 26> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a26) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 27> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a27) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 28> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a28) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 21> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a21) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 22> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a22) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 23> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a23) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 24> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a24) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 25> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a25) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 26> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a26) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 27> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a27) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 28> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a28) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 29> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a29) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 21> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a21) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 22> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a22) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 23> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a23) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 24> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a24) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 25> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a25) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 26> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a26) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 27> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a27) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 28> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a28) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 29> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a29) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 30> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a30) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + + +template +struct const_tuple_element, 0> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a0) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 1> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a1) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 2> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a2) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 3> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a3) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 4> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a4) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 5> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a5) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 6> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a6) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 7> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a7) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 8> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a8) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 9> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a9) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 10> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a10) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 11> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a11) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 12> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a12) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 13> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a13) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 14> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a14) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 15> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a15) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 16> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a16) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 17> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a17) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 18> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a18) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 19> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a19) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 20> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a20) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 21> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a21) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 22> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a22) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 23> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a23) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 24> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a24) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 25> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a25) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 26> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a26) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 27> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a27) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 28> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a28) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 29> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a29) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 30> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a30) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + +template +struct const_tuple_element, 31> : tuple_type { + const_tuple_element(const tuple& x) : m_x(x.a31) {} + typename tuple_type::const_reference get() const { return m_x; } +private: + typename tuple_type::const_reference m_x; +}; + + +/// @endcond + +template <> +struct tuple<> { + tuple() {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + typedef tuple<> value_type; +}; + +/// @cond + +template +struct tuple { + typedef tuple value_type; + tuple() {} + tuple(typename tuple_type::transparent_reference _a0) : + a0(_a0) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + tuple(typename tuple_type::transparent_reference _a0, typename tuple_type::transparent_reference _a1) : + a0(_a0), a1(_a1) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + tuple(typename tuple_type::transparent_reference _a0, typename tuple_type::transparent_reference _a1, typename tuple_type::transparent_reference _a2) : + a0(_a0), a1(_a1), a2(_a2) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; + A21 a21; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; + A21 a21; + A22 a22; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; + A21 a21; + A22 a22; + A23 a23; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; + A21 a21; + A22 a22; + A23 a23; + A24 a24; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; + A21 a21; + A22 a22; + A23 a23; + A24 a24; + A25 a25; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; + A21 a21; + A22 a22; + A23 a23; + A24 a24; + A25 a25; + A26 a26; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; + A21 a21; + A22 a22; + A23 a23; + A24 a24; + A25 a25; + A26 a26; + A27 a27; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; + A21 a21; + A22 a22; + A23 a23; + A24 a24; + A25 a25; + A26 a26; + A27 a27; + A28 a28; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; + A21 a21; + A22 a22; + A23 a23; + A24 a24; + A25 a25; + A26 a26; + A27 a27; + A28 a28; + A29 a29; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29), a30(_a30) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; + A21 a21; + A22 a22; + A23 a23; + A24 a24; + A25 a25; + A26 a26; + A27 a27; + A28 a28; + A29 a29; + A30 a30; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +template +struct tuple { + typedef tuple value_type; + tuple() {} + 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) : + a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29), a30(_a30), a31(_a31) {} + tuple(clmdep_msgpack::object const& o) { o.convert(*this); } + template typename tuple_element::reference get() + { return tuple_element(*this).get(); } + template typename const_tuple_element::const_reference get() const + { return const_tuple_element(*this).get(); } + + A0 a0; + A1 a1; + A2 a2; + A3 a3; + A4 a4; + A5 a5; + A6 a6; + A7 a7; + A8 a8; + A9 a9; + A10 a10; + A11 a11; + A12 a12; + A13 a13; + A14 a14; + A15 a15; + A16 a16; + A17 a17; + A18 a18; + A19 a19; + A20 a20; + A21 a21; + A22 a22; + A23 a23; + A24 a24; + A25 a25; + A26 a26; + A27 a27; + A28 a28; + A29 a29; + A30 a30; + A31 a31; +}; + +template +inline typename type::tuple_element, N>::reference get(type::tuple& t) +{ return t.template get(); } +template +inline typename type::const_tuple_element, N>::const_reference get(type::tuple const& t) +{ return t.template get(); } + +/// @endcond + +inline tuple<> make_tuple() +{ + return tuple<>(); +} + +/// @cond + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0) +{ + return tuple(a0); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1) +{ + return tuple(a0, a1); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2) +{ + return tuple(a0, a1, a2); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3) +{ + return tuple(a0, a1, a2, a3); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4) +{ + return tuple(a0, a1, a2, a3, a4); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5) +{ + return tuple(a0, a1, a2, a3, a4, a5); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30); +} + +template +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30, typename tuple_type::transparent_reference a31) +{ + return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31); +} + +/// @endcond + +} // namespace type + +namespace adaptor { + +template <> +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple<>&) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + return o; + } +}; + +/// @cond + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 1) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 2) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 3) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 4) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 5) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 6) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 7) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 8) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 9) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 10) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 11) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 12) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 13) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 14) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 15) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 16) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 17) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 18) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 19) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 20) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 21) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 22) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[21].clmdep_msgpack::object::convert::type>(v.template get<21>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 23) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[21].clmdep_msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[22].clmdep_msgpack::object::convert::type>(v.template get<22>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 24) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[21].clmdep_msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[22].clmdep_msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[23].clmdep_msgpack::object::convert::type>(v.template get<23>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 25) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[21].clmdep_msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[22].clmdep_msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[23].clmdep_msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[24].clmdep_msgpack::object::convert::type>(v.template get<24>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 26) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[21].clmdep_msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[22].clmdep_msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[23].clmdep_msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[24].clmdep_msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[25].clmdep_msgpack::object::convert::type>(v.template get<25>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 27) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[21].clmdep_msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[22].clmdep_msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[23].clmdep_msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[24].clmdep_msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[25].clmdep_msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[26].clmdep_msgpack::object::convert::type>(v.template get<26>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 28) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[21].clmdep_msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[22].clmdep_msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[23].clmdep_msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[24].clmdep_msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[25].clmdep_msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[26].clmdep_msgpack::object::convert::type>(v.template get<26>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[27].clmdep_msgpack::object::convert::type>(v.template get<27>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 29) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[21].clmdep_msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[22].clmdep_msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[23].clmdep_msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[24].clmdep_msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[25].clmdep_msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[26].clmdep_msgpack::object::convert::type>(v.template get<26>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[27].clmdep_msgpack::object::convert::type>(v.template get<27>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[28].clmdep_msgpack::object::convert::type>(v.template get<28>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 30) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[21].clmdep_msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[22].clmdep_msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[23].clmdep_msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[24].clmdep_msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[25].clmdep_msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[26].clmdep_msgpack::object::convert::type>(v.template get<26>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[27].clmdep_msgpack::object::convert::type>(v.template get<27>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[28].clmdep_msgpack::object::convert::type>(v.template get<28>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[29].clmdep_msgpack::object::convert::type>(v.template get<29>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 31) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[21].clmdep_msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[22].clmdep_msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[23].clmdep_msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[24].clmdep_msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[25].clmdep_msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[26].clmdep_msgpack::object::convert::type>(v.template get<26>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[27].clmdep_msgpack::object::convert::type>(v.template get<27>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[28].clmdep_msgpack::object::convert::type>(v.template get<28>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[29].clmdep_msgpack::object::convert::type>(v.template get<29>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[30].clmdep_msgpack::object::convert::type>(v.template get<30>()); + return o; + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < 32) { throw clmdep_msgpack::type_error(); } + + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[0].clmdep_msgpack::object::convert::type>(v.template get<0>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[1].clmdep_msgpack::object::convert::type>(v.template get<1>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[2].clmdep_msgpack::object::convert::type>(v.template get<2>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[3].clmdep_msgpack::object::convert::type>(v.template get<3>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[4].clmdep_msgpack::object::convert::type>(v.template get<4>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[5].clmdep_msgpack::object::convert::type>(v.template get<5>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[6].clmdep_msgpack::object::convert::type>(v.template get<6>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[7].clmdep_msgpack::object::convert::type>(v.template get<7>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[8].clmdep_msgpack::object::convert::type>(v.template get<8>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[9].clmdep_msgpack::object::convert::type>(v.template get<9>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[10].clmdep_msgpack::object::convert::type>(v.template get<10>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[11].clmdep_msgpack::object::convert::type>(v.template get<11>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[12].clmdep_msgpack::object::convert::type>(v.template get<12>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[13].clmdep_msgpack::object::convert::type>(v.template get<13>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[14].clmdep_msgpack::object::convert::type>(v.template get<14>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[15].clmdep_msgpack::object::convert::type>(v.template get<15>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[16].clmdep_msgpack::object::convert::type>(v.template get<16>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[17].clmdep_msgpack::object::convert::type>(v.template get<17>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[18].clmdep_msgpack::object::convert::type>(v.template get<18>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[19].clmdep_msgpack::object::convert::type>(v.template get<19>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[20].clmdep_msgpack::object::convert::type>(v.template get<20>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[21].clmdep_msgpack::object::convert::type>(v.template get<21>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[22].clmdep_msgpack::object::convert::type>(v.template get<22>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[23].clmdep_msgpack::object::convert::type>(v.template get<23>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[24].clmdep_msgpack::object::convert::type>(v.template get<24>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[25].clmdep_msgpack::object::convert::type>(v.template get<25>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[26].clmdep_msgpack::object::convert::type>(v.template get<26>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[27].clmdep_msgpack::object::convert::type>(v.template get<27>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[28].clmdep_msgpack::object::convert::type>(v.template get<28>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[29].clmdep_msgpack::object::convert::type>(v.template get<29>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[30].clmdep_msgpack::object::convert::type>(v.template get<30>()); + // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added. + o.via.array.ptr[31].clmdep_msgpack::object::convert::type>(v.template get<31>()); + return o; + } +}; + +/// @endcond + +template <> +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_msgpack::packer& o, + const type::tuple<>&) const { + o.pack_array(0); + return o; + } +}; + +/// @cond + +template +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_msgpack::packer& o, + const type::tuple& v) const { + o.pack_array(1); + + o.pack(v.template get<0>()); + return o; + } +}; + +template +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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 +struct pack > { + template + clmdep_msgpack::packer& operator()( + clmdep_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; + } +}; + +/// @endcond + +template <> +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple<>&) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } +}; + +/// @cond + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*1)); + o.via.array.size = 1; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*2)); + o.via.array.size = 2; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*3)); + o.via.array.size = 3; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*4)); + o.via.array.size = 4; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*5)); + o.via.array.size = 5; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*6)); + o.via.array.size = 6; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*7)); + o.via.array.size = 7; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*8)); + o.via.array.size = 8; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*9)); + o.via.array.size = 9; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*10)); + o.via.array.size = 10; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*11)); + o.via.array.size = 11; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*12)); + o.via.array.size = 12; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*13)); + o.via.array.size = 13; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*14)); + o.via.array.size = 14; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*15)); + o.via.array.size = 15; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*16)); + o.via.array.size = 16; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*17)); + o.via.array.size = 17; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*18)); + o.via.array.size = 18; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*19)); + o.via.array.size = 19; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*20)); + o.via.array.size = 20; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*21)); + o.via.array.size = 21; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*22)); + o.via.array.size = 22; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*23)); + o.via.array.size = 23; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*24)); + o.via.array.size = 24; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*25)); + o.via.array.size = 25; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*26)); + o.via.array.size = 26; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*27)); + o.via.array.size = 27; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*28)); + o.via.array.size = 28; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone); + o.via.array.ptr[27] = clmdep_msgpack::object(v.template get<27>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*29)); + o.via.array.size = 29; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone); + o.via.array.ptr[27] = clmdep_msgpack::object(v.template get<27>(), o.zone); + o.via.array.ptr[28] = clmdep_msgpack::object(v.template get<28>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*30)); + o.via.array.size = 30; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone); + o.via.array.ptr[27] = clmdep_msgpack::object(v.template get<27>(), o.zone); + o.via.array.ptr[28] = clmdep_msgpack::object(v.template get<28>(), o.zone); + o.via.array.ptr[29] = clmdep_msgpack::object(v.template get<29>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*31)); + o.via.array.size = 31; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone); + o.via.array.ptr[27] = clmdep_msgpack::object(v.template get<27>(), o.zone); + o.via.array.ptr[28] = clmdep_msgpack::object(v.template get<28>(), o.zone); + o.via.array.ptr[29] = clmdep_msgpack::object(v.template get<29>(), o.zone); + o.via.array.ptr[30] = clmdep_msgpack::object(v.template get<30>(), o.zone); + } +}; + +template +struct object_with_zone > { + void operator()( + clmdep_msgpack::object::with_zone& o, + const type::tuple& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*32)); + o.via.array.size = 32; + + o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone); + o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone); + o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone); + o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone); + o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone); + o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone); + o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone); + o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone); + o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone); + o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone); + o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone); + o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone); + o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone); + o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone); + o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone); + o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone); + o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone); + o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone); + o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone); + o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone); + o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone); + o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone); + o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone); + o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone); + o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone); + o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone); + o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone); + o.via.array.ptr[27] = clmdep_msgpack::object(v.template get<27>(), o.zone); + o.via.array.ptr[28] = clmdep_msgpack::object(v.template get<28>(), o.zone); + o.via.array.ptr[29] = clmdep_msgpack::object(v.template get<29>(), o.zone); + o.via.array.ptr[30] = clmdep_msgpack::object(v.template get<30>(), o.zone); + o.via.array.ptr[31] = clmdep_msgpack::object(v.template get<31>(), o.zone); + } +}; + +/// @endcond + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP03_MSGPACK_TUPLE_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_define_array.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_define_array.hpp new file mode 100644 index 000000000..efd474678 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_define_array.hpp @@ -0,0 +1,201 @@ +// +// 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_CPP11_DEFINE_ARRAY_HPP +#define MSGPACK_CPP11_DEFINE_ARRAY_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" + +// for MSGPACK_ADD_ENUM +#include "rpc/msgpack/adaptor/int.hpp" + +#include +#include + +#define MSGPACK_DEFINE_ARRAY(...) \ + template \ + void msgpack_pack(Packer& pk) const \ + { \ + clmdep_msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \ + } \ + void msgpack_unpack(clmdep_msgpack::object const& o) \ + { \ + clmdep_msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \ + }\ + template \ + void msgpack_object(MSGPACK_OBJECT* o, clmdep_msgpack::zone& z) const \ + { \ + clmdep_msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(o, z); \ + } + +#define MSGPACK_BASE_ARRAY(base) (*const_cast(static_cast(this))) + +// MSGPACK_ADD_ENUM must be used in the global namespace. +#define MSGPACK_ADD_ENUM(enum_name) \ + namespace clmdep_msgpack { \ + /** @cond */ \ + MSGPACK_API_VERSION_NAMESPACE(v1) { \ + /** @endcond */ \ + namespace adaptor { \ + template<> \ + struct convert { \ + clmdep_msgpack::object const& operator()(clmdep_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()(clmdep_msgpack::object& o, const enum_name& v) const { \ + auto tmp = static_cast::type>(v); \ + o << tmp; \ + } \ + }; \ + template<> \ + struct object_with_zone { \ + void operator()(clmdep_msgpack::object::with_zone& o, const enum_name& v) const { \ + auto tmp = static_cast::type>(v); \ + o << tmp; \ + } \ + }; \ + template <> \ + struct pack { \ + template \ + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const enum_name& v) const { \ + return o << static_cast::type>(v); \ + } \ + }; \ + } \ + /** @cond */ \ + } \ + /** @endcond */ \ + } + +namespace clmdep_msgpack { +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond +namespace type { + +template +struct define_array_imp { + template + static void pack(Packer& pk, Tuple const& t) { + define_array_imp::pack(pk, t); + pk.pack(std::get(t)); + } + static void unpack(clmdep_msgpack::object const& o, Tuple& t) { + define_array_imp::unpack(o, t); + const size_t size = o.via.array.size; + if(size <= N-1) { return; } + o.via.array.ptr[N-1].convert(std::get(t)); + } + static void object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z, Tuple const& t) { + define_array_imp::object(o, z, t); + o->via.array.ptr[N-1] = clmdep_msgpack::object(std::get(t), z); + } +}; + +template +struct define_array_imp { + template + static void pack(Packer& pk, Tuple const& t) { + pk.pack(std::get<0>(t)); + } + static void unpack(clmdep_msgpack::object const& o, Tuple& t) { + const size_t size = o.via.array.size; + if(size <= 0) { return; } + o.via.array.ptr[0].convert(std::get<0>(t)); + } + static void object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z, Tuple const& t) { + o->via.array.ptr[0] = clmdep_msgpack::object(std::get<0>(t), z); + } +}; + +template +struct define_array { + typedef define_array value_type; + typedef std::tuple tuple_type; + define_array(Args&... args) : + a(args...) {} + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(sizeof...(Args)); + + define_array_imp, sizeof...(Args)>::pack(pk, a); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + + define_array_imp, sizeof...(Args)>::unpack(o, a); + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object)*sizeof...(Args))); + o->via.array.size = sizeof...(Args); + + define_array_imp, sizeof...(Args)>::object(o, z, a); + } + + std::tuple a; +}; + +template <> +struct define_array<> { + typedef define_array<> value_type; + typedef std::tuple<> tuple_type; + template + void msgpack_pack(Packer& pk) const + { + pk.pack_array(0); + } + void msgpack_unpack(clmdep_msgpack::object const& o) + { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone&) const + { + o->type = clmdep_msgpack::type::ARRAY; + o->via.array.ptr = NULL; + o->via.array.size = 0; + } +}; + +inline define_array<> make_define_array() +{ + return define_array<>(); +} + +template +inline define_array make_define_array(Args&... args) +{ + return define_array(args...); +} + +} // namespace type +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP11_DEFINE_ARRAY_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_define_map.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_define_map.hpp new file mode 100644 index 000000000..1ccadda1b --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_define_map.hpp @@ -0,0 +1,171 @@ +// +// 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_CPP11_DEFINE_MAP_HPP +#define MSGPACK_CPP11_DEFINE_MAP_HPP + +// BOOST_PP_VARIADICS is defined in boost/preprocessor/config/config.hpp +// http://www.boost.org/libs/preprocessor/doc/ref/variadics.html +// However, supporting compiler detection is not complete. msgpack-c requires +// variadic macro arguments support. So BOOST_PP_VARIADICS is defined here explicitly. +#if !defined(MSGPACK_PP_VARIADICS) +#define MSGPACK_PP_VARIADICS +#endif + +#include + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" + +// for MSGPACK_ADD_ENUM +#include "rpc/msgpack/adaptor/int.hpp" + +#include +#include + +#define MSGPACK_DEFINE_MAP_EACH_PROC(r, data, elem) \ + MSGPACK_PP_IF( \ + MSGPACK_PP_IS_BEGIN_PARENS(elem), \ + elem, \ + (MSGPACK_PP_STRINGIZE(elem))(elem) \ + ) + +#define MSGPACK_DEFINE_MAP_IMPL(...) \ + MSGPACK_PP_SEQ_TO_TUPLE( \ + MSGPACK_PP_SEQ_FOR_EACH( \ + MSGPACK_DEFINE_MAP_EACH_PROC, \ + 0, \ + MSGPACK_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \ + ) \ + ) + +#define MSGPACK_DEFINE_MAP(...) \ + template \ + void msgpack_pack(Packer& pk) const \ + { \ + clmdep_msgpack::type::make_define_map \ + MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ + .msgpack_pack(pk); \ + } \ + void msgpack_unpack(clmdep_msgpack::object const& o) \ + { \ + clmdep_msgpack::type::make_define_map \ + MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ + .msgpack_unpack(o); \ + }\ + template \ + void msgpack_object(MSGPACK_OBJECT* o, clmdep_msgpack::zone& z) const \ + { \ + clmdep_msgpack::type::make_define_map \ + MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ + .msgpack_object(o, z); \ + } + +#define MSGPACK_BASE_MAP(base) \ + (MSGPACK_PP_STRINGIZE(base))(*const_cast(static_cast(this))) + +namespace clmdep_msgpack { +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond +namespace type { + +template +struct define_map_imp { + template + static void pack(Packer& pk, Tuple const& t) { + define_map_imp::pack(pk, t); + pk.pack(std::get(t)); + } + static void unpack( + clmdep_msgpack::object const& o, Tuple const& t, + std::map const& kvmap) { + define_map_imp::unpack(o, t, kvmap); + auto it = kvmap.find(std::get(t)); + if (it != kvmap.end()) { + it->second->convert(std::get(t)); + } + } + static void object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z, Tuple const& t) { + define_map_imp::object(o, z, t); + o->via.map.ptr[(N-1)/2].key = clmdep_msgpack::object(std::get(t), z); + o->via.map.ptr[(N-1)/2].val = clmdep_msgpack::object(std::get(t), z); + } +}; + +template +struct define_map_imp { + template + static void pack(Packer&, Tuple const&) {} + static void unpack( + clmdep_msgpack::object const&, Tuple const&, + std::map const&) {} + static void object(clmdep_msgpack::object*, clmdep_msgpack::zone&, Tuple const&) {} +}; + +template +struct define_map { + define_map(Args&... args) : + a(args...) {} + template + void msgpack_pack(Packer& pk) const + { + static_assert(sizeof...(Args) % 2 == 0, ""); + pk.pack_map(sizeof...(Args) / 2); + + define_map_imp, sizeof...(Args)>::pack(pk, a); + } + void msgpack_unpack(clmdep_msgpack::object const& o) const + { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + std::map kvmap; + for (uint32_t i = 0; i < o.via.map.size; ++i) { + kvmap.emplace( + std::string( + o.via.map.ptr[i].key.via.str.ptr, + o.via.map.ptr[i].key.via.str.size), + &o.via.map.ptr[i].val); + } + define_map_imp, sizeof...(Args)>::unpack(o, a, kvmap); + } + void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const + { + static_assert(sizeof...(Args) % 2 == 0, ""); + o->type = clmdep_msgpack::type::MAP; + o->via.map.ptr = static_cast(z.allocate_align(sizeof(clmdep_msgpack::object_kv)*sizeof...(Args)/2)); + o->via.map.size = sizeof...(Args) / 2; + + define_map_imp, sizeof...(Args)>::object(o, z, a); + } + + std::tuple a; +}; + + +template +define_map make_define_map(Args&... args) +{ + return define_map(args...); +} + +} // namespace type +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP11_DEFINE_MAP_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp new file mode 100644 index 000000000..b98ac66d6 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp @@ -0,0 +1,283 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2015 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_HPP +#define MSGPACK_CPP11_MSGPACK_TUPLE_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/object_fwd.hpp" +#include "rpc/msgpack/meta.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace type { + // tuple + using std::get; + using std::tuple_size; + using std::tuple_element; + using std::uses_allocator; + using std::ignore; + using std::swap; + + template< class... Types > + class tuple : public std::tuple { + public: + using base = std::tuple; + + using base::base; + + tuple() = default; + tuple(tuple const&) = default; + tuple(tuple&&) = default; + + template + tuple(tuple const& other):base(static_cast const&>(other)) {} + template + tuple(tuple && other):base(static_cast &&>(other)) {} + + tuple& operator=(tuple const&) = default; + tuple& operator=(tuple&&) = default; + + template + tuple& operator=(tuple const& other) { + *static_cast(this) = static_cast const&>(other); + return *this; + } + template + tuple& operator=(tuple && other) { + *static_cast(this) = static_cast &&>(other); + return *this; + } + + template< std::size_t I> + typename tuple_element::type& + get() & { return std::get(*this); } + + template< std::size_t I> + typename tuple_element::type const& + get() const& { return std::get(*this); } + + template< std::size_t I> + typename tuple_element::type&& + get() && { return std::get(*this); } + }; + + template + inline tuple make_tuple(Args&&... args) { + return tuple(args...); + } + + template + inline tuple forward_as_tuple (Args&&... args) noexcept { + return tuple(std::forward(args)...); + } + + template + inline auto tuple_cat(Tuples&&... args) -> + decltype( + std::tuple_cat(std::forward::type::base>(args)...) + ) { + return std::tuple_cat(std::forward::type::base>(args)...); + } + template + inline tuple tie(Args&... args) { + return tuple(args...); + } +} // namespace type + +// --- Pack from tuple to packer stream --- +template +struct MsgpackTuplePacker { + static void pack( + clmdep_msgpack::packer& o, + const Tuple& v) { + MsgpackTuplePacker::pack(o, v); + o.pack(type::get(v)); + } +}; + +template +struct MsgpackTuplePacker { + static void pack ( + clmdep_msgpack::packer& o, + const Tuple& v) { + o.pack(type::get<0>(v)); + } +}; + +template +struct MsgpackTuplePacker { + static void pack ( + clmdep_msgpack::packer&, + const Tuple&) { + } +}; + +namespace adaptor { + +template +struct pack> { + template + clmdep_msgpack::packer& operator()( + clmdep_msgpack::packer& o, + const clmdep_msgpack::type::tuple& v) const { + o.pack_array(sizeof...(Args)); + MsgpackTuplePacker::pack(o, v); + return o; + } +}; + +} // namespace adaptor + +// --- Convert from tuple to object --- + +template +struct MsgpackTupleAs; + +template +struct MsgpackTupleAsImpl { + static clmdep_msgpack::type::tuple as(clmdep_msgpack::object const& o) { + return clmdep_msgpack::type::tuple_cat( + clmdep_msgpack::type::make_tuple(o.via.array.ptr[o.via.array.size - sizeof...(Args) - 1].as()), + MsgpackTupleAs::as(o)); + } +}; + +template +struct MsgpackTupleAs { + static clmdep_msgpack::type::tuple as(clmdep_msgpack::object const& o) { + return MsgpackTupleAsImpl::as(o); + } +}; + +template <> +struct MsgpackTupleAs<> { + static clmdep_msgpack::type::tuple<> as (clmdep_msgpack::object const&) { + return clmdep_msgpack::type::tuple<>(); + } +}; + +template +struct MsgpackTupleConverter { + static void convert( + clmdep_msgpack::object const& o, + Tuple& v) { + MsgpackTupleConverter::convert(o, v); + o.via.array.ptr[N-1].convert(v))>::type>(type::get(v)); + } +}; + +template +struct MsgpackTupleConverter { + static void convert ( + clmdep_msgpack::object const& o, + Tuple& v) { + o.via.array.ptr[0].convert(v))>::type>(type::get<0>(v)); + } +}; + +template +struct MsgpackTupleConverter { + static void convert ( + clmdep_msgpack::object const&, + Tuple&) { + } +}; + +namespace adaptor { + +template +struct as, typename std::enable_if::value>::type> { + clmdep_msgpack::type::tuple operator()( + clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if (o.via.array.size < sizeof...(Args)) { throw clmdep_msgpack::type_error(); } + return MsgpackTupleAs::as(o); + } +}; + +template +struct convert> { + clmdep_msgpack::object const& operator()( + clmdep_msgpack::object const& o, + clmdep_msgpack::type::tuple& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size < sizeof...(Args)) { throw clmdep_msgpack::type_error(); } + MsgpackTupleConverter::convert(o, v); + return o; + } +}; + +} // namespace adaptor + +// --- Convert from tuple to object with zone --- +template +struct MsgpackTupleToObjectWithZone { + static void convert( + clmdep_msgpack::object::with_zone& o, + const Tuple& v) { + MsgpackTupleToObjectWithZone::convert(o, v); + o.via.array.ptr[N-1] = clmdep_msgpack::object(type::get(v), o.zone); + } +}; + +template +struct MsgpackTupleToObjectWithZone { + static void convert ( + clmdep_msgpack::object::with_zone& o, + const Tuple& v) { + o.via.array.ptr[0] = clmdep_msgpack::object(type::get<0>(v), o.zone); + } +}; + +template +struct MsgpackTupleToObjectWithZone { + static void convert ( + clmdep_msgpack::object::with_zone&, + const Tuple&) { + } +}; + +namespace adaptor { + +template + struct object_with_zone> { + void operator()( + clmdep_msgpack::object::with_zone& o, + clmdep_msgpack::type::tuple const& v) const { + o.type = clmdep_msgpack::type::ARRAY; + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*sizeof...(Args))); + o.via.array.size = sizeof...(Args); + MsgpackTupleToObjectWithZone::convert(o, v); + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +///@endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP11_MSGPACK_TUPLE_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/ext.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/ext.hpp new file mode 100644 index 000000000..1f1a60408 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/ext.hpp @@ -0,0 +1,245 @@ +// +// 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_EXT_HPP +#define MSGPACK_TYPE_EXT_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include +#include +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace type { +class ext_ref; + +class ext { +public: + ext() : m_data(1, 0) {} + ext(int8_t t, const char* p, uint32_t s) { + detail::check_container_size_for_ext(s); + m_data.reserve(static_cast(s) + 1); + m_data.push_back(static_cast(t)); + m_data.insert(m_data.end(), p, p + s); + } + ext(int8_t t, uint32_t s) { + detail::check_container_size_for_ext(s); + m_data.resize(static_cast(s) + 1); + m_data[0] = static_cast(t); + } + ext(ext_ref const&); + int8_t type() const { + return static_cast(m_data[0]); + } + const char* data() const { + return &m_data[1]; + } + char* data() { + return &m_data[1]; + } + uint32_t size() const { + return static_cast(m_data.size()) - 1; + } + bool operator== (const ext& x) const { + return m_data == x.m_data; + } + + bool operator!= (const ext& x) const { + return !(*this == x); + } + + bool operator< (const ext& x) const { + return m_data < x.m_data; + } + + bool operator> (const ext& x) const { + return m_data > x.m_data; + } +private: + std::vector m_data; + friend class ext_ref; +}; + +} // namespace type + +namespace adaptor { + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, clmdep_msgpack::type::ext& v) const { + if(o.type != clmdep_msgpack::type::EXT) { + throw clmdep_msgpack::type_error(); + } + v = clmdep_msgpack::type::ext(o.via.ext.type(), o.via.ext.data(), o.via.ext.size); + return o; + } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const clmdep_msgpack::type::ext& v) const { + // size limit has aleady been checked at ext's constructor + uint32_t size = v.size(); + o.pack_ext(size, v.type()); + o.pack_ext_body(v.data(), size); + return o; + } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, const clmdep_msgpack::type::ext& v) const { + // size limit has aleady been checked at ext's constructor + uint32_t size = v.size(); + o.type = clmdep_msgpack::type::EXT; + char* ptr = static_cast(o.zone.allocate_align(size + 1)); + o.via.ext.ptr = ptr; + o.via.ext.size = size; + ptr[0] = static_cast(v.type()); + std::memcpy(ptr + 1, v.data(), size); + } +}; + +} // namespace adaptor + +namespace type { + +class ext_ref { +public: + // ext_ref should be default constructible to support 'convert'. + // A default constructed ext_ref object::m_ptr doesn't have the buffer to point to. + // In order to avoid nullptr checking branches, m_ptr points to m_size. + // So type() returns unspecified but valid value. It might be a zero because m_size + // is initialized as zero, but shoudn't assume that. + ext_ref() : m_ptr(static_cast(static_cast(&m_size))), m_size(0) {} + ext_ref(const char* p, uint32_t s) : + m_ptr(s == 0 ? static_cast(static_cast(&m_size)) : p), + m_size(s == 0 ? 0 : s - 1) { + detail::check_container_size_for_ext(s); + } + + // size limit has aleady been checked at ext's constructor + ext_ref(ext const& x) : m_ptr(&x.m_data[0]), m_size(x.size()) {} + + const char* data() const { + return m_ptr + 1; + } + + uint32_t size() const { + return m_size; + } + + int8_t type() const { + return static_cast(m_ptr[0]); + } + + std::string str() const { + return std::string(m_ptr + 1, m_size); + } + + bool operator== (const ext_ref& x) const { + return m_size == x.m_size && std::memcmp(m_ptr, x.m_ptr, m_size) == 0; + } + + bool operator!= (const ext_ref& x) const { + return !(*this == x); + } + + bool operator< (const ext_ref& x) const { + if (m_size < x.m_size) return true; + if (m_size > x.m_size) return false; + return std::memcmp(m_ptr, x.m_ptr, m_size) < 0; + } + + bool operator> (const ext_ref& x) const { + if (m_size > x.m_size) return true; + if (m_size < x.m_size) return false; + return std::memcmp(m_ptr, x.m_ptr, m_size) > 0; + } +private: + const char* m_ptr; + uint32_t m_size; + friend struct clmdep_msgpack::adaptor::object; +}; + +inline ext::ext(ext_ref const& x) { + // size limit has aleady been checked at ext_ref's constructor + m_data.reserve(x.size() + 1); + + m_data.push_back(x.type()); + m_data.insert(m_data.end(), x.data(), x.data() + x.size()); +} + +} // namespace type + +namespace adaptor { + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, clmdep_msgpack::type::ext_ref& v) const { + if(o.type != clmdep_msgpack::type::EXT) { throw clmdep_msgpack::type_error(); } + v = clmdep_msgpack::type::ext_ref(o.via.ext.ptr, o.via.ext.size + 1); + return o; + } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const clmdep_msgpack::type::ext_ref& v) const { + // size limit has aleady been checked at ext_ref's constructor + uint32_t size = v.size(); + o.pack_ext(size, v.type()); + o.pack_ext_body(v.data(), size); + return o; + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, const clmdep_msgpack::type::ext_ref& v) const { + // size limit has aleady been checked at ext_ref's constructor + uint32_t size = v.size(); + o.type = clmdep_msgpack::type::EXT; + o.via.ext.ptr = v.m_ptr; + o.via.ext.size = size; + } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, const clmdep_msgpack::type::ext_ref& v) const { + static_cast(o) << v; + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_EXT_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/fixint.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/fixint.hpp new file mode 100644 index 000000000..b5f5b0957 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/fixint.hpp @@ -0,0 +1,306 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2020 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_FIXINT_HPP +#define MSGPACK_TYPE_FIXINT_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/int.hpp" + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace type { + + +template +struct fix_int { + fix_int() : value(0) { } + fix_int(T value) : value(value) { } + + operator T() const { return value; } + + T get() const { return value; } + +private: + T value; +}; + + +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 + +namespace adaptor { + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, type::fix_int8& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, type::fix_int16& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, type::fix_int32& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, type::fix_int64& v) const + { v = type::detail::convert_integer(o); return o; } +}; + + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, type::fix_uint8& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, type::fix_uint16& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, type::fix_uint32& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, type::fix_uint64& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const type::fix_int8& v) const + { o.pack_fix_int8(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const type::fix_int16& v) const + { o.pack_fix_int16(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const type::fix_int32& v) const + { o.pack_fix_int32(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const type::fix_int64& v) const + { o.pack_fix_int64(v); return o; } +}; + + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const type::fix_uint8& v) const + { o.pack_fix_uint8(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const type::fix_uint16& v) const + { o.pack_fix_uint16(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const type::fix_uint32& v) const + { o.pack_fix_uint32(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const type::fix_uint64& v) const + { o.pack_fix_uint64(v); return o; } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, type::fix_int8 v) const { + if (v.get() < 0) { + o.type = clmdep_msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v.get(); + } + else { + o.type = clmdep_msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v.get(); + } + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, type::fix_int16 v) const { + if(v.get() < 0) { + o.type = clmdep_msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v.get(); + } + else { + o.type = clmdep_msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v.get(); + } + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, type::fix_int32 v) const { + if (v.get() < 0) { + o.type = clmdep_msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v.get(); + } + else { + o.type = clmdep_msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v.get(); + } + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, type::fix_int64 v) const { + if (v.get() < 0) { + o.type = clmdep_msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v.get(); + } + else { + o.type = clmdep_msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v.get(); + } + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, type::fix_uint8 v) const + { o.type = clmdep_msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, type::fix_uint16 v) const + { o.type = clmdep_msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, type::fix_uint32 v) const + { o.type = clmdep_msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, type::fix_uint64 v) const + { o.type = clmdep_msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, type::fix_int8 v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, type::fix_int16 v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, type::fix_int32 v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, type::fix_int64 v) const + { static_cast(o) << v; } +}; + + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, type::fix_uint8 v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, type::fix_uint16 v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, type::fix_uint32 v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, type::fix_uint64 v) const + { static_cast(o) << v; } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif /* msgpack/type/fixint.hpp */ diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/float.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/float.hpp new file mode 100644 index 000000000..8967b64d5 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/float.hpp @@ -0,0 +1,131 @@ +// +// 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_FLOAT_HPP +#define MSGPACK_TYPE_FLOAT_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/object_fwd.hpp" +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +// FIXME check overflow, underflow + +namespace adaptor { + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, float& v) const { + if(o.type == clmdep_msgpack::type::FLOAT) { + v = static_cast(o.via.f64); + } + else if (o.type == clmdep_msgpack::type::POSITIVE_INTEGER) { + v = static_cast(o.via.u64); + } + else if (o.type == clmdep_msgpack::type::NEGATIVE_INTEGER) { + v = static_cast(o.via.i64); + } + else { + throw clmdep_msgpack::type_error(); + } + return o; + } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const float& v) const { + o.pack_float(v); + return o; + } +}; + + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, double& v) const { + if(o.type == clmdep_msgpack::type::FLOAT) { + v = o.via.f64; + } + else if (o.type == clmdep_msgpack::type::POSITIVE_INTEGER) { + v = static_cast(o.via.u64); + } + else if (o.type == clmdep_msgpack::type::NEGATIVE_INTEGER) { + v = static_cast(o.via.i64); + } + else { + throw clmdep_msgpack::type_error(); + } + return o; + } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const double& v) const { + o.pack_double(v); + return o; + } +}; + + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, float v) const { + o.type = clmdep_msgpack::type::FLOAT; + o.via.f64 = static_cast(v); + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, double v) const { + o.type = clmdep_msgpack::type::FLOAT; + o.via.f64 = v; + } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, float v) const { + static_cast(o) << v; + } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, double v) const { + static_cast(o) << v; + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_FLOAT_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/int.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/int.hpp new file mode 100644 index 000000000..68856b235 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/int.hpp @@ -0,0 +1,436 @@ +// +// 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_INT_HPP +#define MSGPACK_TYPE_INT_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1){ +/// @endcond + +namespace type { +namespace detail { + template + struct convert_integer_sign; + + template + struct convert_integer_sign { + static inline T convert(clmdep_msgpack::object const& o) { + if(o.type == clmdep_msgpack::type::POSITIVE_INTEGER) { + if(o.via.u64 > static_cast(std::numeric_limits::max())) + { throw clmdep_msgpack::type_error(); } + return static_cast(o.via.u64); + } else if(o.type == clmdep_msgpack::type::NEGATIVE_INTEGER) { + if(o.via.i64 < static_cast(std::numeric_limits::min())) + { throw clmdep_msgpack::type_error(); } + return static_cast(o.via.i64); + } + throw clmdep_msgpack::type_error(); + } + }; + + template + struct convert_integer_sign { + static inline T convert(clmdep_msgpack::object const& o) { + if(o.type == clmdep_msgpack::type::POSITIVE_INTEGER) { + if(o.via.u64 > static_cast(std::numeric_limits::max())) + { throw clmdep_msgpack::type_error(); } + return static_cast(o.via.u64); + } + throw clmdep_msgpack::type_error(); + } + }; + + template + struct is_signed { + static const bool value = std::numeric_limits::is_signed; + }; + + template + static inline T convert_integer(clmdep_msgpack::object const& o) + { + return detail::convert_integer_sign::value>::convert(o); + } + + template + struct object_char_sign; + + template <> + struct object_char_sign { + static inline void make(clmdep_msgpack::object& o, char v) { + if (v < 0) { + o.type = clmdep_msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v; + } + else { + o.type = clmdep_msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v; + } + } + }; + + template <> + struct object_char_sign { + static inline void make(clmdep_msgpack::object& o, char v) { + o.type = clmdep_msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; + } + }; + + static inline void object_char(clmdep_msgpack::object& o, char v) { + return object_char_sign::value>::make(o, v); + } + +} // namespace detail +} // namespace type + +namespace adaptor { + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, char& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, signed char& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, signed short& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, signed int& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, signed long& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, signed long long& v) const + { v = type::detail::convert_integer(o); return o; } +}; + + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, unsigned char& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, unsigned short& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, unsigned int& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, unsigned long& v) const + { v = type::detail::convert_integer(o); return o; } +}; + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, unsigned long long& v) const + { v = type::detail::convert_integer(o); return o; } +}; + + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, char v) const + { o.pack_char(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, signed char v) const + { o.pack_signed_char(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, signed short v) const + { o.pack_short(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, signed int v) const + { o.pack_int(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, signed long v) const + { o.pack_long(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, signed long long v) const + { o.pack_long_long(v); return o; } +}; + + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, unsigned char v) const + { o.pack_unsigned_char(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, unsigned short v) const + { o.pack_unsigned_short(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, unsigned int v) const + { o.pack_unsigned_int(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, unsigned long v) const + { o.pack_unsigned_long(v); return o; } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, unsigned long long v) const + { o.pack_unsigned_long_long(v); return o; } +}; + + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, char v) const + { type::detail::object_char(o, v); } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, signed char v) const { + if (v < 0) { + o.type = clmdep_msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v; + } + else { + o.type = clmdep_msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v; + } + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, signed short v) const { + if (v < 0) { + o.type = clmdep_msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v; + } + else { + o.type = clmdep_msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v; + } + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, signed int v) const { + if (v < 0) { + o.type = clmdep_msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v; + } + else { + o.type = clmdep_msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v; + } + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, signed long v) const { + if (v < 0) { + o.type = clmdep_msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v; + } + else { + o.type = clmdep_msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v; + } + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, signed long long v) const { + if (v < 0) { + o.type = clmdep_msgpack::type::NEGATIVE_INTEGER; + o.via.i64 = v; + } + else{ + o.type = clmdep_msgpack::type::POSITIVE_INTEGER; + o.via.u64 = v; + } + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, unsigned char v) const + { o.type = clmdep_msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, unsigned short v) const + { o.type = clmdep_msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, unsigned int v) const + { o.type = clmdep_msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, unsigned long v) const + { o.type = clmdep_msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, unsigned long long v) const + { o.type = clmdep_msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; } +}; + + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, char v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, signed char v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, signed short v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, signed int v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, signed long v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, const signed long long& v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, unsigned char v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, unsigned short v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, unsigned int v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, unsigned long v) const + { static_cast(o) << v; } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, const unsigned long long& v) const + { static_cast(o) << v; } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif /* msgpack/type/int.hpp */ diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/list.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/list.hpp new file mode 100644 index 000000000..38666cb91 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/list.hpp @@ -0,0 +1,114 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2015 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_HPP +#define MSGPACK_TYPE_LIST_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +#if !defined(MSGPACK_USE_CPP03) + +template +struct as, typename std::enable_if::value>::type> { + std::list operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + std::list v; + clmdep_msgpack::object* p = o.via.array.ptr; + clmdep_msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + for (; p < pend; ++p) { + v.push_back(p->as()); + } + return v; + } +}; + +#endif // !defined(MSGPACK_USE_CPP03) + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::list& v) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + v.resize(o.via.array.size); + clmdep_msgpack::object* p = o.via.array.ptr; + clmdep_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 + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::list& v) const { + 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; + } +}; + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const std::list& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + clmdep_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 = clmdep_msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_LIST_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/map.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/map.hpp new file mode 100644 index 000000000..7e94223f7 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/map.hpp @@ -0,0 +1,314 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2015 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_MAP_HPP +#define MSGPACK_TYPE_MAP_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/object_fwd.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include +#include +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace type { + +template , typename Alloc = std::allocator > > +class assoc_vector : public std::vector< std::pair, Alloc > { +#if !defined(MSGPACK_USE_CPP03) + using std::vector, Alloc>::vector; +#endif // !defined(MSGPACK_USE_CPP03) +}; + +namespace detail { + template + struct pair_first_less { + bool operator() (const std::pair& x, const std::pair& y) const + { return Compare()(x.first, y.first); } + }; +} + +} //namespace type + +namespace adaptor { + +#if !defined(MSGPACK_USE_CPP03) + +template +struct as< + type::assoc_vector, + typename std::enable_if::value && clmdep_msgpack::has_as::value>::type> { + type::assoc_vector operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + type::assoc_vector v; + v.reserve(o.via.map.size); + clmdep_msgpack::object_kv* p = o.via.map.ptr; + clmdep_msgpack::object_kv* const pend = o.via.map.ptr + o.via.map.size; + for (; p < pend; ++p) { + v.emplace_back(p->key.as(), p->val.as()); + } + std::sort(v.begin(), v.end(), type::detail::pair_first_less()); + return v; + } +}; + +#endif // !defined(MSGPACK_USE_CPP03) + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, type::assoc_vector& v) const { + if (o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + v.resize(o.via.map.size); + clmdep_msgpack::object_kv* p = o.via.map.ptr; + clmdep_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 + clmdep_msgpack::packer& operator()(clmdep_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()(clmdep_msgpack::object::with_zone& o, const type::assoc_vector& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object_kv)*size)); + clmdep_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 = clmdep_msgpack::object(it->first, o.zone); + p->val = clmdep_msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +#if !defined(MSGPACK_USE_CPP03) + +template +struct as< + std::map, + typename std::enable_if::value && clmdep_msgpack::has_as::value>::type> { + std::map operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object_kv* p(o.via.map.ptr); + clmdep_msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); + std::map v; + for (; p != pend; ++p) { + v.emplace(p->key.as(), p->val.as()); + } + return v; + } +}; + +#endif // !defined(MSGPACK_USE_CPP03) + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::map& v) const { + if (o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object_kv* p(o.via.map.ptr); + clmdep_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); +#if __cplusplus >= 201103L + p->val.convert(tmp[std::move(key)]); +#else + p->val.convert(tmp[key]); +#endif + } +#if __cplusplus >= 201103L + v = std::move(tmp); +#else + tmp.swap(v); +#endif + return o; + } +}; + +template +struct pack > { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::map& v) const { + 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 +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const std::map& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object_kv)*size)); + clmdep_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 = clmdep_msgpack::object(it->first, o.zone); + p->val = clmdep_msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +#if !defined(MSGPACK_USE_CPP03) + +template +struct as< + std::multimap, + typename std::enable_if::value && clmdep_msgpack::has_as::value>::type> { + std::multimap operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object_kv* p(o.via.map.ptr); + clmdep_msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); + std::multimap v; + for (; p != pend; ++p) { + v.emplace(p->key.as(), p->val.as()); + } + return v; + } +}; + +#endif // !defined(MSGPACK_USE_CPP03) + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::multimap& v) const { + if (o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object_kv* p(o.via.map.ptr); + clmdep_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); +#if __cplusplus >= 201103L + tmp.insert(std::move(value)); +#else + tmp.insert(value); +#endif + } +#if __cplusplus >= 201103L + v = std::move(tmp); +#else + tmp.swap(v); +#endif + return o; + } +}; + +template +struct pack > { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::multimap& v) const { + 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 +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const std::multimap& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object_kv)*size)); + clmdep_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 = clmdep_msgpack::object(it->first, o.zone); + p->val = clmdep_msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_MAP_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/msgpack_tuple.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/msgpack_tuple.hpp new file mode 100644 index 000000000..6ca153df0 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/msgpack_tuple.hpp @@ -0,0 +1,29 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_MSGPACK_TUPLE_HPP +#define MSGPACK_MSGPACK_TUPLE_HPP + +#include "rpc/msgpack/cpp_config.hpp" + +#if defined(MSGPACK_USE_CPP03) +#include "detail/cpp03_msgpack_tuple.hpp" +#else // MSGPACK_USE_CPP03 +#include "detail/cpp11_msgpack_tuple.hpp" +#endif // MSGPACK_USE_CPP03 + +#endif // MSGPACK_MSGPACK_TUPLE_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/nil.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/nil.hpp new file mode 100644 index 000000000..4dca2af19 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/nil.hpp @@ -0,0 +1,92 @@ +// +// 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_NIL_HPP +#define MSGPACK_TYPE_NIL_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace type { + +struct nil { }; + +inline bool operator<(nil const& lhs, nil const& rhs) { + return &lhs < &rhs; +} + +inline bool operator==(nil const& lhs, nil const& rhs) { + return &lhs == &rhs; +} + +} // namespace type + +namespace adaptor { + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, type::nil&) const { + if(o.type != clmdep_msgpack::type::NIL) { throw clmdep_msgpack::type_error(); } + return o; + } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const type::nil&) const { + o.pack_nil(); + return o; + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, type::nil) const { + o.type = clmdep_msgpack::type::NIL; + } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, type::nil v) const { + static_cast(o) << v; + } +}; + +} // namespace adaptror + +template <> +inline void clmdep_msgpack::object::as() const +{ + clmdep_msgpack::type::nil v; + convert(v); +} + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_NIL_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/pair.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/pair.hpp new file mode 100644 index 000000000..2f6f0c18e --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/pair.hpp @@ -0,0 +1,91 @@ +// +// 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_HPP +#define MSGPACK_TYPE_PAIR_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/meta.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +#if !defined(MSGPACK_USE_CPP03) + +template +struct as, + typename std::enable_if::value>::type> { + std::pair operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if (o.via.array.size != 2) { throw clmdep_msgpack::type_error(); } + return std::make_pair(o.via.array.ptr[0].as(), o.via.array.ptr[1].as()); + } +}; + +#endif // !defined(MSGPACK_USE_CPP03) + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::pair& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if(o.via.array.size != 2) { throw clmdep_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 + clmdep_msgpack::packer& operator()(clmdep_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()(clmdep_msgpack::object::with_zone& o, const std::pair& v) const { + o.type = clmdep_msgpack::type::ARRAY; + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*2)); + o.via.array.ptr = p; + o.via.array.size = 2; + p[0] = clmdep_msgpack::object(v.first, o.zone); + p[1] = clmdep_msgpack::object(v.second, o.zone); + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_PAIR_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/raw.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/raw.hpp new file mode 100644 index 000000000..a01340089 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/raw.hpp @@ -0,0 +1,114 @@ +// +// 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_HPP +#define MSGPACK_TYPE_RAW_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace type { + +struct raw_ref { + raw_ref() : size(0), ptr(nullptr) {} + raw_ref(const char* p, uint32_t s) : size(s), ptr(p) {} + + uint32_t size; + const char* ptr; + + std::string str() const { return std::string(ptr, size); } + + bool operator== (const raw_ref& x) const + { + return size == x.size && std::memcmp(ptr, x.ptr, size) == 0; + } + + bool operator!= (const raw_ref& x) const + { + return !(*this == x); + } + + bool operator< (const raw_ref& x) const + { + if(size == x.size) { return std::memcmp(ptr, x.ptr, size) < 0; } + else { return size < x.size; } + } + + bool operator> (const raw_ref& x) const + { + if(size == x.size) { return std::memcmp(ptr, x.ptr, size) > 0; } + else { return size > x.size; } + } +}; + +} // namespace type + +namespace adaptor { + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, clmdep_msgpack::type::raw_ref& v) const { + if(o.type != clmdep_msgpack::type::BIN) { throw clmdep_msgpack::type_error(); } + v.ptr = o.via.bin.ptr; + v.size = o.via.bin.size; + return o; + } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const clmdep_msgpack::type::raw_ref& v) const { + o.pack_bin(v.size); + o.pack_bin_body(v.ptr, v.size); + return o; + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, const clmdep_msgpack::type::raw_ref& v) const { + o.type = clmdep_msgpack::type::BIN; + o.via.bin.ptr = v.ptr; + o.via.bin.size = v.size; + } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, const clmdep_msgpack::type::raw_ref& v) const { + static_cast(o) << v; + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_RAW_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/set.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/set.hpp new file mode 100644 index 000000000..405a99272 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/set.hpp @@ -0,0 +1,196 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2015 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_SET_HPP +#define MSGPACK_TYPE_SET_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +#if !defined(MSGPACK_USE_CPP03) + +template +struct as, typename std::enable_if::value>::type> { + std::set operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object* p = o.via.array.ptr + o.via.array.size; + clmdep_msgpack::object* const pbegin = o.via.array.ptr; + std::set v; + while (p > pbegin) { + --p; + v.insert(p->as()); + } + return v; + } +}; + +#endif // !defined(MSGPACK_USE_CPP03) + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::set& v) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object* p = o.via.array.ptr + o.via.array.size; + clmdep_msgpack::object* const pbegin = o.via.array.ptr; + std::set tmp; + while (p > pbegin) { + --p; + tmp.insert(p->as()); + } +#if __cplusplus >= 201103L + v = std::move(tmp); +#else + tmp.swap(v); +#endif + return o; + } +}; + +template +struct pack > { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::set& v) const { + 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; + } +}; + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const std::set& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + clmdep_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 = clmdep_msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +#if !defined(MSGPACK_USE_CPP03) + +template +struct as, typename std::enable_if::value>::type> { + std::multiset operator()(clmdep_msgpack::object const& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object* p = o.via.array.ptr + o.via.array.size; + clmdep_msgpack::object* const pbegin = o.via.array.ptr; + std::multiset v; + while (p > pbegin) { + --p; + v.insert(p->as()); + } + return v; + } +}; + +#endif // !defined(MSGPACK_USE_CPP03) + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::multiset& v) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object* p = o.via.array.ptr + o.via.array.size; + clmdep_msgpack::object* const pbegin = o.via.array.ptr; + std::multiset tmp; + while (p > pbegin) { + --p; + tmp.insert(p->as()); + } +#if __cplusplus >= 201103L + v = std::move(tmp); +#else + tmp.swap(v); +#endif + return o; + } +}; + +template +struct pack > { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::multiset& v) const { + 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 +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const std::multiset& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + clmdep_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 = clmdep_msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_SET_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/string.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/string.hpp new file mode 100644 index 000000000..c9c5359f3 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/string.hpp @@ -0,0 +1,94 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2015 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_STRING_HPP +#define MSGPACK_TYPE_STRING_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::string& v) const { + switch (o.type) { + case clmdep_msgpack::type::BIN: + v.assign(o.via.bin.ptr, o.via.bin.size); + break; + case clmdep_msgpack::type::STR: + v.assign(o.via.str.ptr, o.via.str.size); + break; + default: + throw clmdep_msgpack::type_error(); + break; + } + return o; + } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_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; + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, const std::string& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = clmdep_msgpack::type::STR; + o.via.str.ptr = v.data(); + o.via.str.size = size; + } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, const std::string& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = clmdep_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 + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_STRING_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/tr1/unordered_map.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/tr1/unordered_map.hpp new file mode 100644 index 000000000..4fec3ba68 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/tr1/unordered_map.hpp @@ -0,0 +1,179 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2015 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_MAP_HPP +#define MSGPACK_TYPE_TR1_UNORDERED_MAP_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.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 clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, MSGPACK_STD_TR1::unordered_map& v) const { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object_kv* p(o.via.map.ptr); + clmdep_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 + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const MSGPACK_STD_TR1::unordered_map& v) const { + 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; + } +}; + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_map& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object_kv)*size)); + clmdep_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 = clmdep_msgpack::object(it->first, o.zone); + p->val = clmdep_msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, MSGPACK_STD_TR1::unordered_multimap& v) const { + if(o.type != clmdep_msgpack::type::MAP) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object_kv* p(o.via.map.ptr); + clmdep_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 + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const MSGPACK_STD_TR1::unordered_multimap& v) const { + 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 +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multimap& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object_kv* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object_kv)*size)); + clmdep_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 = clmdep_msgpack::object(it->first, o.zone); + p->val = clmdep_msgpack::object(it->second, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#undef MSGPACK_STD_TR1 + +#endif // MSGPACK_STD_TR1 + +#endif // MSGPACK_TYPE_TR1_UNORDERED_MAP_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/tr1/unordered_set.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/tr1/unordered_set.hpp new file mode 100644 index 000000000..e00b160d2 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/tr1/unordered_set.hpp @@ -0,0 +1,173 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2015 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_HPP +#define MSGPACK_TYPE_TR1_UNORDERED_SET_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.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 clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, MSGPACK_STD_TR1::unordered_set& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object* p = o.via.array.ptr + o.via.array.size; + clmdep_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 + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const MSGPACK_STD_TR1::unordered_set& v) const { + 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; + } +}; + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_set& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + clmdep_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 = clmdep_msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, MSGPACK_STD_TR1::unordered_multiset& v) const { + if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + clmdep_msgpack::object* p = o.via.array.ptr + o.via.array.size; + clmdep_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 + clmdep_msgpack::packer& operator()(clmdep_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()(clmdep_msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multiset& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + clmdep_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 = clmdep_msgpack::object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#undef MSGPACK_STD_TR1 + +#endif // MSGPACK_STD_TR1 + +#endif // MSGPACK_TYPE_TR1_UNORDERED_SET_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/v4raw.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/v4raw.hpp new file mode 100644 index 000000000..8ddf786bc --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/v4raw.hpp @@ -0,0 +1,114 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2015 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_V4RAW_HPP +#define MSGPACK_TYPE_V4RAW_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace type { + +struct v4raw_ref { + v4raw_ref() : size(0), ptr(nullptr) {} + v4raw_ref(const char* p, uint32_t s) : size(s), ptr(p) {} + + uint32_t size; + const char* ptr; + + std::string str() const { return std::string(ptr, size); } + + bool operator== (const v4raw_ref& x) const + { + return size == x.size && std::memcmp(ptr, x.ptr, size) == 0; + } + + bool operator!= (const v4raw_ref& x) const + { + return !(*this == x); + } + + bool operator< (const v4raw_ref& x) const + { + if(size == x.size) { return std::memcmp(ptr, x.ptr, size) < 0; } + else { return size < x.size; } + } + + bool operator> (const v4raw_ref& x) const + { + if(size == x.size) { return std::memcmp(ptr, x.ptr, size) > 0; } + else { return size > x.size; } + } +}; + +} // namespace type + +namespace adaptor { + +template <> +struct convert { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, clmdep_msgpack::type::v4raw_ref& v) const { + if(o.type != clmdep_msgpack::type::STR) { throw clmdep_msgpack::type_error(); } + v.ptr = o.via.str.ptr; + v.size = o.via.str.size; + return o; + } +}; + +template <> +struct pack { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const clmdep_msgpack::type::v4raw_ref& v) const { + o.pack_v4raw(v.size); + o.pack_v4raw_body(v.ptr, v.size); + return o; + } +}; + +template <> +struct object { + void operator()(clmdep_msgpack::object& o, const clmdep_msgpack::type::v4raw_ref& v) const { + o.type = clmdep_msgpack::type::STR; + o.via.str.ptr = v.ptr; + o.via.str.size = v.size; + } +}; + +template <> +struct object_with_zone { + void operator()(clmdep_msgpack::object::with_zone& o, const clmdep_msgpack::type::v4raw_ref& v) const { + static_cast(o) << v; + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_V4RAW_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector.hpp new file mode 100644 index 000000000..d5a2a12e6 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector.hpp @@ -0,0 +1,129 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2015 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_VECTOR_HPP +#define MSGPACK_TYPE_VECTOR_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +#if !defined(MSGPACK_USE_CPP03) + +template +struct as, typename std::enable_if::value>::type> { + std::vector operator()(const clmdep_msgpack::object& o) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + std::vector v; + v.reserve(o.via.array.size); + if (o.via.array.size > 0) { + clmdep_msgpack::object* p = o.via.array.ptr; + clmdep_msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + do { + v.push_back(p->as()); + ++p; + } while (p < pend); + } + return v; + } +}; + +#endif // !defined(MSGPACK_USE_CPP03) + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::vector& v) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + v.resize(o.via.array.size); + if (o.via.array.size > 0) { + clmdep_msgpack::object* p = o.via.array.ptr; + clmdep_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 + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::vector& v) const { + 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; + } +}; + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const std::vector& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + clmdep_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 { +#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) + *p = clmdep_msgpack::object(*it, o.zone); +#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) +#pragma GCC diagnostic pop +#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_VECTOR_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_bool.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_bool.hpp new file mode 100644 index 000000000..bfee60e67 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_bool.hpp @@ -0,0 +1,96 @@ +// +// 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_HPP +#define MSGPACK_TYPE_VECTOR_BOOL_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/object_fwd.hpp" +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::vector& v) const { + if (o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); } + if (o.via.array.size > 0) { + v.resize(o.via.array.size); + clmdep_msgpack::object* p = o.via.array.ptr; + for (typename std::vector::iterator it = v.begin(), end = v.end(); + it != end; + ++it) { + *it = p->as(); + ++p; + } + } + return o; + } +}; + +template +struct pack > { + template + clmdep_msgpack::packer& operator()(clmdep_msgpack::packer& o, const std::vector& v) const { + 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(static_cast(*it)); + } + return o; + } +}; + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const std::vector& v) const { + o.type = clmdep_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()); + clmdep_msgpack::object* p = static_cast(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*size)); + clmdep_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 = clmdep_msgpack::object(static_cast(*it), o.zone); + ++p; + ++it; + } while(p < pend); + } + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_VECTOR_BOOL_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_char.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_char.hpp new file mode 100644 index 000000000..a5416e8d2 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_char.hpp @@ -0,0 +1,97 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014-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_CHAR_HPP +#define MSGPACK_TYPE_VECTOR_CHAR_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::vector& v) const { + switch (o.type) { + case clmdep_msgpack::type::BIN: + v.resize(o.via.bin.size); + std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size); + break; + case clmdep_msgpack::type::STR: + v.resize(o.via.str.size); + std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size); + break; + default: + throw clmdep_msgpack::type_error(); + break; + } + return o; + } +}; + +template +struct pack > { + template + clmdep_msgpack::packer& operator()(clmdep_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; + } +}; + +template +struct object > { + void operator()(clmdep_msgpack::object& o, const std::vector& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = clmdep_msgpack::type::BIN; + o.via.bin.ptr = &v.front(); + o.via.bin.size = size; + } +}; + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const std::vector& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = clmdep_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); + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_VECTOR_CHAR_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_unsigned_char.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_unsigned_char.hpp new file mode 100644 index 000000000..3321d0d6d --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/adaptor/vector_unsigned_char.hpp @@ -0,0 +1,97 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014-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_UNSIGNED_CHAR_HPP +#define MSGPACK_TYPE_VECTOR_UNSIGNED_CHAR_HPP + +#include "rpc/msgpack/versioning.hpp" +#include "rpc/msgpack/adaptor/adaptor_base.hpp" +#include "rpc/msgpack/adaptor/check_container_size.hpp" + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace adaptor { + +template +struct convert > { + clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, std::vector& v) const { + switch (o.type) { + case clmdep_msgpack::type::BIN: + v.resize(o.via.bin.size); + std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size); + break; + case clmdep_msgpack::type::STR: + v.resize(o.via.str.size); + std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size); + break; + default: + throw clmdep_msgpack::type_error(); + break; + } + return o; + } +}; + +template +struct pack > { + template + clmdep_msgpack::packer& operator()(clmdep_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(reinterpret_cast(&v.front()), size); + + return o; + } +}; + +template +struct object > { + void operator()(clmdep_msgpack::object& o, const std::vector& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = clmdep_msgpack::type::BIN; + o.via.bin.ptr = reinterpret_cast(&v.front()); + o.via.bin.size = size; + } +}; + +template +struct object_with_zone > { + void operator()(clmdep_msgpack::object::with_zone& o, const std::vector& v) const { + uint32_t size = checked_get_container_size(v.size()); + o.type = clmdep_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); + } +}; + +} // namespace adaptor + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_TYPE_VECTOR_UNSIGNED_CHAR_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/cpp_config.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/cpp_config.hpp new file mode 100644 index 000000000..9836ba47f --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/cpp_config.hpp @@ -0,0 +1,135 @@ +// +// MessagePack for C++ C++03/C++11 Adaptation +// +// Copyright (C) 2013 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_CPP_CONFIG_HPP +#define MSGPACK_CPP_CONFIG_HPP + +#include "rpc/msgpack/versioning.hpp" + +#if !defined(MSGPACK_USE_CPP03) +# if defined(_MSC_VER) +# if _MSC_VER < 1900 +# define MSGPACK_USE_CPP03 +# endif +# elif (__cplusplus < 201103L) +# define MSGPACK_USE_CPP03 +# endif +#endif // MSGPACK_USE_CPP03 + + + +#if defined __cplusplus +#if __cplusplus < 201103L + +#if !defined(nullptr) +# if _MSC_VER < 1600 +# define nullptr (0) +# endif +#endif + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +template +struct unique_ptr : std::auto_ptr { + explicit unique_ptr(T* p = 0) throw() : std::auto_ptr(p) {} + unique_ptr(unique_ptr& a) throw() : std::auto_ptr(a) {} + template + unique_ptr (unique_ptr& a) throw() : std::auto_ptr(a) {} +}; + +template +T& move(T& t) +{ + return t; +} + +template +T const& move(T const& t) +{ + return t; +} + +template +struct enable_if { + typedef T type; +}; + +template +struct enable_if { +}; + +template +struct integral_constant { + static T const value = val; + typedef T value_type; + typedef integral_constant type; +}; + +typedef integral_constant true_type; +typedef integral_constant false_type; + +template +struct is_same : false_type {}; + +template +struct is_same : true_type {}; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + + +#else // __cplusplus < 201103L + +#include +#include + +namespace clmdep_msgpack { +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + + // unique_ptr + using std::unique_ptr; + // using std::make_unique; // since C++14 + using std::hash; + + // utility + using std::move; + using std::swap; + using std::enable_if; + using std::is_same; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond +} // namespace clmdep_msgpack + + +#endif // __cplusplus < 201103L + +#endif // __cplusplus + +#endif /* msgpack/cpp_config.hpp */ diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/detail/cpp03_zone.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/detail/cpp03_zone.hpp new file mode 100644 index 000000000..5c7703070 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/detail/cpp03_zone.hpp @@ -0,0 +1,676 @@ +// +// MessagePack for C++ memory pool +// +// Copyright (C) 2008-2010 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_CPP03_ZONE_HPP +#define MSGPACK_CPP03_ZONE_HPP + +#include +#include +#include + +#include "rpc/msgpack/versioning.hpp" + +#ifndef MSGPACK_ZONE_CHUNK_SIZE +#define MSGPACK_ZONE_CHUNK_SIZE 8192 +#endif + +#ifndef MSGPACK_ZONE_ALIGN +#define MSGPACK_ZONE_ALIGN sizeof(void*) +#endif + + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +class zone { + struct finalizer { + finalizer(void (*func)(void*), void* data):m_func(func), m_data(data) {} + void operator()() { m_func(m_data); } + void (*m_func)(void*); + void* m_data; + }; + struct finalizer_array { + finalizer_array():m_tail(nullptr), m_end(nullptr), m_array(nullptr) {} + void call() { + finalizer* fin = m_tail; + for(; fin != m_array; --fin) (*(fin-1))(); + } + ~finalizer_array() { + call(); + ::free(m_array); + } + void clear() { + call(); + m_tail = m_array; + } + void push(void (*func)(void* data), void* data) + { + finalizer* fin = m_tail; + + if(fin == m_end) { + push_expand(func, data); + return; + } + + fin->m_func = func; + fin->m_data = data; + + ++m_tail; + } + void push_expand(void (*func)(void*), void* data) { + const size_t nused = m_end - m_array; + size_t nnext; + if(nused == 0) { + nnext = (sizeof(finalizer) < 72/2) ? + 72 / sizeof(finalizer) : 8; + } else { + nnext = nused * 2; + } + finalizer* tmp = + static_cast(::realloc(m_array, sizeof(finalizer) * nnext)); + if(!tmp) { + throw std::bad_alloc(); + } + m_array = tmp; + m_end = tmp + nnext; + m_tail = tmp + nused; + new (m_tail) finalizer(func, data); + + ++m_tail; + } + finalizer* m_tail; + finalizer* m_end; + finalizer* m_array; + }; + struct chunk { + chunk* m_next; + }; + struct chunk_list { + chunk_list(size_t chunk_size) + { + chunk* c = static_cast(::malloc(sizeof(chunk) + chunk_size)); + if(!c) { + throw std::bad_alloc(); + } + + m_head = c; + m_free = chunk_size; + m_ptr = reinterpret_cast(c) + sizeof(chunk); + c->m_next = nullptr; + } + ~chunk_list() + { + chunk* c = m_head; + while(c) { + chunk* n = c->m_next; + ::free(c); + c = n; + } + } + void clear(size_t chunk_size) + { + chunk* c = m_head; + while(true) { + chunk* n = c->m_next; + if(n) { + ::free(c); + c = n; + } else { + break; + } + } + m_head->m_next = nullptr; + m_free = chunk_size; + m_ptr = reinterpret_cast(m_head) + sizeof(chunk); + } + size_t m_free; + char* m_ptr; + chunk* m_head; + }; + size_t m_chunk_size; + chunk_list m_chunk_list; + finalizer_array m_finalizer_array; + +public: + zone(size_t chunk_size = MSGPACK_ZONE_CHUNK_SIZE) /* throw() */; + +public: + void* allocate_align(size_t size, size_t align = MSGPACK_ZONE_ALIGN); + void* allocate_no_align(size_t size); + + void push_finalizer(void (*func)(void*), void* data); + + template + void push_finalizer(clmdep_msgpack::unique_ptr obj); + + void clear(); + + void swap(zone& o); + static void* operator new(std::size_t size) + { + void* p = ::malloc(size); + if (!p) throw std::bad_alloc(); + return p; + } + static void operator delete(void *p) /* throw() */ + { + ::free(p); + } + static void* operator new(std::size_t size, void* place) /* throw() */ + { + return ::operator new(size, place); + } + static void operator delete(void* p, void* place) /* throw() */ + { + ::operator delete(p, place); + } + /// @cond + + template + T* allocate(); + + template + T* allocate(A1 a1); + + template + T* allocate(A1 a1, A2 a2); + + template + T* allocate(A1 a1, A2 a2, A3 a3); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14); + + template + T* allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14, A15 a15); + + /// @endcond + +private: + void undo_allocate(size_t size); + + template + static void object_destruct(void* obj); + + template + static void object_delete(void* obj); + + void* allocate_expand(size_t size); +private: + zone(const zone&); + zone& operator=(const zone&); +}; + +inline zone::zone(size_t chunk_size) /* throw() */ :m_chunk_size(chunk_size), m_chunk_list(m_chunk_size) +{ +} + +inline void* zone::allocate_align(size_t size, size_t align) +{ + char* aligned = + reinterpret_cast( + reinterpret_cast( + (m_chunk_list.m_ptr + (align - 1))) / align * align); + size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr); + if(m_chunk_list.m_free >= adjusted_size) { + m_chunk_list.m_free -= adjusted_size; + m_chunk_list.m_ptr += adjusted_size; + return aligned; + } + return reinterpret_cast( + reinterpret_cast( + allocate_expand(size + (align - 1))) / align * align); +} + +inline void* zone::allocate_no_align(size_t size) +{ + if(m_chunk_list.m_free < size) { + return allocate_expand(size); + } + + char* ptr = m_chunk_list.m_ptr; + m_chunk_list.m_free -= size; + m_chunk_list.m_ptr += size; + + return ptr; +} + +inline void* zone::allocate_expand(size_t size) +{ + chunk_list* const cl = &m_chunk_list; + + size_t sz = m_chunk_size; + + while(sz < size) { + size_t tmp_sz = sz * 2; + if (tmp_sz <= sz) { + sz = size; + break; + } + sz = tmp_sz; + } + + chunk* c = static_cast(::malloc(sizeof(chunk) + sz)); + if (!c) throw std::bad_alloc(); + + char* ptr = reinterpret_cast(c) + sizeof(chunk); + + c->m_next = cl->m_head; + cl->m_head = c; + cl->m_free = sz - size; + cl->m_ptr = ptr + size; + + return ptr; +} + +inline void zone::push_finalizer(void (*func)(void*), void* data) +{ + m_finalizer_array.push(func, data); +} + +template +inline void zone::push_finalizer(clmdep_msgpack::unique_ptr obj) +{ + m_finalizer_array.push(&zone::object_delete, obj.release()); +} + +inline void zone::clear() +{ + m_finalizer_array.clear(); + m_chunk_list.clear(m_chunk_size); +} + +inline void zone::swap(zone& o) +{ + using std::swap; + swap(m_chunk_size, o.m_chunk_size); + swap(m_chunk_list, o.m_chunk_list); + swap(m_finalizer_array, o.m_finalizer_array); +} + +template +void zone::object_destruct(void* obj) +{ + static_cast(obj)->~T(); +} + +template +void zone::object_delete(void* obj) +{ + delete static_cast(obj); +} + +inline void zone::undo_allocate(size_t size) +{ + m_chunk_list.m_ptr -= size; + m_chunk_list.m_free += size; +} + +inline std::size_t aligned_size( + std::size_t size, + std::size_t align = MSGPACK_ZONE_ALIGN) { + return (size + align - 1) / align * align; +} + +/// @cond + +template +T* zone::allocate() +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4, a5); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4, a5, a6); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4, a5, a6, a7); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4, a5, a6, a7, a8); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4, a5, a6, a7, a8, a9); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +template +T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14, A15 a15) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +/// @endcond + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP03_ZONE_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/detail/cpp11_zone.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/detail/cpp11_zone.hpp new file mode 100644 index 000000000..2c4e82ca1 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/detail/cpp11_zone.hpp @@ -0,0 +1,376 @@ +// +// MessagePack for C++ memory pool +// +// 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_CPP11_ZONE_HPP +#define MSGPACK_CPP11_ZONE_HPP + +#include "rpc/msgpack/versioning.hpp" + +#include +#include +#include + +#include "rpc/msgpack/cpp_config.hpp" + +#ifndef MSGPACK_ZONE_CHUNK_SIZE +#define MSGPACK_ZONE_CHUNK_SIZE 8192 +#endif + +#ifndef MSGPACK_ZONE_ALIGN +#define MSGPACK_ZONE_ALIGN sizeof(void*) +#endif + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +class zone { +private: + struct finalizer { + finalizer(void (*func)(void*), void* data):m_func(func), m_data(data) {} + void operator()() { m_func(m_data); } + void (*m_func)(void*); + void* m_data; + }; + struct finalizer_array { + finalizer_array():m_tail(nullptr), m_end(nullptr), m_array(nullptr) {} + void call() { + finalizer* fin = m_tail; + for(; fin != m_array; --fin) (*(fin-1))(); + } + ~finalizer_array() { + call(); + ::free(m_array); + } + void clear() { + call(); + m_tail = m_array; + } + void push(void (*func)(void* data), void* data) + { + finalizer* fin = m_tail; + + if(fin == m_end) { + push_expand(func, data); + return; + } + + fin->m_func = func; + fin->m_data = data; + + ++m_tail; + } + void push_expand(void (*func)(void*), void* data) { + const size_t nused = m_end - m_array; + size_t nnext; + if(nused == 0) { + nnext = (sizeof(finalizer) < 72/2) ? + 72 / sizeof(finalizer) : 8; + } else { + nnext = nused * 2; + } + finalizer* tmp = + static_cast(::realloc(m_array, sizeof(finalizer) * nnext)); + if(!tmp) { + throw std::bad_alloc(); + } + m_array = tmp; + m_end = tmp + nnext; + m_tail = tmp + nused; + new (m_tail) finalizer(func, data); + + ++m_tail; + } + finalizer_array(finalizer_array&& other) noexcept + :m_tail(other.m_tail), m_end(other.m_end), m_array(other.m_array) + { + other.m_tail = nullptr; + other.m_end = nullptr; + other.m_array = nullptr; + } + finalizer_array& operator=(finalizer_array&& other) noexcept + { + this->~finalizer_array(); + new (this) finalizer_array(std::move(other)); + return *this; + } + + finalizer* m_tail; + finalizer* m_end; + finalizer* m_array; + + private: + finalizer_array(const finalizer_array&); + finalizer_array& operator=(const finalizer_array&); + }; + struct chunk { + chunk* m_next; + }; + struct chunk_list { + chunk_list(size_t chunk_size) + { + chunk* c = static_cast(::malloc(sizeof(chunk) + chunk_size)); + if(!c) { + throw std::bad_alloc(); + } + + m_head = c; + m_free = chunk_size; + m_ptr = reinterpret_cast(c) + sizeof(chunk); + c->m_next = nullptr; + } + ~chunk_list() + { + chunk* c = m_head; + while(c) { + chunk* n = c->m_next; + ::free(c); + c = n; + } + } + void clear(size_t chunk_size) + { + chunk* c = m_head; + while(true) { + chunk* n = c->m_next; + if(n) { + ::free(c); + c = n; + } else { + m_head = c; + break; + } + } + m_head->m_next = nullptr; + m_free = chunk_size; + m_ptr = reinterpret_cast(m_head) + sizeof(chunk); + } + chunk_list(chunk_list&& other) noexcept + :m_free(other.m_free), m_ptr(other.m_ptr), m_head(other.m_head) + { + other.m_head = nullptr; + } + chunk_list& operator=(chunk_list&& other) noexcept + { + this->~chunk_list(); + new (this) chunk_list(std::move(other)); + return *this; + } + + size_t m_free; + char* m_ptr; + chunk* m_head; + private: + chunk_list(const chunk_list&); + chunk_list& operator=(const chunk_list&); + }; + size_t m_chunk_size; + chunk_list m_chunk_list; + finalizer_array m_finalizer_array; + +public: + zone(size_t chunk_size = MSGPACK_ZONE_CHUNK_SIZE) noexcept; + +public: + void* allocate_align(size_t size, size_t align = MSGPACK_ZONE_ALIGN); + void* allocate_no_align(size_t size); + + void push_finalizer(void (*func)(void*), void* data); + + template + void push_finalizer(clmdep_msgpack::unique_ptr obj); + + void clear(); + + void swap(zone& o); + + + static void* operator new(std::size_t size) + { + void* p = ::malloc(size); + if (!p) throw std::bad_alloc(); + return p; + } + static void operator delete(void *p) noexcept + { + ::free(p); + } + static void* operator new(std::size_t /*size*/, void* mem) noexcept + { + return mem; + } + static void operator delete(void * /*p*/, void* /*mem*/) noexcept + { + } + + template + T* allocate(Args... args); + + zone(zone&&) = default; + zone& operator=(zone&&) = default; + zone(const zone&) = delete; + zone& operator=(const zone&) = delete; + +private: + void undo_allocate(size_t size); + + template + static void object_destruct(void* obj); + + template + static void object_delete(void* obj); + + void* allocate_expand(size_t size); +}; + +inline zone::zone(size_t chunk_size) noexcept:m_chunk_size(chunk_size), m_chunk_list(m_chunk_size) +{ +} + +inline void* zone::allocate_align(size_t size, size_t align) +{ + char* aligned = + reinterpret_cast( + reinterpret_cast( + (m_chunk_list.m_ptr + (align - 1))) / align * align); + size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr); + if(m_chunk_list.m_free >= adjusted_size) { + m_chunk_list.m_free -= adjusted_size; + m_chunk_list.m_ptr += adjusted_size; + return aligned; + } + return reinterpret_cast( + reinterpret_cast( + allocate_expand(size + (align - 1))) / align * align); +} + +inline void* zone::allocate_no_align(size_t size) +{ + if(m_chunk_list.m_free < size) { + return allocate_expand(size); + } + + char* ptr = m_chunk_list.m_ptr; + m_chunk_list.m_free -= size; + m_chunk_list.m_ptr += size; + + return ptr; +} + +inline void* zone::allocate_expand(size_t size) +{ + chunk_list* const cl = &m_chunk_list; + + size_t sz = m_chunk_size; + + while(sz < size) { + size_t tmp_sz = sz * 2; + if (tmp_sz <= sz) { + sz = size; + break; + } + sz = tmp_sz; + } + + chunk* c = static_cast(::malloc(sizeof(chunk) + sz)); + if (!c) throw std::bad_alloc(); + + char* ptr = reinterpret_cast(c) + sizeof(chunk); + + c->m_next = cl->m_head; + cl->m_head = c; + cl->m_free = sz - size; + cl->m_ptr = ptr + size; + + return ptr; +} + +inline void zone::push_finalizer(void (*func)(void*), void* data) +{ + m_finalizer_array.push(func, data); +} + +template +inline void zone::push_finalizer(clmdep_msgpack::unique_ptr obj) +{ + m_finalizer_array.push(&zone::object_delete, obj.release()); +} + +inline void zone::clear() +{ + m_finalizer_array.clear(); + m_chunk_list.clear(m_chunk_size); +} + +inline void zone::swap(zone& o) +{ + std::swap(*this, o); +} + +template +void zone::object_delete(void* obj) +{ + delete static_cast(obj); +} + +template +void zone::object_destruct(void* obj) +{ + static_cast(obj)->~T(); +} + +inline void zone::undo_allocate(size_t size) +{ + m_chunk_list.m_ptr -= size; + m_chunk_list.m_free += size; +} + + +template +T* zone::allocate(Args... args) +{ + void* x = allocate_align(sizeof(T)); + try { + m_finalizer_array.push(&zone::object_destruct, x); + } catch (...) { + undo_allocate(sizeof(T)); + throw; + } + try { + return new (x) T(args...); + } catch (...) { + --m_finalizer_array.m_tail; + undo_allocate(sizeof(T)); + throw; + } +} + +inline std::size_t aligned_size( + std::size_t size, + std::size_t align = MSGPACK_ZONE_ALIGN) { + return (size + align - 1) / align * align; +} + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif // MSGPACK_CPP11_ZONE_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/fbuffer.h b/host/lib/deps/rpclib/include/rpc/msgpack/fbuffer.h new file mode 100644 index 000000000..d12830e42 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/fbuffer.h @@ -0,0 +1,46 @@ +/* + * MessagePack for C FILE* buffer adaptor + * + * Copyright (C) 2013 Vladimir Volodko + * + * 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_FBUFFER_H +#define MSGPACK_FBUFFER_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @defgroup msgpack_fbuffer FILE* buffer + * @ingroup msgpack_buffer + * @{ + */ + +static inline int msgpack_fbuffer_write(void* data, const char* buf, unsigned int len) +{ + return (1 == fwrite(buf, len, 1, (FILE *)data)) ? 0 : -1; +} + +/** @} */ + + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/fbuffer.h */ diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/fbuffer.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/fbuffer.hpp new file mode 100644 index 000000000..460fdfcde --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/fbuffer.hpp @@ -0,0 +1,68 @@ +// +// MessagePack for C++ FILE* buffer adaptor +// +// Copyright (C) 2013 Vladimir Volodko +// +// 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_FBUFFER_HPP__ +#define MSGPACK_FBUFFER_HPP__ + +#include "rpc/msgpack/versioning.hpp" + +#include +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +class fbuffer { +public: + explicit fbuffer(FILE* file) : m_file(file) { } + +public: + void write(const char* buf, unsigned int len) + { + if (1 != fwrite(buf, len, 1, m_file)) { + throw std::runtime_error("fwrite() failed"); + } + } + + FILE* file() const + { + return m_file; + } + +#if defined(MSGPACK_USE_CPP03) +private: + fbuffer(const fbuffer&); + fbuffer& operator=(const fbuffer&); +#else // defined(MSGPACK_USE_CPP03) + fbuffer(const fbuffer&) = delete; + fbuffer& operator=(const fbuffer&) = delete; +#endif // defined(MSGPACK_USE_CPP03) + +private: + FILE* m_file; +}; + +/// @cond +} // MSGPACK_API_VERSION_NAMESPACE(v1) +/// @endcond + +} // namespace clmdep_msgpack + +#endif /* msgpack/fbuffer.hpp */ diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/gcc_atomic.h b/host/lib/deps/rpclib/include/rpc/msgpack/gcc_atomic.h new file mode 100644 index 000000000..276acdc95 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/gcc_atomic.h @@ -0,0 +1,33 @@ +/* + * 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_GCC_ATOMIC_H +#define MSGPACK_GCC_ATOMIC_H + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef int _msgpack_atomic_counter_t; + +int _msgpack_sync_decr_and_fetch(volatile _msgpack_atomic_counter_t* ptr); +int _msgpack_sync_incr_and_fetch(volatile _msgpack_atomic_counter_t* ptr); + + +#if defined(__cplusplus) +} +#endif + + +#endif // MSGPACK_GCC_ATOMIC_H diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/iterator.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/iterator.hpp new file mode 100644 index 000000000..2e33eeb30 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/iterator.hpp @@ -0,0 +1,46 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2015 MIZUKI Hirata +// +// 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_ITERATOR_HPP +#define MSGPACK_ITERATOR_HPP +#if !defined(MSGPACK_USE_CPP03) + +#include + +namespace clmdep_msgpack +{ + /// @cond + MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) + { + /// @endcond + inline object_kv* begin(object_map &map) { return map.ptr; } + 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; } + inline const object* end(const object_array &array) { return array.ptr + array.size; } + /// @cond + } + /// @endcond +} + +#endif // !defined(MSGPACK_USE_CPP03) +#endif // MSGPACK_ITERATOR_HPP diff --git a/host/lib/deps/rpclib/include/rpc/msgpack/meta.hpp b/host/lib/deps/rpclib/include/rpc/msgpack/meta.hpp new file mode 100644 index 000000000..c6e976d42 --- /dev/null +++ b/host/lib/deps/rpclib/include/rpc/msgpack/meta.hpp @@ -0,0 +1,59 @@ +// +// 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_META_HPP +#define MSGPACK_META_HPP + +#if !defined(MSGPACK_USE_CPP03) + +#include + +namespace clmdep_msgpack { + +/// @cond +MSGPACK_API_VERSION_NAMESPACE(v1) { +/// @endcond + +namespace detail { +template struct bool_pack; + +template struct all_of_imp + : std::is_same, bool_pack>{}; + +} // namespace detail + +template