messagepack implementation for embedded systems (mbed / arduino)

Dependents:   hello_message_pack

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers cpp03_define_array.hpp Source File

cpp03_define_array.hpp

00001 //
00002 // MessagePack for C++ static resolution routine
00003 //
00004 // Copyright (C) 2008-2009 FURUHASHI Sadayuki
00005 //
00006 //    Distributed under the Boost Software License, Version 1.0.
00007 //    (See accompanying file LICENSE_1_0.txt or copy at
00008 //    http://www.boost.org/LICENSE_1_0.txt)
00009 //
00010 #ifndef MSGPACK_CPP03_DEFINE_ARRAY_HPP
00011 #define MSGPACK_CPP03_DEFINE_ARRAY_HPP
00012 
00013 #include "msgpack/versioning.hpp"
00014 #include "msgpack/adaptor/msgpack_tuple.hpp"
00015 #include "msgpack/adaptor/adaptor_base.hpp"
00016 #include "msgpack/object_fwd.hpp"
00017 
00018 #define MSGPACK_DEFINE_ARRAY(...) \
00019     template <typename Packer> \
00020     void msgpack_pack(Packer& pk) const \
00021     { \
00022         msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \
00023     } \
00024     void msgpack_unpack(msgpack::object const& o) \
00025     { \
00026         msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \
00027     }\
00028     template <typename MSGPACK_OBJECT> \
00029     void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
00030     { \
00031         msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(o, z); \
00032     }
00033 
00034 #define MSGPACK_BASE_ARRAY(base) (*const_cast<base *>(static_cast<base const*>(this)))
00035 
00036 // MSGPACK_ADD_ENUM must be used in the global namespace.
00037 #define MSGPACK_ADD_ENUM(enum_name) \
00038   namespace msgpack { \
00039   /** @cond */ \
00040   MSGPACK_API_VERSION_NAMESPACE(v1) { \
00041   /** @endcond */ \
00042   namespace adaptor { \
00043     template<> \
00044     struct convert<enum_name> { \
00045       msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const {\
00046         int tmp; \
00047         o >> tmp; \
00048         v = static_cast<enum_name>(tmp); \
00049         return o; \
00050       } \
00051     }; \
00052     template<> \
00053     struct object<enum_name> { \
00054       void operator()(msgpack::object& o, const enum_name& v) const {\
00055         o << static_cast<int>(v); \
00056       } \
00057     }; \
00058     template<> \
00059     struct object_with_zone<enum_name> { \
00060       void operator()(msgpack::object::with_zone& o, const enum_name& v) const { \
00061         o << static_cast<int>(v); \
00062       } \
00063     }; \
00064     template<> \
00065     struct pack<enum_name> { \
00066       template <typename Stream> \
00067       msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const enum_name& v) const { \
00068         return o << static_cast<int>(v); \
00069       } \
00070     }; \
00071   } \
00072   /** @cond */ \
00073   } \
00074   /** @endcond */ \
00075   }
00076 
00077 namespace msgpack {
00078 /// @cond
00079 MSGPACK_API_VERSION_NAMESPACE(v1) {
00080 /// @endcond
00081 namespace type {
00082 
00083 /// @cond
00084 
00085 template <typename A0 = void, typename A1 = void, typename A2 = void, typename A3 = void, typename A4 = void, typename A5 = void, typename A6 = void, typename A7 = void, typename A8 = void, typename A9 = void, typename A10 = void, typename A11 = void, typename A12 = void, typename A13 = void, typename A14 = void, typename A15 = void, typename A16 = void, typename A17 = void, typename A18 = void, typename A19 = void, typename A20 = void, typename A21 = void, typename A22 = void, typename A23 = void, typename A24 = void, typename A25 = void, typename A26 = void, typename A27 = void, typename A28 = void, typename A29 = void, typename A30 = void, typename A31 = void, typename A32 = void>
00086 struct define_array;
00087 /// @endcond
00088 
00089 template <>
00090 struct define_array<> {
00091     typedef define_array<> value_type;
00092     typedef tuple<> tuple_type;
00093     template <typename Packer>
00094     void msgpack_pack(Packer& pk) const
00095     {
00096         pk.pack_array(0);
00097     }
00098     void msgpack_unpack(msgpack::object const& o)
00099     {
00100         if(o.type != msgpack::type::ARRAY) { 
00101 //            throw msgpack::type_error(); 
00102         }
00103     }
00104     void msgpack_object(msgpack::object* o, msgpack::zone&) const
00105     {
00106         o->type = msgpack::type::ARRAY;
00107         o->via.array.ptr = nullptr;
00108         o->via.array.size = 0;
00109     }
00110 };
00111 
00112 /// @cond
00113 
00114 template <typename A0>
00115 struct define_array<A0> {
00116     typedef define_array<A0> value_type;
00117     typedef tuple<A0> tuple_type;
00118     define_array(A0& _a0) :
00119         a0(_a0) {}
00120     template <typename Packer>
00121     void msgpack_pack(Packer& pk) const
00122     {
00123         pk.pack_array(1);
00124         
00125         pk.pack(a0);
00126     }
00127     void msgpack_unpack(msgpack::object const& o)
00128     {
00129         if(o.type != msgpack::type::ARRAY) { 
00130             printf("throw msgpack::type_error()");
00131 //            throw msgpack::type_error(); 
00132         }
00133         const size_t size = o.via.array.size;
00134         if(size > 0) {
00135             msgpack::object *ptr = o.via.array.ptr;
00136             switch(size) {
00137             default:
00138             case 1: ptr[0].convert(a0);
00139             }
00140         }
00141     }
00142     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00143     {
00144         o->type = msgpack::type::ARRAY;
00145         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*1));
00146         o->via.array.size = 1;
00147         
00148         o->via.array.ptr[0] = msgpack::object(a0, z);
00149     }
00150     
00151     A0& a0;
00152 };
00153 
00154 template <typename A0, typename A1>
00155 struct define_array<A0, A1> {
00156     typedef define_array<A0, A1> value_type;
00157     typedef tuple<A0, A1> tuple_type;
00158     define_array(A0& _a0, A1& _a1) :
00159         a0(_a0), a1(_a1) {}
00160     template <typename Packer>
00161     void msgpack_pack(Packer& pk) const
00162     {
00163         pk.pack_array(2);
00164         
00165         pk.pack(a0);
00166         pk.pack(a1);
00167     }
00168     void msgpack_unpack(msgpack::object const& o)
00169     {
00170         if(o.type != msgpack::type::ARRAY) {
00171              printf("throw msgpack::type_error()");
00172 //             throw msgpack::type_error();
00173         }
00174         const size_t size = o.via.array.size;
00175         if(size > 0) {
00176             msgpack::object *ptr = o.via.array.ptr;
00177             switch(size) {
00178             default:
00179             case 2: ptr[1].convert(a1);
00180             case 1: ptr[0].convert(a0);
00181             }
00182         }
00183     }
00184     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00185     {
00186         o->type = msgpack::type::ARRAY;
00187         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*2));
00188         o->via.array.size = 2;
00189         
00190         o->via.array.ptr[0] = msgpack::object(a0, z);
00191         o->via.array.ptr[1] = msgpack::object(a1, z);
00192     }
00193     
00194     A0& a0;
00195     A1& a1;
00196 };
00197 
00198 template <typename A0, typename A1, typename A2>
00199 struct define_array<A0, A1, A2> {
00200     typedef define_array<A0, A1, A2> value_type;
00201     typedef tuple<A0, A1, A2> tuple_type;
00202     define_array(A0& _a0, A1& _a1, A2& _a2) :
00203         a0(_a0), a1(_a1), a2(_a2) {}
00204     template <typename Packer>
00205     void msgpack_pack(Packer& pk) const
00206     {
00207         pk.pack_array(3);
00208         
00209         pk.pack(a0);
00210         pk.pack(a1);
00211         pk.pack(a2);
00212     }
00213     void msgpack_unpack(msgpack::object const& o)
00214     {
00215         if(o.type != msgpack::type::ARRAY) {
00216             printf("throw msgpack::type_error()");
00217 //            throw msgpack::type_error();
00218         }
00219         const size_t size = o.via.array.size;
00220         if(size > 0) {
00221             msgpack::object *ptr = o.via.array.ptr;
00222             switch(size) {
00223             default:
00224             case 3: ptr[2].convert(a2);
00225             case 2: ptr[1].convert(a1);
00226             case 1: ptr[0].convert(a0);
00227             }
00228         }
00229     }
00230     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00231     {
00232         o->type = msgpack::type::ARRAY;
00233         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*3));
00234         o->via.array.size = 3;
00235         
00236         o->via.array.ptr[0] = msgpack::object(a0, z);
00237         o->via.array.ptr[1] = msgpack::object(a1, z);
00238         o->via.array.ptr[2] = msgpack::object(a2, z);
00239     }
00240     
00241     A0& a0;
00242     A1& a1;
00243     A2& a2;
00244 };
00245 
00246 template <typename A0, typename A1, typename A2, typename A3>
00247 struct define_array<A0, A1, A2, A3> {
00248     typedef define_array<A0, A1, A2, A3> value_type;
00249     typedef tuple<A0, A1, A2, A3> tuple_type;
00250     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3) :
00251         a0(_a0), a1(_a1), a2(_a2), a3(_a3) {}
00252     template <typename Packer>
00253     void msgpack_pack(Packer& pk) const
00254     {
00255         pk.pack_array(4);
00256         
00257         pk.pack(a0);
00258         pk.pack(a1);
00259         pk.pack(a2);
00260         pk.pack(a3);
00261     }
00262     void msgpack_unpack(msgpack::object const& o)
00263     {
00264         if(o.type != msgpack::type::ARRAY) {
00265             printf("throw msgpack::type_error()");
00266 //            throw msgpack::type_error();
00267         }
00268         const size_t size = o.via.array.size;
00269         if(size > 0) {
00270             msgpack::object *ptr = o.via.array.ptr;
00271             switch(size) {
00272             default:
00273             case 4: ptr[3].convert(a3);
00274             case 3: ptr[2].convert(a2);
00275             case 2: ptr[1].convert(a1);
00276             case 1: ptr[0].convert(a0);
00277             }
00278         }
00279     }
00280     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00281     {
00282         o->type = msgpack::type::ARRAY;
00283         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*4));
00284         o->via.array.size = 4;
00285         
00286         o->via.array.ptr[0] = msgpack::object(a0, z);
00287         o->via.array.ptr[1] = msgpack::object(a1, z);
00288         o->via.array.ptr[2] = msgpack::object(a2, z);
00289         o->via.array.ptr[3] = msgpack::object(a3, z);
00290     }
00291     
00292     A0& a0;
00293     A1& a1;
00294     A2& a2;
00295     A3& a3;
00296 };
00297 
00298 template <typename A0, typename A1, typename A2, typename A3, typename A4>
00299 struct define_array<A0, A1, A2, A3, A4> {
00300     typedef define_array<A0, A1, A2, A3, A4> value_type;
00301     typedef tuple<A0, A1, A2, A3, A4> tuple_type;
00302     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4) :
00303         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4) {}
00304     template <typename Packer>
00305     void msgpack_pack(Packer& pk) const
00306     {
00307         pk.pack_array(5);
00308         
00309         pk.pack(a0);
00310         pk.pack(a1);
00311         pk.pack(a2);
00312         pk.pack(a3);
00313         pk.pack(a4);
00314     }
00315     void msgpack_unpack(msgpack::object const& o)
00316     {
00317         if(o.type != msgpack::type::ARRAY) {
00318              printf("throw msgpack::type_error()");
00319 //            throw msgpack::type_error();
00320         }
00321         const size_t size = o.via.array.size;
00322         if(size > 0) {
00323             msgpack::object *ptr = o.via.array.ptr;
00324             switch(size) {
00325             default:
00326             case 5: ptr[4].convert(a4);
00327             case 4: ptr[3].convert(a3);
00328             case 3: ptr[2].convert(a2);
00329             case 2: ptr[1].convert(a1);
00330             case 1: ptr[0].convert(a0);
00331             }
00332         }
00333     }
00334     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00335     {
00336         o->type = msgpack::type::ARRAY;
00337         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*5));
00338         o->via.array.size = 5;
00339         
00340         o->via.array.ptr[0] = msgpack::object(a0, z);
00341         o->via.array.ptr[1] = msgpack::object(a1, z);
00342         o->via.array.ptr[2] = msgpack::object(a2, z);
00343         o->via.array.ptr[3] = msgpack::object(a3, z);
00344         o->via.array.ptr[4] = msgpack::object(a4, z);
00345     }
00346     
00347     A0& a0;
00348     A1& a1;
00349     A2& a2;
00350     A3& a3;
00351     A4& a4;
00352 };
00353 
00354 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
00355 struct define_array<A0, A1, A2, A3, A4, A5> {
00356     typedef define_array<A0, A1, A2, A3, A4, A5> value_type;
00357     typedef tuple<A0, A1, A2, A3, A4, A5> tuple_type;
00358     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5) :
00359         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5) {}
00360     template <typename Packer>
00361     void msgpack_pack(Packer& pk) const
00362     {
00363         pk.pack_array(6);
00364         
00365         pk.pack(a0);
00366         pk.pack(a1);
00367         pk.pack(a2);
00368         pk.pack(a3);
00369         pk.pack(a4);
00370         pk.pack(a5);
00371     }
00372     void msgpack_unpack(msgpack::object const& o)
00373     {
00374         if(o.type != msgpack::type::ARRAY) {
00375             printf("throw msgpack::type_error()");
00376 //            throw msgpack::type_error(); 
00377         }
00378         const size_t size = o.via.array.size;
00379         if(size > 0) {
00380             msgpack::object *ptr = o.via.array.ptr;
00381             switch(size) {
00382             default:
00383             case 6: ptr[5].convert(a5);
00384             case 5: ptr[4].convert(a4);
00385             case 4: ptr[3].convert(a3);
00386             case 3: ptr[2].convert(a2);
00387             case 2: ptr[1].convert(a1);
00388             case 1: ptr[0].convert(a0);
00389             }
00390         }
00391     }
00392     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00393     {
00394         o->type = msgpack::type::ARRAY;
00395         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*6));
00396         o->via.array.size = 6;
00397         
00398         o->via.array.ptr[0] = msgpack::object(a0, z);
00399         o->via.array.ptr[1] = msgpack::object(a1, z);
00400         o->via.array.ptr[2] = msgpack::object(a2, z);
00401         o->via.array.ptr[3] = msgpack::object(a3, z);
00402         o->via.array.ptr[4] = msgpack::object(a4, z);
00403         o->via.array.ptr[5] = msgpack::object(a5, z);
00404     }
00405     
00406     A0& a0;
00407     A1& a1;
00408     A2& a2;
00409     A3& a3;
00410     A4& a4;
00411     A5& a5;
00412 };
00413 
00414 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
00415 struct define_array<A0, A1, A2, A3, A4, A5, A6> {
00416     typedef define_array<A0, A1, A2, A3, A4, A5, A6> value_type;
00417     typedef tuple<A0, A1, A2, A3, A4, A5, A6> tuple_type;
00418     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6) :
00419         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6) {}
00420     template <typename Packer>
00421     void msgpack_pack(Packer& pk) const
00422     {
00423         pk.pack_array(7);
00424         
00425         pk.pack(a0);
00426         pk.pack(a1);
00427         pk.pack(a2);
00428         pk.pack(a3);
00429         pk.pack(a4);
00430         pk.pack(a5);
00431         pk.pack(a6);
00432     }
00433     void msgpack_unpack(msgpack::object const& o)
00434     {
00435         if(o.type != msgpack::type::ARRAY) { 
00436             printf("throw msgpack::type_error()");
00437 //            throw msgpack::type_error(); 
00438         }
00439         const size_t size = o.via.array.size;
00440         if(size > 0) {
00441             msgpack::object *ptr = o.via.array.ptr;
00442             switch(size) {
00443             default:
00444             case 7: ptr[6].convert(a6);
00445             case 6: ptr[5].convert(a5);
00446             case 5: ptr[4].convert(a4);
00447             case 4: ptr[3].convert(a3);
00448             case 3: ptr[2].convert(a2);
00449             case 2: ptr[1].convert(a1);
00450             case 1: ptr[0].convert(a0);
00451             }
00452         }
00453     }
00454     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00455     {
00456         o->type = msgpack::type::ARRAY;
00457         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*7));
00458         o->via.array.size = 7;
00459         
00460         o->via.array.ptr[0] = msgpack::object(a0, z);
00461         o->via.array.ptr[1] = msgpack::object(a1, z);
00462         o->via.array.ptr[2] = msgpack::object(a2, z);
00463         o->via.array.ptr[3] = msgpack::object(a3, z);
00464         o->via.array.ptr[4] = msgpack::object(a4, z);
00465         o->via.array.ptr[5] = msgpack::object(a5, z);
00466         o->via.array.ptr[6] = msgpack::object(a6, z);
00467     }
00468     
00469     A0& a0;
00470     A1& a1;
00471     A2& a2;
00472     A3& a3;
00473     A4& a4;
00474     A5& a5;
00475     A6& a6;
00476 };
00477 
00478 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
00479 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7> {
00480     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7> value_type;
00481     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7> tuple_type;
00482     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7) :
00483         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7) {}
00484     template <typename Packer>
00485     void msgpack_pack(Packer& pk) const
00486     {
00487         pk.pack_array(8);
00488         
00489         pk.pack(a0);
00490         pk.pack(a1);
00491         pk.pack(a2);
00492         pk.pack(a3);
00493         pk.pack(a4);
00494         pk.pack(a5);
00495         pk.pack(a6);
00496         pk.pack(a7);
00497     }
00498     void msgpack_unpack(msgpack::object const& o)
00499     {
00500         if(o.type != msgpack::type::ARRAY) { 
00501             printf("throw msgpack::type_error()");
00502 //            throw msgpack::type_error(); 
00503         }
00504         const size_t size = o.via.array.size;
00505         if(size > 0) {
00506             msgpack::object *ptr = o.via.array.ptr;
00507             switch(size) {
00508             default:
00509             case 8: ptr[7].convert(a7);
00510             case 7: ptr[6].convert(a6);
00511             case 6: ptr[5].convert(a5);
00512             case 5: ptr[4].convert(a4);
00513             case 4: ptr[3].convert(a3);
00514             case 3: ptr[2].convert(a2);
00515             case 2: ptr[1].convert(a1);
00516             case 1: ptr[0].convert(a0);
00517             }
00518         }
00519     }
00520     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00521     {
00522         o->type = msgpack::type::ARRAY;
00523         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*8));
00524         o->via.array.size = 8;
00525         
00526         o->via.array.ptr[0] = msgpack::object(a0, z);
00527         o->via.array.ptr[1] = msgpack::object(a1, z);
00528         o->via.array.ptr[2] = msgpack::object(a2, z);
00529         o->via.array.ptr[3] = msgpack::object(a3, z);
00530         o->via.array.ptr[4] = msgpack::object(a4, z);
00531         o->via.array.ptr[5] = msgpack::object(a5, z);
00532         o->via.array.ptr[6] = msgpack::object(a6, z);
00533         o->via.array.ptr[7] = msgpack::object(a7, z);
00534     }
00535     
00536     A0& a0;
00537     A1& a1;
00538     A2& a2;
00539     A3& a3;
00540     A4& a4;
00541     A5& a5;
00542     A6& a6;
00543     A7& a7;
00544 };
00545 
00546 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
00547 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8> {
00548     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8> value_type;
00549     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> tuple_type;
00550     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8) :
00551         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8) {}
00552     template <typename Packer>
00553     void msgpack_pack(Packer& pk) const
00554     {
00555         pk.pack_array(9);
00556         
00557         pk.pack(a0);
00558         pk.pack(a1);
00559         pk.pack(a2);
00560         pk.pack(a3);
00561         pk.pack(a4);
00562         pk.pack(a5);
00563         pk.pack(a6);
00564         pk.pack(a7);
00565         pk.pack(a8);
00566     }
00567     void msgpack_unpack(msgpack::object const& o)
00568     {
00569         if(o.type != msgpack::type::ARRAY) { 
00570             printf("throw msgpack::type_error()");
00571 //            throw msgpack::type_error(); 
00572         }
00573         const size_t size = o.via.array.size;
00574         if(size > 0) {
00575             msgpack::object *ptr = o.via.array.ptr;
00576             switch(size) {
00577             default:
00578             case 9: ptr[8].convert(a8);
00579             case 8: ptr[7].convert(a7);
00580             case 7: ptr[6].convert(a6);
00581             case 6: ptr[5].convert(a5);
00582             case 5: ptr[4].convert(a4);
00583             case 4: ptr[3].convert(a3);
00584             case 3: ptr[2].convert(a2);
00585             case 2: ptr[1].convert(a1);
00586             case 1: ptr[0].convert(a0);
00587             }
00588         }
00589     }
00590     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00591     {
00592         o->type = msgpack::type::ARRAY;
00593         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*9));
00594         o->via.array.size = 9;
00595         
00596         o->via.array.ptr[0] = msgpack::object(a0, z);
00597         o->via.array.ptr[1] = msgpack::object(a1, z);
00598         o->via.array.ptr[2] = msgpack::object(a2, z);
00599         o->via.array.ptr[3] = msgpack::object(a3, z);
00600         o->via.array.ptr[4] = msgpack::object(a4, z);
00601         o->via.array.ptr[5] = msgpack::object(a5, z);
00602         o->via.array.ptr[6] = msgpack::object(a6, z);
00603         o->via.array.ptr[7] = msgpack::object(a7, z);
00604         o->via.array.ptr[8] = msgpack::object(a8, z);
00605     }
00606     
00607     A0& a0;
00608     A1& a1;
00609     A2& a2;
00610     A3& a3;
00611     A4& a4;
00612     A5& a5;
00613     A6& a6;
00614     A7& a7;
00615     A8& a8;
00616 };
00617 
00618 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
00619 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> {
00620     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> value_type;
00621     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> tuple_type;
00622     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9) :
00623         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9) {}
00624     template <typename Packer>
00625     void msgpack_pack(Packer& pk) const
00626     {
00627         pk.pack_array(10);
00628         
00629         pk.pack(a0);
00630         pk.pack(a1);
00631         pk.pack(a2);
00632         pk.pack(a3);
00633         pk.pack(a4);
00634         pk.pack(a5);
00635         pk.pack(a6);
00636         pk.pack(a7);
00637         pk.pack(a8);
00638         pk.pack(a9);
00639     }
00640     void msgpack_unpack(msgpack::object const& o)
00641     {
00642         if(o.type != msgpack::type::ARRAY) { 
00643             printf("throw msgpack::type_error()");
00644 //            throw msgpack::type_error(); 
00645         }
00646         const size_t size = o.via.array.size;
00647         if(size > 0) {
00648             msgpack::object *ptr = o.via.array.ptr;
00649             switch(size) {
00650             default:
00651             case 10: ptr[9].convert(a9);
00652             case 9: ptr[8].convert(a8);
00653             case 8: ptr[7].convert(a7);
00654             case 7: ptr[6].convert(a6);
00655             case 6: ptr[5].convert(a5);
00656             case 5: ptr[4].convert(a4);
00657             case 4: ptr[3].convert(a3);
00658             case 3: ptr[2].convert(a2);
00659             case 2: ptr[1].convert(a1);
00660             case 1: ptr[0].convert(a0);
00661             }
00662         }
00663     }
00664     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00665     {
00666         o->type = msgpack::type::ARRAY;
00667         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*10));
00668         o->via.array.size = 10;
00669         
00670         o->via.array.ptr[0] = msgpack::object(a0, z);
00671         o->via.array.ptr[1] = msgpack::object(a1, z);
00672         o->via.array.ptr[2] = msgpack::object(a2, z);
00673         o->via.array.ptr[3] = msgpack::object(a3, z);
00674         o->via.array.ptr[4] = msgpack::object(a4, z);
00675         o->via.array.ptr[5] = msgpack::object(a5, z);
00676         o->via.array.ptr[6] = msgpack::object(a6, z);
00677         o->via.array.ptr[7] = msgpack::object(a7, z);
00678         o->via.array.ptr[8] = msgpack::object(a8, z);
00679         o->via.array.ptr[9] = msgpack::object(a9, z);
00680     }
00681     
00682     A0& a0;
00683     A1& a1;
00684     A2& a2;
00685     A3& a3;
00686     A4& a4;
00687     A5& a5;
00688     A6& a6;
00689     A7& a7;
00690     A8& a8;
00691     A9& a9;
00692 };
00693 
00694 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
00695 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> {
00696     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> value_type;
00697     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> tuple_type;
00698     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10) :
00699         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10) {}
00700     template <typename Packer>
00701     void msgpack_pack(Packer& pk) const
00702     {
00703         pk.pack_array(11);
00704         
00705         pk.pack(a0);
00706         pk.pack(a1);
00707         pk.pack(a2);
00708         pk.pack(a3);
00709         pk.pack(a4);
00710         pk.pack(a5);
00711         pk.pack(a6);
00712         pk.pack(a7);
00713         pk.pack(a8);
00714         pk.pack(a9);
00715         pk.pack(a10);
00716     }
00717     void msgpack_unpack(msgpack::object const& o)
00718     {
00719         if(o.type != msgpack::type::ARRAY) { 
00720             printf("throw msgpack::type_error()");
00721 //            throw msgpack::type_error(); 
00722         }
00723         const size_t size = o.via.array.size;
00724         if(size > 0) {
00725             msgpack::object *ptr = o.via.array.ptr;
00726             switch(size) {
00727             default:
00728             case 11: ptr[10].convert(a10);
00729             case 10: ptr[9].convert(a9);
00730             case 9: ptr[8].convert(a8);
00731             case 8: ptr[7].convert(a7);
00732             case 7: ptr[6].convert(a6);
00733             case 6: ptr[5].convert(a5);
00734             case 5: ptr[4].convert(a4);
00735             case 4: ptr[3].convert(a3);
00736             case 3: ptr[2].convert(a2);
00737             case 2: ptr[1].convert(a1);
00738             case 1: ptr[0].convert(a0);
00739             }
00740         }
00741     }
00742     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00743     {
00744         o->type = msgpack::type::ARRAY;
00745         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*11));
00746         o->via.array.size = 11;
00747         
00748         o->via.array.ptr[0] = msgpack::object(a0, z);
00749         o->via.array.ptr[1] = msgpack::object(a1, z);
00750         o->via.array.ptr[2] = msgpack::object(a2, z);
00751         o->via.array.ptr[3] = msgpack::object(a3, z);
00752         o->via.array.ptr[4] = msgpack::object(a4, z);
00753         o->via.array.ptr[5] = msgpack::object(a5, z);
00754         o->via.array.ptr[6] = msgpack::object(a6, z);
00755         o->via.array.ptr[7] = msgpack::object(a7, z);
00756         o->via.array.ptr[8] = msgpack::object(a8, z);
00757         o->via.array.ptr[9] = msgpack::object(a9, z);
00758         o->via.array.ptr[10] = msgpack::object(a10, z);
00759     }
00760     
00761     A0& a0;
00762     A1& a1;
00763     A2& a2;
00764     A3& a3;
00765     A4& a4;
00766     A5& a5;
00767     A6& a6;
00768     A7& a7;
00769     A8& a8;
00770     A9& a9;
00771     A10& a10;
00772 };
00773 
00774 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
00775 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> {
00776     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> value_type;
00777     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> tuple_type;
00778     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) :
00779         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11) {}
00780     template <typename Packer>
00781     void msgpack_pack(Packer& pk) const
00782     {
00783         pk.pack_array(12);
00784         
00785         pk.pack(a0);
00786         pk.pack(a1);
00787         pk.pack(a2);
00788         pk.pack(a3);
00789         pk.pack(a4);
00790         pk.pack(a5);
00791         pk.pack(a6);
00792         pk.pack(a7);
00793         pk.pack(a8);
00794         pk.pack(a9);
00795         pk.pack(a10);
00796         pk.pack(a11);
00797     }
00798     void msgpack_unpack(msgpack::object const& o)
00799     {
00800         if(o.type != msgpack::type::ARRAY) { 
00801             printf("throw msgpack::type_error()");
00802 //            throw msgpack::type_error(); 
00803         }
00804         const size_t size = o.via.array.size;
00805         if(size > 0) {
00806             msgpack::object *ptr = o.via.array.ptr;
00807             switch(size) {
00808             default:
00809             case 12: ptr[11].convert(a11);
00810             case 11: ptr[10].convert(a10);
00811             case 10: ptr[9].convert(a9);
00812             case 9: ptr[8].convert(a8);
00813             case 8: ptr[7].convert(a7);
00814             case 7: ptr[6].convert(a6);
00815             case 6: ptr[5].convert(a5);
00816             case 5: ptr[4].convert(a4);
00817             case 4: ptr[3].convert(a3);
00818             case 3: ptr[2].convert(a2);
00819             case 2: ptr[1].convert(a1);
00820             case 1: ptr[0].convert(a0);
00821             }
00822         }
00823     }
00824     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00825     {
00826         o->type = msgpack::type::ARRAY;
00827         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*12));
00828         o->via.array.size = 12;
00829         
00830         o->via.array.ptr[0] = msgpack::object(a0, z);
00831         o->via.array.ptr[1] = msgpack::object(a1, z);
00832         o->via.array.ptr[2] = msgpack::object(a2, z);
00833         o->via.array.ptr[3] = msgpack::object(a3, z);
00834         o->via.array.ptr[4] = msgpack::object(a4, z);
00835         o->via.array.ptr[5] = msgpack::object(a5, z);
00836         o->via.array.ptr[6] = msgpack::object(a6, z);
00837         o->via.array.ptr[7] = msgpack::object(a7, z);
00838         o->via.array.ptr[8] = msgpack::object(a8, z);
00839         o->via.array.ptr[9] = msgpack::object(a9, z);
00840         o->via.array.ptr[10] = msgpack::object(a10, z);
00841         o->via.array.ptr[11] = msgpack::object(a11, z);
00842     }
00843     
00844     A0& a0;
00845     A1& a1;
00846     A2& a2;
00847     A3& a3;
00848     A4& a4;
00849     A5& a5;
00850     A6& a6;
00851     A7& a7;
00852     A8& a8;
00853     A9& a9;
00854     A10& a10;
00855     A11& a11;
00856 };
00857 
00858 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
00859 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> {
00860     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> value_type;
00861     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> tuple_type;
00862     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) :
00863         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) {}
00864     template <typename Packer>
00865     void msgpack_pack(Packer& pk) const
00866     {
00867         pk.pack_array(13);
00868         
00869         pk.pack(a0);
00870         pk.pack(a1);
00871         pk.pack(a2);
00872         pk.pack(a3);
00873         pk.pack(a4);
00874         pk.pack(a5);
00875         pk.pack(a6);
00876         pk.pack(a7);
00877         pk.pack(a8);
00878         pk.pack(a9);
00879         pk.pack(a10);
00880         pk.pack(a11);
00881         pk.pack(a12);
00882     }
00883     void msgpack_unpack(msgpack::object const& o)
00884     {
00885         if(o.type != msgpack::type::ARRAY) { 
00886             printf("throw msgpack::type_error()");
00887 //            throw msgpack::type_error(); 
00888         }
00889         const size_t size = o.via.array.size;
00890         if(size > 0) {
00891             msgpack::object *ptr = o.via.array.ptr;
00892             switch(size) {
00893             default:
00894             case 13: ptr[12].convert(a12);
00895             case 12: ptr[11].convert(a11);
00896             case 11: ptr[10].convert(a10);
00897             case 10: ptr[9].convert(a9);
00898             case 9: ptr[8].convert(a8);
00899             case 8: ptr[7].convert(a7);
00900             case 7: ptr[6].convert(a6);
00901             case 6: ptr[5].convert(a5);
00902             case 5: ptr[4].convert(a4);
00903             case 4: ptr[3].convert(a3);
00904             case 3: ptr[2].convert(a2);
00905             case 2: ptr[1].convert(a1);
00906             case 1: ptr[0].convert(a0);
00907             }
00908         }
00909     }
00910     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
00911     {
00912         o->type = msgpack::type::ARRAY;
00913         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*13));
00914         o->via.array.size = 13;
00915         
00916         o->via.array.ptr[0] = msgpack::object(a0, z);
00917         o->via.array.ptr[1] = msgpack::object(a1, z);
00918         o->via.array.ptr[2] = msgpack::object(a2, z);
00919         o->via.array.ptr[3] = msgpack::object(a3, z);
00920         o->via.array.ptr[4] = msgpack::object(a4, z);
00921         o->via.array.ptr[5] = msgpack::object(a5, z);
00922         o->via.array.ptr[6] = msgpack::object(a6, z);
00923         o->via.array.ptr[7] = msgpack::object(a7, z);
00924         o->via.array.ptr[8] = msgpack::object(a8, z);
00925         o->via.array.ptr[9] = msgpack::object(a9, z);
00926         o->via.array.ptr[10] = msgpack::object(a10, z);
00927         o->via.array.ptr[11] = msgpack::object(a11, z);
00928         o->via.array.ptr[12] = msgpack::object(a12, z);
00929     }
00930     
00931     A0& a0;
00932     A1& a1;
00933     A2& a2;
00934     A3& a3;
00935     A4& a4;
00936     A5& a5;
00937     A6& a6;
00938     A7& a7;
00939     A8& a8;
00940     A9& a9;
00941     A10& a10;
00942     A11& a11;
00943     A12& a12;
00944 };
00945 
00946 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
00947 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> {
00948     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> value_type;
00949     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> tuple_type;
00950     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) :
00951         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) {}
00952     template <typename Packer>
00953     void msgpack_pack(Packer& pk) const
00954     {
00955         pk.pack_array(14);
00956         
00957         pk.pack(a0);
00958         pk.pack(a1);
00959         pk.pack(a2);
00960         pk.pack(a3);
00961         pk.pack(a4);
00962         pk.pack(a5);
00963         pk.pack(a6);
00964         pk.pack(a7);
00965         pk.pack(a8);
00966         pk.pack(a9);
00967         pk.pack(a10);
00968         pk.pack(a11);
00969         pk.pack(a12);
00970         pk.pack(a13);
00971     }
00972     void msgpack_unpack(msgpack::object const& o)
00973     {
00974         if(o.type != msgpack::type::ARRAY) { 
00975             printf("throw msgpack::type_error()");
00976 //            throw msgpack::type_error(); 
00977         }
00978         const size_t size = o.via.array.size;
00979         if(size > 0) {
00980             msgpack::object *ptr = o.via.array.ptr;
00981             switch(size) {
00982             default:
00983             case 14: ptr[13].convert(a13);
00984             case 13: ptr[12].convert(a12);
00985             case 12: ptr[11].convert(a11);
00986             case 11: ptr[10].convert(a10);
00987             case 10: ptr[9].convert(a9);
00988             case 9: ptr[8].convert(a8);
00989             case 8: ptr[7].convert(a7);
00990             case 7: ptr[6].convert(a6);
00991             case 6: ptr[5].convert(a5);
00992             case 5: ptr[4].convert(a4);
00993             case 4: ptr[3].convert(a3);
00994             case 3: ptr[2].convert(a2);
00995             case 2: ptr[1].convert(a1);
00996             case 1: ptr[0].convert(a0);
00997             }
00998         }
00999     }
01000     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
01001     {
01002         o->type = msgpack::type::ARRAY;
01003         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*14));
01004         o->via.array.size = 14;
01005         
01006         o->via.array.ptr[0] = msgpack::object(a0, z);
01007         o->via.array.ptr[1] = msgpack::object(a1, z);
01008         o->via.array.ptr[2] = msgpack::object(a2, z);
01009         o->via.array.ptr[3] = msgpack::object(a3, z);
01010         o->via.array.ptr[4] = msgpack::object(a4, z);
01011         o->via.array.ptr[5] = msgpack::object(a5, z);
01012         o->via.array.ptr[6] = msgpack::object(a6, z);
01013         o->via.array.ptr[7] = msgpack::object(a7, z);
01014         o->via.array.ptr[8] = msgpack::object(a8, z);
01015         o->via.array.ptr[9] = msgpack::object(a9, z);
01016         o->via.array.ptr[10] = msgpack::object(a10, z);
01017         o->via.array.ptr[11] = msgpack::object(a11, z);
01018         o->via.array.ptr[12] = msgpack::object(a12, z);
01019         o->via.array.ptr[13] = msgpack::object(a13, z);
01020     }
01021     
01022     A0& a0;
01023     A1& a1;
01024     A2& a2;
01025     A3& a3;
01026     A4& a4;
01027     A5& a5;
01028     A6& a6;
01029     A7& a7;
01030     A8& a8;
01031     A9& a9;
01032     A10& a10;
01033     A11& a11;
01034     A12& a12;
01035     A13& a13;
01036 };
01037 
01038 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
01039 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> {
01040     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> value_type;
01041     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> tuple_type;
01042     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) :
01043         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) {}
01044     template <typename Packer>
01045     void msgpack_pack(Packer& pk) const
01046     {
01047         pk.pack_array(15);
01048         
01049         pk.pack(a0);
01050         pk.pack(a1);
01051         pk.pack(a2);
01052         pk.pack(a3);
01053         pk.pack(a4);
01054         pk.pack(a5);
01055         pk.pack(a6);
01056         pk.pack(a7);
01057         pk.pack(a8);
01058         pk.pack(a9);
01059         pk.pack(a10);
01060         pk.pack(a11);
01061         pk.pack(a12);
01062         pk.pack(a13);
01063         pk.pack(a14);
01064     }
01065     void msgpack_unpack(msgpack::object const& o)
01066     {
01067         if(o.type != msgpack::type::ARRAY) { 
01068             printf("throw msgpack::type_error()");
01069             throw msgpack::type_error(); 
01070         }
01071         const size_t size = o.via.array.size;
01072         if(size > 0) {
01073             msgpack::object *ptr = o.via.array.ptr;
01074             switch(size) {
01075             default:
01076             case 15: ptr[14].convert(a14);
01077             case 14: ptr[13].convert(a13);
01078             case 13: ptr[12].convert(a12);
01079             case 12: ptr[11].convert(a11);
01080             case 11: ptr[10].convert(a10);
01081             case 10: ptr[9].convert(a9);
01082             case 9: ptr[8].convert(a8);
01083             case 8: ptr[7].convert(a7);
01084             case 7: ptr[6].convert(a6);
01085             case 6: ptr[5].convert(a5);
01086             case 5: ptr[4].convert(a4);
01087             case 4: ptr[3].convert(a3);
01088             case 3: ptr[2].convert(a2);
01089             case 2: ptr[1].convert(a1);
01090             case 1: ptr[0].convert(a0);
01091             }
01092         }
01093     }
01094     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
01095     {
01096         o->type = msgpack::type::ARRAY;
01097         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*15));
01098         o->via.array.size = 15;
01099         
01100         o->via.array.ptr[0] = msgpack::object(a0, z);
01101         o->via.array.ptr[1] = msgpack::object(a1, z);
01102         o->via.array.ptr[2] = msgpack::object(a2, z);
01103         o->via.array.ptr[3] = msgpack::object(a3, z);
01104         o->via.array.ptr[4] = msgpack::object(a4, z);
01105         o->via.array.ptr[5] = msgpack::object(a5, z);
01106         o->via.array.ptr[6] = msgpack::object(a6, z);
01107         o->via.array.ptr[7] = msgpack::object(a7, z);
01108         o->via.array.ptr[8] = msgpack::object(a8, z);
01109         o->via.array.ptr[9] = msgpack::object(a9, z);
01110         o->via.array.ptr[10] = msgpack::object(a10, z);
01111         o->via.array.ptr[11] = msgpack::object(a11, z);
01112         o->via.array.ptr[12] = msgpack::object(a12, z);
01113         o->via.array.ptr[13] = msgpack::object(a13, z);
01114         o->via.array.ptr[14] = msgpack::object(a14, z);
01115     }
01116     
01117     A0& a0;
01118     A1& a1;
01119     A2& a2;
01120     A3& a3;
01121     A4& a4;
01122     A5& a5;
01123     A6& a6;
01124     A7& a7;
01125     A8& a8;
01126     A9& a9;
01127     A10& a10;
01128     A11& a11;
01129     A12& a12;
01130     A13& a13;
01131     A14& a14;
01132 };
01133 
01134 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
01135 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> {
01136     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> value_type;
01137     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> tuple_type;
01138     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) :
01139         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) {}
01140     template <typename Packer>
01141     void msgpack_pack(Packer& pk) const
01142     {
01143         pk.pack_array(16);
01144         
01145         pk.pack(a0);
01146         pk.pack(a1);
01147         pk.pack(a2);
01148         pk.pack(a3);
01149         pk.pack(a4);
01150         pk.pack(a5);
01151         pk.pack(a6);
01152         pk.pack(a7);
01153         pk.pack(a8);
01154         pk.pack(a9);
01155         pk.pack(a10);
01156         pk.pack(a11);
01157         pk.pack(a12);
01158         pk.pack(a13);
01159         pk.pack(a14);
01160         pk.pack(a15);
01161     }
01162     void msgpack_unpack(msgpack::object const& o)
01163     {
01164         if(o.type != msgpack::type::ARRAY) { 
01165             printf("throw msgpack::type_error()");
01166 //            throw msgpack::type_error(); 
01167         }
01168         const size_t size = o.via.array.size;
01169         if(size > 0) {
01170             msgpack::object *ptr = o.via.array.ptr;
01171             switch(size) {
01172             default:
01173             case 16: ptr[15].convert(a15);
01174             case 15: ptr[14].convert(a14);
01175             case 14: ptr[13].convert(a13);
01176             case 13: ptr[12].convert(a12);
01177             case 12: ptr[11].convert(a11);
01178             case 11: ptr[10].convert(a10);
01179             case 10: ptr[9].convert(a9);
01180             case 9: ptr[8].convert(a8);
01181             case 8: ptr[7].convert(a7);
01182             case 7: ptr[6].convert(a6);
01183             case 6: ptr[5].convert(a5);
01184             case 5: ptr[4].convert(a4);
01185             case 4: ptr[3].convert(a3);
01186             case 3: ptr[2].convert(a2);
01187             case 2: ptr[1].convert(a1);
01188             case 1: ptr[0].convert(a0);
01189             }
01190         }
01191     }
01192     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
01193     {
01194         o->type = msgpack::type::ARRAY;
01195         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*16));
01196         o->via.array.size = 16;
01197         
01198         o->via.array.ptr[0] = msgpack::object(a0, z);
01199         o->via.array.ptr[1] = msgpack::object(a1, z);
01200         o->via.array.ptr[2] = msgpack::object(a2, z);
01201         o->via.array.ptr[3] = msgpack::object(a3, z);
01202         o->via.array.ptr[4] = msgpack::object(a4, z);
01203         o->via.array.ptr[5] = msgpack::object(a5, z);
01204         o->via.array.ptr[6] = msgpack::object(a6, z);
01205         o->via.array.ptr[7] = msgpack::object(a7, z);
01206         o->via.array.ptr[8] = msgpack::object(a8, z);
01207         o->via.array.ptr[9] = msgpack::object(a9, z);
01208         o->via.array.ptr[10] = msgpack::object(a10, z);
01209         o->via.array.ptr[11] = msgpack::object(a11, z);
01210         o->via.array.ptr[12] = msgpack::object(a12, z);
01211         o->via.array.ptr[13] = msgpack::object(a13, z);
01212         o->via.array.ptr[14] = msgpack::object(a14, z);
01213         o->via.array.ptr[15] = msgpack::object(a15, z);
01214     }
01215     
01216     A0& a0;
01217     A1& a1;
01218     A2& a2;
01219     A3& a3;
01220     A4& a4;
01221     A5& a5;
01222     A6& a6;
01223     A7& a7;
01224     A8& a8;
01225     A9& a9;
01226     A10& a10;
01227     A11& a11;
01228     A12& a12;
01229     A13& a13;
01230     A14& a14;
01231     A15& a15;
01232 };
01233 
01234 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
01235 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> {
01236     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> value_type;
01237     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> tuple_type;
01238     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) :
01239         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) {}
01240     template <typename Packer>
01241     void msgpack_pack(Packer& pk) const
01242     {
01243         pk.pack_array(17);
01244         
01245         pk.pack(a0);
01246         pk.pack(a1);
01247         pk.pack(a2);
01248         pk.pack(a3);
01249         pk.pack(a4);
01250         pk.pack(a5);
01251         pk.pack(a6);
01252         pk.pack(a7);
01253         pk.pack(a8);
01254         pk.pack(a9);
01255         pk.pack(a10);
01256         pk.pack(a11);
01257         pk.pack(a12);
01258         pk.pack(a13);
01259         pk.pack(a14);
01260         pk.pack(a15);
01261         pk.pack(a16);
01262     }
01263     void msgpack_unpack(msgpack::object const& o)
01264     {
01265         if(o.type != msgpack::type::ARRAY) { 
01266             printf("throw msgpack::type_error()");
01267 //            throw msgpack::type_error(); 
01268         }
01269         const size_t size = o.via.array.size;
01270         if(size > 0) {
01271             msgpack::object *ptr = o.via.array.ptr;
01272             switch(size) {
01273             default:
01274             case 17: ptr[16].convert(a16);
01275             case 16: ptr[15].convert(a15);
01276             case 15: ptr[14].convert(a14);
01277             case 14: ptr[13].convert(a13);
01278             case 13: ptr[12].convert(a12);
01279             case 12: ptr[11].convert(a11);
01280             case 11: ptr[10].convert(a10);
01281             case 10: ptr[9].convert(a9);
01282             case 9: ptr[8].convert(a8);
01283             case 8: ptr[7].convert(a7);
01284             case 7: ptr[6].convert(a6);
01285             case 6: ptr[5].convert(a5);
01286             case 5: ptr[4].convert(a4);
01287             case 4: ptr[3].convert(a3);
01288             case 3: ptr[2].convert(a2);
01289             case 2: ptr[1].convert(a1);
01290             case 1: ptr[0].convert(a0);
01291             }
01292         }
01293     }
01294     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
01295     {
01296         o->type = msgpack::type::ARRAY;
01297         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*17));
01298         o->via.array.size = 17;
01299         
01300         o->via.array.ptr[0] = msgpack::object(a0, z);
01301         o->via.array.ptr[1] = msgpack::object(a1, z);
01302         o->via.array.ptr[2] = msgpack::object(a2, z);
01303         o->via.array.ptr[3] = msgpack::object(a3, z);
01304         o->via.array.ptr[4] = msgpack::object(a4, z);
01305         o->via.array.ptr[5] = msgpack::object(a5, z);
01306         o->via.array.ptr[6] = msgpack::object(a6, z);
01307         o->via.array.ptr[7] = msgpack::object(a7, z);
01308         o->via.array.ptr[8] = msgpack::object(a8, z);
01309         o->via.array.ptr[9] = msgpack::object(a9, z);
01310         o->via.array.ptr[10] = msgpack::object(a10, z);
01311         o->via.array.ptr[11] = msgpack::object(a11, z);
01312         o->via.array.ptr[12] = msgpack::object(a12, z);
01313         o->via.array.ptr[13] = msgpack::object(a13, z);
01314         o->via.array.ptr[14] = msgpack::object(a14, z);
01315         o->via.array.ptr[15] = msgpack::object(a15, z);
01316         o->via.array.ptr[16] = msgpack::object(a16, z);
01317     }
01318     
01319     A0& a0;
01320     A1& a1;
01321     A2& a2;
01322     A3& a3;
01323     A4& a4;
01324     A5& a5;
01325     A6& a6;
01326     A7& a7;
01327     A8& a8;
01328     A9& a9;
01329     A10& a10;
01330     A11& a11;
01331     A12& a12;
01332     A13& a13;
01333     A14& a14;
01334     A15& a15;
01335     A16& a16;
01336 };
01337 
01338 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
01339 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> {
01340     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> value_type;
01341     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> tuple_type;
01342     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) :
01343         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) {}
01344     template <typename Packer>
01345     void msgpack_pack(Packer& pk) const
01346     {
01347         pk.pack_array(18);
01348         
01349         pk.pack(a0);
01350         pk.pack(a1);
01351         pk.pack(a2);
01352         pk.pack(a3);
01353         pk.pack(a4);
01354         pk.pack(a5);
01355         pk.pack(a6);
01356         pk.pack(a7);
01357         pk.pack(a8);
01358         pk.pack(a9);
01359         pk.pack(a10);
01360         pk.pack(a11);
01361         pk.pack(a12);
01362         pk.pack(a13);
01363         pk.pack(a14);
01364         pk.pack(a15);
01365         pk.pack(a16);
01366         pk.pack(a17);
01367     }
01368     void msgpack_unpack(msgpack::object const& o)
01369     {
01370         if(o.type != msgpack::type::ARRAY) { 
01371             printf("throw msgpack::type_error()");
01372 //            throw msgpack::type_error(); 
01373         }
01374         const size_t size = o.via.array.size;
01375         if(size > 0) {
01376             msgpack::object *ptr = o.via.array.ptr;
01377             switch(size) {
01378             default:
01379             case 18: ptr[17].convert(a17);
01380             case 17: ptr[16].convert(a16);
01381             case 16: ptr[15].convert(a15);
01382             case 15: ptr[14].convert(a14);
01383             case 14: ptr[13].convert(a13);
01384             case 13: ptr[12].convert(a12);
01385             case 12: ptr[11].convert(a11);
01386             case 11: ptr[10].convert(a10);
01387             case 10: ptr[9].convert(a9);
01388             case 9: ptr[8].convert(a8);
01389             case 8: ptr[7].convert(a7);
01390             case 7: ptr[6].convert(a6);
01391             case 6: ptr[5].convert(a5);
01392             case 5: ptr[4].convert(a4);
01393             case 4: ptr[3].convert(a3);
01394             case 3: ptr[2].convert(a2);
01395             case 2: ptr[1].convert(a1);
01396             case 1: ptr[0].convert(a0);
01397             }
01398         }
01399     }
01400     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
01401     {
01402         o->type = msgpack::type::ARRAY;
01403         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*18));
01404         o->via.array.size = 18;
01405         
01406         o->via.array.ptr[0] = msgpack::object(a0, z);
01407         o->via.array.ptr[1] = msgpack::object(a1, z);
01408         o->via.array.ptr[2] = msgpack::object(a2, z);
01409         o->via.array.ptr[3] = msgpack::object(a3, z);
01410         o->via.array.ptr[4] = msgpack::object(a4, z);
01411         o->via.array.ptr[5] = msgpack::object(a5, z);
01412         o->via.array.ptr[6] = msgpack::object(a6, z);
01413         o->via.array.ptr[7] = msgpack::object(a7, z);
01414         o->via.array.ptr[8] = msgpack::object(a8, z);
01415         o->via.array.ptr[9] = msgpack::object(a9, z);
01416         o->via.array.ptr[10] = msgpack::object(a10, z);
01417         o->via.array.ptr[11] = msgpack::object(a11, z);
01418         o->via.array.ptr[12] = msgpack::object(a12, z);
01419         o->via.array.ptr[13] = msgpack::object(a13, z);
01420         o->via.array.ptr[14] = msgpack::object(a14, z);
01421         o->via.array.ptr[15] = msgpack::object(a15, z);
01422         o->via.array.ptr[16] = msgpack::object(a16, z);
01423         o->via.array.ptr[17] = msgpack::object(a17, z);
01424     }
01425     
01426     A0& a0;
01427     A1& a1;
01428     A2& a2;
01429     A3& a3;
01430     A4& a4;
01431     A5& a5;
01432     A6& a6;
01433     A7& a7;
01434     A8& a8;
01435     A9& a9;
01436     A10& a10;
01437     A11& a11;
01438     A12& a12;
01439     A13& a13;
01440     A14& a14;
01441     A15& a15;
01442     A16& a16;
01443     A17& a17;
01444 };
01445 
01446 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
01447 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> {
01448     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> value_type;
01449     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> tuple_type;
01450     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) :
01451         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) {}
01452     template <typename Packer>
01453     void msgpack_pack(Packer& pk) const
01454     {
01455         pk.pack_array(19);
01456         
01457         pk.pack(a0);
01458         pk.pack(a1);
01459         pk.pack(a2);
01460         pk.pack(a3);
01461         pk.pack(a4);
01462         pk.pack(a5);
01463         pk.pack(a6);
01464         pk.pack(a7);
01465         pk.pack(a8);
01466         pk.pack(a9);
01467         pk.pack(a10);
01468         pk.pack(a11);
01469         pk.pack(a12);
01470         pk.pack(a13);
01471         pk.pack(a14);
01472         pk.pack(a15);
01473         pk.pack(a16);
01474         pk.pack(a17);
01475         pk.pack(a18);
01476     }
01477     void msgpack_unpack(msgpack::object const& o)
01478     {
01479         if(o.type != msgpack::type::ARRAY) { 
01480             printf("throw msgpack::type_error()");
01481 //            throw msgpack::type_error(); 
01482         }
01483         const size_t size = o.via.array.size;
01484         if(size > 0) {
01485             msgpack::object *ptr = o.via.array.ptr;
01486             switch(size) {
01487             default:
01488             case 19: ptr[18].convert(a18);
01489             case 18: ptr[17].convert(a17);
01490             case 17: ptr[16].convert(a16);
01491             case 16: ptr[15].convert(a15);
01492             case 15: ptr[14].convert(a14);
01493             case 14: ptr[13].convert(a13);
01494             case 13: ptr[12].convert(a12);
01495             case 12: ptr[11].convert(a11);
01496             case 11: ptr[10].convert(a10);
01497             case 10: ptr[9].convert(a9);
01498             case 9: ptr[8].convert(a8);
01499             case 8: ptr[7].convert(a7);
01500             case 7: ptr[6].convert(a6);
01501             case 6: ptr[5].convert(a5);
01502             case 5: ptr[4].convert(a4);
01503             case 4: ptr[3].convert(a3);
01504             case 3: ptr[2].convert(a2);
01505             case 2: ptr[1].convert(a1);
01506             case 1: ptr[0].convert(a0);
01507             }
01508         }
01509     }
01510     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
01511     {
01512         o->type = msgpack::type::ARRAY;
01513         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*19));
01514         o->via.array.size = 19;
01515         
01516         o->via.array.ptr[0] = msgpack::object(a0, z);
01517         o->via.array.ptr[1] = msgpack::object(a1, z);
01518         o->via.array.ptr[2] = msgpack::object(a2, z);
01519         o->via.array.ptr[3] = msgpack::object(a3, z);
01520         o->via.array.ptr[4] = msgpack::object(a4, z);
01521         o->via.array.ptr[5] = msgpack::object(a5, z);
01522         o->via.array.ptr[6] = msgpack::object(a6, z);
01523         o->via.array.ptr[7] = msgpack::object(a7, z);
01524         o->via.array.ptr[8] = msgpack::object(a8, z);
01525         o->via.array.ptr[9] = msgpack::object(a9, z);
01526         o->via.array.ptr[10] = msgpack::object(a10, z);
01527         o->via.array.ptr[11] = msgpack::object(a11, z);
01528         o->via.array.ptr[12] = msgpack::object(a12, z);
01529         o->via.array.ptr[13] = msgpack::object(a13, z);
01530         o->via.array.ptr[14] = msgpack::object(a14, z);
01531         o->via.array.ptr[15] = msgpack::object(a15, z);
01532         o->via.array.ptr[16] = msgpack::object(a16, z);
01533         o->via.array.ptr[17] = msgpack::object(a17, z);
01534         o->via.array.ptr[18] = msgpack::object(a18, z);
01535     }
01536     
01537     A0& a0;
01538     A1& a1;
01539     A2& a2;
01540     A3& a3;
01541     A4& a4;
01542     A5& a5;
01543     A6& a6;
01544     A7& a7;
01545     A8& a8;
01546     A9& a9;
01547     A10& a10;
01548     A11& a11;
01549     A12& a12;
01550     A13& a13;
01551     A14& a14;
01552     A15& a15;
01553     A16& a16;
01554     A17& a17;
01555     A18& a18;
01556 };
01557 
01558 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
01559 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> {
01560     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> value_type;
01561     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> tuple_type;
01562     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) :
01563         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) {}
01564     template <typename Packer>
01565     void msgpack_pack(Packer& pk) const
01566     {
01567         pk.pack_array(20);
01568         
01569         pk.pack(a0);
01570         pk.pack(a1);
01571         pk.pack(a2);
01572         pk.pack(a3);
01573         pk.pack(a4);
01574         pk.pack(a5);
01575         pk.pack(a6);
01576         pk.pack(a7);
01577         pk.pack(a8);
01578         pk.pack(a9);
01579         pk.pack(a10);
01580         pk.pack(a11);
01581         pk.pack(a12);
01582         pk.pack(a13);
01583         pk.pack(a14);
01584         pk.pack(a15);
01585         pk.pack(a16);
01586         pk.pack(a17);
01587         pk.pack(a18);
01588         pk.pack(a19);
01589     }
01590     void msgpack_unpack(msgpack::object const& o)
01591     {
01592         if(o.type != msgpack::type::ARRAY) { 
01593             printf("throw msgpack::type_error()");
01594 //            throw msgpack::type_error(); 
01595         }
01596         const size_t size = o.via.array.size;
01597         if(size > 0) {
01598             msgpack::object *ptr = o.via.array.ptr;
01599             switch(size) {
01600             default:
01601             case 20: ptr[19].convert(a19);
01602             case 19: ptr[18].convert(a18);
01603             case 18: ptr[17].convert(a17);
01604             case 17: ptr[16].convert(a16);
01605             case 16: ptr[15].convert(a15);
01606             case 15: ptr[14].convert(a14);
01607             case 14: ptr[13].convert(a13);
01608             case 13: ptr[12].convert(a12);
01609             case 12: ptr[11].convert(a11);
01610             case 11: ptr[10].convert(a10);
01611             case 10: ptr[9].convert(a9);
01612             case 9: ptr[8].convert(a8);
01613             case 8: ptr[7].convert(a7);
01614             case 7: ptr[6].convert(a6);
01615             case 6: ptr[5].convert(a5);
01616             case 5: ptr[4].convert(a4);
01617             case 4: ptr[3].convert(a3);
01618             case 3: ptr[2].convert(a2);
01619             case 2: ptr[1].convert(a1);
01620             case 1: ptr[0].convert(a0);
01621             }
01622         }
01623     }
01624     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
01625     {
01626         o->type = msgpack::type::ARRAY;
01627         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*20));
01628         o->via.array.size = 20;
01629         
01630         o->via.array.ptr[0] = msgpack::object(a0, z);
01631         o->via.array.ptr[1] = msgpack::object(a1, z);
01632         o->via.array.ptr[2] = msgpack::object(a2, z);
01633         o->via.array.ptr[3] = msgpack::object(a3, z);
01634         o->via.array.ptr[4] = msgpack::object(a4, z);
01635         o->via.array.ptr[5] = msgpack::object(a5, z);
01636         o->via.array.ptr[6] = msgpack::object(a6, z);
01637         o->via.array.ptr[7] = msgpack::object(a7, z);
01638         o->via.array.ptr[8] = msgpack::object(a8, z);
01639         o->via.array.ptr[9] = msgpack::object(a9, z);
01640         o->via.array.ptr[10] = msgpack::object(a10, z);
01641         o->via.array.ptr[11] = msgpack::object(a11, z);
01642         o->via.array.ptr[12] = msgpack::object(a12, z);
01643         o->via.array.ptr[13] = msgpack::object(a13, z);
01644         o->via.array.ptr[14] = msgpack::object(a14, z);
01645         o->via.array.ptr[15] = msgpack::object(a15, z);
01646         o->via.array.ptr[16] = msgpack::object(a16, z);
01647         o->via.array.ptr[17] = msgpack::object(a17, z);
01648         o->via.array.ptr[18] = msgpack::object(a18, z);
01649         o->via.array.ptr[19] = msgpack::object(a19, z);
01650     }
01651     
01652     A0& a0;
01653     A1& a1;
01654     A2& a2;
01655     A3& a3;
01656     A4& a4;
01657     A5& a5;
01658     A6& a6;
01659     A7& a7;
01660     A8& a8;
01661     A9& a9;
01662     A10& a10;
01663     A11& a11;
01664     A12& a12;
01665     A13& a13;
01666     A14& a14;
01667     A15& a15;
01668     A16& a16;
01669     A17& a17;
01670     A18& a18;
01671     A19& a19;
01672 };
01673 
01674 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
01675 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> {
01676     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> value_type;
01677     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> tuple_type;
01678     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) :
01679         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) {}
01680     template <typename Packer>
01681     void msgpack_pack(Packer& pk) const
01682     {
01683         pk.pack_array(21);
01684         
01685         pk.pack(a0);
01686         pk.pack(a1);
01687         pk.pack(a2);
01688         pk.pack(a3);
01689         pk.pack(a4);
01690         pk.pack(a5);
01691         pk.pack(a6);
01692         pk.pack(a7);
01693         pk.pack(a8);
01694         pk.pack(a9);
01695         pk.pack(a10);
01696         pk.pack(a11);
01697         pk.pack(a12);
01698         pk.pack(a13);
01699         pk.pack(a14);
01700         pk.pack(a15);
01701         pk.pack(a16);
01702         pk.pack(a17);
01703         pk.pack(a18);
01704         pk.pack(a19);
01705         pk.pack(a20);
01706     }
01707     void msgpack_unpack(msgpack::object const& o)
01708     {
01709         if(o.type != msgpack::type::ARRAY) { 
01710             printf("throw msgpack::type_error()");
01711 //            throw msgpack::type_error(); 
01712         }
01713         const size_t size = o.via.array.size;
01714         if(size > 0) {
01715             msgpack::object *ptr = o.via.array.ptr;
01716             switch(size) {
01717             default:
01718             case 21: ptr[20].convert(a20);
01719             case 20: ptr[19].convert(a19);
01720             case 19: ptr[18].convert(a18);
01721             case 18: ptr[17].convert(a17);
01722             case 17: ptr[16].convert(a16);
01723             case 16: ptr[15].convert(a15);
01724             case 15: ptr[14].convert(a14);
01725             case 14: ptr[13].convert(a13);
01726             case 13: ptr[12].convert(a12);
01727             case 12: ptr[11].convert(a11);
01728             case 11: ptr[10].convert(a10);
01729             case 10: ptr[9].convert(a9);
01730             case 9: ptr[8].convert(a8);
01731             case 8: ptr[7].convert(a7);
01732             case 7: ptr[6].convert(a6);
01733             case 6: ptr[5].convert(a5);
01734             case 5: ptr[4].convert(a4);
01735             case 4: ptr[3].convert(a3);
01736             case 3: ptr[2].convert(a2);
01737             case 2: ptr[1].convert(a1);
01738             case 1: ptr[0].convert(a0);
01739             }
01740         }
01741     }
01742     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
01743     {
01744         o->type = msgpack::type::ARRAY;
01745         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*21));
01746         o->via.array.size = 21;
01747         
01748         o->via.array.ptr[0] = msgpack::object(a0, z);
01749         o->via.array.ptr[1] = msgpack::object(a1, z);
01750         o->via.array.ptr[2] = msgpack::object(a2, z);
01751         o->via.array.ptr[3] = msgpack::object(a3, z);
01752         o->via.array.ptr[4] = msgpack::object(a4, z);
01753         o->via.array.ptr[5] = msgpack::object(a5, z);
01754         o->via.array.ptr[6] = msgpack::object(a6, z);
01755         o->via.array.ptr[7] = msgpack::object(a7, z);
01756         o->via.array.ptr[8] = msgpack::object(a8, z);
01757         o->via.array.ptr[9] = msgpack::object(a9, z);
01758         o->via.array.ptr[10] = msgpack::object(a10, z);
01759         o->via.array.ptr[11] = msgpack::object(a11, z);
01760         o->via.array.ptr[12] = msgpack::object(a12, z);
01761         o->via.array.ptr[13] = msgpack::object(a13, z);
01762         o->via.array.ptr[14] = msgpack::object(a14, z);
01763         o->via.array.ptr[15] = msgpack::object(a15, z);
01764         o->via.array.ptr[16] = msgpack::object(a16, z);
01765         o->via.array.ptr[17] = msgpack::object(a17, z);
01766         o->via.array.ptr[18] = msgpack::object(a18, z);
01767         o->via.array.ptr[19] = msgpack::object(a19, z);
01768         o->via.array.ptr[20] = msgpack::object(a20, z);
01769     }
01770     
01771     A0& a0;
01772     A1& a1;
01773     A2& a2;
01774     A3& a3;
01775     A4& a4;
01776     A5& a5;
01777     A6& a6;
01778     A7& a7;
01779     A8& a8;
01780     A9& a9;
01781     A10& a10;
01782     A11& a11;
01783     A12& a12;
01784     A13& a13;
01785     A14& a14;
01786     A15& a15;
01787     A16& a16;
01788     A17& a17;
01789     A18& a18;
01790     A19& a19;
01791     A20& a20;
01792 };
01793 
01794 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
01795 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> {
01796     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> value_type;
01797     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> tuple_type;
01798     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) :
01799         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) {}
01800     template <typename Packer>
01801     void msgpack_pack(Packer& pk) const
01802     {
01803         pk.pack_array(22);
01804         
01805         pk.pack(a0);
01806         pk.pack(a1);
01807         pk.pack(a2);
01808         pk.pack(a3);
01809         pk.pack(a4);
01810         pk.pack(a5);
01811         pk.pack(a6);
01812         pk.pack(a7);
01813         pk.pack(a8);
01814         pk.pack(a9);
01815         pk.pack(a10);
01816         pk.pack(a11);
01817         pk.pack(a12);
01818         pk.pack(a13);
01819         pk.pack(a14);
01820         pk.pack(a15);
01821         pk.pack(a16);
01822         pk.pack(a17);
01823         pk.pack(a18);
01824         pk.pack(a19);
01825         pk.pack(a20);
01826         pk.pack(a21);
01827     }
01828     void msgpack_unpack(msgpack::object const& o)
01829     {
01830         if(o.type != msgpack::type::ARRAY) { 
01831             printf("throw msgpack::type_error()");
01832 //            throw msgpack::type_error(); 
01833         }
01834         const size_t size = o.via.array.size;
01835         if(size > 0) {
01836             msgpack::object *ptr = o.via.array.ptr;
01837             switch(size) {
01838             default:
01839             case 22: ptr[21].convert(a21);
01840             case 21: ptr[20].convert(a20);
01841             case 20: ptr[19].convert(a19);
01842             case 19: ptr[18].convert(a18);
01843             case 18: ptr[17].convert(a17);
01844             case 17: ptr[16].convert(a16);
01845             case 16: ptr[15].convert(a15);
01846             case 15: ptr[14].convert(a14);
01847             case 14: ptr[13].convert(a13);
01848             case 13: ptr[12].convert(a12);
01849             case 12: ptr[11].convert(a11);
01850             case 11: ptr[10].convert(a10);
01851             case 10: ptr[9].convert(a9);
01852             case 9: ptr[8].convert(a8);
01853             case 8: ptr[7].convert(a7);
01854             case 7: ptr[6].convert(a6);
01855             case 6: ptr[5].convert(a5);
01856             case 5: ptr[4].convert(a4);
01857             case 4: ptr[3].convert(a3);
01858             case 3: ptr[2].convert(a2);
01859             case 2: ptr[1].convert(a1);
01860             case 1: ptr[0].convert(a0);
01861             }
01862         }
01863     }
01864     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
01865     {
01866         o->type = msgpack::type::ARRAY;
01867         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*22));
01868         o->via.array.size = 22;
01869         
01870         o->via.array.ptr[0] = msgpack::object(a0, z);
01871         o->via.array.ptr[1] = msgpack::object(a1, z);
01872         o->via.array.ptr[2] = msgpack::object(a2, z);
01873         o->via.array.ptr[3] = msgpack::object(a3, z);
01874         o->via.array.ptr[4] = msgpack::object(a4, z);
01875         o->via.array.ptr[5] = msgpack::object(a5, z);
01876         o->via.array.ptr[6] = msgpack::object(a6, z);
01877         o->via.array.ptr[7] = msgpack::object(a7, z);
01878         o->via.array.ptr[8] = msgpack::object(a8, z);
01879         o->via.array.ptr[9] = msgpack::object(a9, z);
01880         o->via.array.ptr[10] = msgpack::object(a10, z);
01881         o->via.array.ptr[11] = msgpack::object(a11, z);
01882         o->via.array.ptr[12] = msgpack::object(a12, z);
01883         o->via.array.ptr[13] = msgpack::object(a13, z);
01884         o->via.array.ptr[14] = msgpack::object(a14, z);
01885         o->via.array.ptr[15] = msgpack::object(a15, z);
01886         o->via.array.ptr[16] = msgpack::object(a16, z);
01887         o->via.array.ptr[17] = msgpack::object(a17, z);
01888         o->via.array.ptr[18] = msgpack::object(a18, z);
01889         o->via.array.ptr[19] = msgpack::object(a19, z);
01890         o->via.array.ptr[20] = msgpack::object(a20, z);
01891         o->via.array.ptr[21] = msgpack::object(a21, z);
01892     }
01893     
01894     A0& a0;
01895     A1& a1;
01896     A2& a2;
01897     A3& a3;
01898     A4& a4;
01899     A5& a5;
01900     A6& a6;
01901     A7& a7;
01902     A8& a8;
01903     A9& a9;
01904     A10& a10;
01905     A11& a11;
01906     A12& a12;
01907     A13& a13;
01908     A14& a14;
01909     A15& a15;
01910     A16& a16;
01911     A17& a17;
01912     A18& a18;
01913     A19& a19;
01914     A20& a20;
01915     A21& a21;
01916 };
01917 
01918 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
01919 struct 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> {
01920     typedef 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> value_type;
01921     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> tuple_type;
01922     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) :
01923         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) {}
01924     template <typename Packer>
01925     void msgpack_pack(Packer& pk) const
01926     {
01927         pk.pack_array(23);
01928         
01929         pk.pack(a0);
01930         pk.pack(a1);
01931         pk.pack(a2);
01932         pk.pack(a3);
01933         pk.pack(a4);
01934         pk.pack(a5);
01935         pk.pack(a6);
01936         pk.pack(a7);
01937         pk.pack(a8);
01938         pk.pack(a9);
01939         pk.pack(a10);
01940         pk.pack(a11);
01941         pk.pack(a12);
01942         pk.pack(a13);
01943         pk.pack(a14);
01944         pk.pack(a15);
01945         pk.pack(a16);
01946         pk.pack(a17);
01947         pk.pack(a18);
01948         pk.pack(a19);
01949         pk.pack(a20);
01950         pk.pack(a21);
01951         pk.pack(a22);
01952     }
01953     void msgpack_unpack(msgpack::object const& o)
01954     {
01955         if(o.type != msgpack::type::ARRAY) { 
01956             printf("throw msgpack::type_error()");
01957 //            throw msgpack::type_error(); 
01958         }
01959         const size_t size = o.via.array.size;
01960         if(size > 0) {
01961             msgpack::object *ptr = o.via.array.ptr;
01962             switch(size) {
01963             default:
01964             case 23: ptr[22].convert(a22);
01965             case 22: ptr[21].convert(a21);
01966             case 21: ptr[20].convert(a20);
01967             case 20: ptr[19].convert(a19);
01968             case 19: ptr[18].convert(a18);
01969             case 18: ptr[17].convert(a17);
01970             case 17: ptr[16].convert(a16);
01971             case 16: ptr[15].convert(a15);
01972             case 15: ptr[14].convert(a14);
01973             case 14: ptr[13].convert(a13);
01974             case 13: ptr[12].convert(a12);
01975             case 12: ptr[11].convert(a11);
01976             case 11: ptr[10].convert(a10);
01977             case 10: ptr[9].convert(a9);
01978             case 9: ptr[8].convert(a8);
01979             case 8: ptr[7].convert(a7);
01980             case 7: ptr[6].convert(a6);
01981             case 6: ptr[5].convert(a5);
01982             case 5: ptr[4].convert(a4);
01983             case 4: ptr[3].convert(a3);
01984             case 3: ptr[2].convert(a2);
01985             case 2: ptr[1].convert(a1);
01986             case 1: ptr[0].convert(a0);
01987             }
01988         }
01989     }
01990     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
01991     {
01992         o->type = msgpack::type::ARRAY;
01993         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*23));
01994         o->via.array.size = 23;
01995         
01996         o->via.array.ptr[0] = msgpack::object(a0, z);
01997         o->via.array.ptr[1] = msgpack::object(a1, z);
01998         o->via.array.ptr[2] = msgpack::object(a2, z);
01999         o->via.array.ptr[3] = msgpack::object(a3, z);
02000         o->via.array.ptr[4] = msgpack::object(a4, z);
02001         o->via.array.ptr[5] = msgpack::object(a5, z);
02002         o->via.array.ptr[6] = msgpack::object(a6, z);
02003         o->via.array.ptr[7] = msgpack::object(a7, z);
02004         o->via.array.ptr[8] = msgpack::object(a8, z);
02005         o->via.array.ptr[9] = msgpack::object(a9, z);
02006         o->via.array.ptr[10] = msgpack::object(a10, z);
02007         o->via.array.ptr[11] = msgpack::object(a11, z);
02008         o->via.array.ptr[12] = msgpack::object(a12, z);
02009         o->via.array.ptr[13] = msgpack::object(a13, z);
02010         o->via.array.ptr[14] = msgpack::object(a14, z);
02011         o->via.array.ptr[15] = msgpack::object(a15, z);
02012         o->via.array.ptr[16] = msgpack::object(a16, z);
02013         o->via.array.ptr[17] = msgpack::object(a17, z);
02014         o->via.array.ptr[18] = msgpack::object(a18, z);
02015         o->via.array.ptr[19] = msgpack::object(a19, z);
02016         o->via.array.ptr[20] = msgpack::object(a20, z);
02017         o->via.array.ptr[21] = msgpack::object(a21, z);
02018         o->via.array.ptr[22] = msgpack::object(a22, z);
02019     }
02020     
02021     A0& a0;
02022     A1& a1;
02023     A2& a2;
02024     A3& a3;
02025     A4& a4;
02026     A5& a5;
02027     A6& a6;
02028     A7& a7;
02029     A8& a8;
02030     A9& a9;
02031     A10& a10;
02032     A11& a11;
02033     A12& a12;
02034     A13& a13;
02035     A14& a14;
02036     A15& a15;
02037     A16& a16;
02038     A17& a17;
02039     A18& a18;
02040     A19& a19;
02041     A20& a20;
02042     A21& a21;
02043     A22& a22;
02044 };
02045 
02046 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
02047 struct 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> {
02048     typedef 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> value_type;
02049     typedef 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> tuple_type;
02050     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) :
02051         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) {}
02052     template <typename Packer>
02053     void msgpack_pack(Packer& pk) const
02054     {
02055         pk.pack_array(24);
02056         
02057         pk.pack(a0);
02058         pk.pack(a1);
02059         pk.pack(a2);
02060         pk.pack(a3);
02061         pk.pack(a4);
02062         pk.pack(a5);
02063         pk.pack(a6);
02064         pk.pack(a7);
02065         pk.pack(a8);
02066         pk.pack(a9);
02067         pk.pack(a10);
02068         pk.pack(a11);
02069         pk.pack(a12);
02070         pk.pack(a13);
02071         pk.pack(a14);
02072         pk.pack(a15);
02073         pk.pack(a16);
02074         pk.pack(a17);
02075         pk.pack(a18);
02076         pk.pack(a19);
02077         pk.pack(a20);
02078         pk.pack(a21);
02079         pk.pack(a22);
02080         pk.pack(a23);
02081     }
02082     void msgpack_unpack(msgpack::object const& o)
02083     {
02084         if(o.type != msgpack::type::ARRAY) { 
02085             printf("throw msgpack::type_error()");
02086 //            throw msgpack::type_error(); 
02087         }
02088         const size_t size = o.via.array.size;
02089         if(size > 0) {
02090             msgpack::object *ptr = o.via.array.ptr;
02091             switch(size) {
02092             default:
02093             case 24: ptr[23].convert(a23);
02094             case 23: ptr[22].convert(a22);
02095             case 22: ptr[21].convert(a21);
02096             case 21: ptr[20].convert(a20);
02097             case 20: ptr[19].convert(a19);
02098             case 19: ptr[18].convert(a18);
02099             case 18: ptr[17].convert(a17);
02100             case 17: ptr[16].convert(a16);
02101             case 16: ptr[15].convert(a15);
02102             case 15: ptr[14].convert(a14);
02103             case 14: ptr[13].convert(a13);
02104             case 13: ptr[12].convert(a12);
02105             case 12: ptr[11].convert(a11);
02106             case 11: ptr[10].convert(a10);
02107             case 10: ptr[9].convert(a9);
02108             case 9: ptr[8].convert(a8);
02109             case 8: ptr[7].convert(a7);
02110             case 7: ptr[6].convert(a6);
02111             case 6: ptr[5].convert(a5);
02112             case 5: ptr[4].convert(a4);
02113             case 4: ptr[3].convert(a3);
02114             case 3: ptr[2].convert(a2);
02115             case 2: ptr[1].convert(a1);
02116             case 1: ptr[0].convert(a0);
02117             }
02118         }
02119     }
02120     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
02121     {
02122         o->type = msgpack::type::ARRAY;
02123         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*24));
02124         o->via.array.size = 24;
02125         
02126         o->via.array.ptr[0] = msgpack::object(a0, z);
02127         o->via.array.ptr[1] = msgpack::object(a1, z);
02128         o->via.array.ptr[2] = msgpack::object(a2, z);
02129         o->via.array.ptr[3] = msgpack::object(a3, z);
02130         o->via.array.ptr[4] = msgpack::object(a4, z);
02131         o->via.array.ptr[5] = msgpack::object(a5, z);
02132         o->via.array.ptr[6] = msgpack::object(a6, z);
02133         o->via.array.ptr[7] = msgpack::object(a7, z);
02134         o->via.array.ptr[8] = msgpack::object(a8, z);
02135         o->via.array.ptr[9] = msgpack::object(a9, z);
02136         o->via.array.ptr[10] = msgpack::object(a10, z);
02137         o->via.array.ptr[11] = msgpack::object(a11, z);
02138         o->via.array.ptr[12] = msgpack::object(a12, z);
02139         o->via.array.ptr[13] = msgpack::object(a13, z);
02140         o->via.array.ptr[14] = msgpack::object(a14, z);
02141         o->via.array.ptr[15] = msgpack::object(a15, z);
02142         o->via.array.ptr[16] = msgpack::object(a16, z);
02143         o->via.array.ptr[17] = msgpack::object(a17, z);
02144         o->via.array.ptr[18] = msgpack::object(a18, z);
02145         o->via.array.ptr[19] = msgpack::object(a19, z);
02146         o->via.array.ptr[20] = msgpack::object(a20, z);
02147         o->via.array.ptr[21] = msgpack::object(a21, z);
02148         o->via.array.ptr[22] = msgpack::object(a22, z);
02149         o->via.array.ptr[23] = msgpack::object(a23, z);
02150     }
02151     
02152     A0& a0;
02153     A1& a1;
02154     A2& a2;
02155     A3& a3;
02156     A4& a4;
02157     A5& a5;
02158     A6& a6;
02159     A7& a7;
02160     A8& a8;
02161     A9& a9;
02162     A10& a10;
02163     A11& a11;
02164     A12& a12;
02165     A13& a13;
02166     A14& a14;
02167     A15& a15;
02168     A16& a16;
02169     A17& a17;
02170     A18& a18;
02171     A19& a19;
02172     A20& a20;
02173     A21& a21;
02174     A22& a22;
02175     A23& a23;
02176 };
02177 
02178 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
02179 struct 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> {
02180     typedef 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> value_type;
02181     typedef 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> tuple_type;
02182     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) :
02183         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) {}
02184     template <typename Packer>
02185     void msgpack_pack(Packer& pk) const
02186     {
02187         pk.pack_array(25);
02188         
02189         pk.pack(a0);
02190         pk.pack(a1);
02191         pk.pack(a2);
02192         pk.pack(a3);
02193         pk.pack(a4);
02194         pk.pack(a5);
02195         pk.pack(a6);
02196         pk.pack(a7);
02197         pk.pack(a8);
02198         pk.pack(a9);
02199         pk.pack(a10);
02200         pk.pack(a11);
02201         pk.pack(a12);
02202         pk.pack(a13);
02203         pk.pack(a14);
02204         pk.pack(a15);
02205         pk.pack(a16);
02206         pk.pack(a17);
02207         pk.pack(a18);
02208         pk.pack(a19);
02209         pk.pack(a20);
02210         pk.pack(a21);
02211         pk.pack(a22);
02212         pk.pack(a23);
02213         pk.pack(a24);
02214     }
02215     void msgpack_unpack(msgpack::object const& o)
02216     {
02217         if(o.type != msgpack::type::ARRAY) { 
02218             printf("throw msgpack::type_error()");
02219 //            throw msgpack::type_error(); 
02220         }
02221         const size_t size = o.via.array.size;
02222         if(size > 0) {
02223             msgpack::object *ptr = o.via.array.ptr;
02224             switch(size) {
02225             default:
02226             case 25: ptr[24].convert(a24);
02227             case 24: ptr[23].convert(a23);
02228             case 23: ptr[22].convert(a22);
02229             case 22: ptr[21].convert(a21);
02230             case 21: ptr[20].convert(a20);
02231             case 20: ptr[19].convert(a19);
02232             case 19: ptr[18].convert(a18);
02233             case 18: ptr[17].convert(a17);
02234             case 17: ptr[16].convert(a16);
02235             case 16: ptr[15].convert(a15);
02236             case 15: ptr[14].convert(a14);
02237             case 14: ptr[13].convert(a13);
02238             case 13: ptr[12].convert(a12);
02239             case 12: ptr[11].convert(a11);
02240             case 11: ptr[10].convert(a10);
02241             case 10: ptr[9].convert(a9);
02242             case 9: ptr[8].convert(a8);
02243             case 8: ptr[7].convert(a7);
02244             case 7: ptr[6].convert(a6);
02245             case 6: ptr[5].convert(a5);
02246             case 5: ptr[4].convert(a4);
02247             case 4: ptr[3].convert(a3);
02248             case 3: ptr[2].convert(a2);
02249             case 2: ptr[1].convert(a1);
02250             case 1: ptr[0].convert(a0);
02251             }
02252         }
02253     }
02254     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
02255     {
02256         o->type = msgpack::type::ARRAY;
02257         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*25));
02258         o->via.array.size = 25;
02259         
02260         o->via.array.ptr[0] = msgpack::object(a0, z);
02261         o->via.array.ptr[1] = msgpack::object(a1, z);
02262         o->via.array.ptr[2] = msgpack::object(a2, z);
02263         o->via.array.ptr[3] = msgpack::object(a3, z);
02264         o->via.array.ptr[4] = msgpack::object(a4, z);
02265         o->via.array.ptr[5] = msgpack::object(a5, z);
02266         o->via.array.ptr[6] = msgpack::object(a6, z);
02267         o->via.array.ptr[7] = msgpack::object(a7, z);
02268         o->via.array.ptr[8] = msgpack::object(a8, z);
02269         o->via.array.ptr[9] = msgpack::object(a9, z);
02270         o->via.array.ptr[10] = msgpack::object(a10, z);
02271         o->via.array.ptr[11] = msgpack::object(a11, z);
02272         o->via.array.ptr[12] = msgpack::object(a12, z);
02273         o->via.array.ptr[13] = msgpack::object(a13, z);
02274         o->via.array.ptr[14] = msgpack::object(a14, z);
02275         o->via.array.ptr[15] = msgpack::object(a15, z);
02276         o->via.array.ptr[16] = msgpack::object(a16, z);
02277         o->via.array.ptr[17] = msgpack::object(a17, z);
02278         o->via.array.ptr[18] = msgpack::object(a18, z);
02279         o->via.array.ptr[19] = msgpack::object(a19, z);
02280         o->via.array.ptr[20] = msgpack::object(a20, z);
02281         o->via.array.ptr[21] = msgpack::object(a21, z);
02282         o->via.array.ptr[22] = msgpack::object(a22, z);
02283         o->via.array.ptr[23] = msgpack::object(a23, z);
02284         o->via.array.ptr[24] = msgpack::object(a24, z);
02285     }
02286     
02287     A0& a0;
02288     A1& a1;
02289     A2& a2;
02290     A3& a3;
02291     A4& a4;
02292     A5& a5;
02293     A6& a6;
02294     A7& a7;
02295     A8& a8;
02296     A9& a9;
02297     A10& a10;
02298     A11& a11;
02299     A12& a12;
02300     A13& a13;
02301     A14& a14;
02302     A15& a15;
02303     A16& a16;
02304     A17& a17;
02305     A18& a18;
02306     A19& a19;
02307     A20& a20;
02308     A21& a21;
02309     A22& a22;
02310     A23& a23;
02311     A24& a24;
02312 };
02313 
02314 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
02315 struct 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> {
02316     typedef 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> value_type;
02317     typedef 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> tuple_type;
02318     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) :
02319         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) {}
02320     template <typename Packer>
02321     void msgpack_pack(Packer& pk) const
02322     {
02323         pk.pack_array(26);
02324         
02325         pk.pack(a0);
02326         pk.pack(a1);
02327         pk.pack(a2);
02328         pk.pack(a3);
02329         pk.pack(a4);
02330         pk.pack(a5);
02331         pk.pack(a6);
02332         pk.pack(a7);
02333         pk.pack(a8);
02334         pk.pack(a9);
02335         pk.pack(a10);
02336         pk.pack(a11);
02337         pk.pack(a12);
02338         pk.pack(a13);
02339         pk.pack(a14);
02340         pk.pack(a15);
02341         pk.pack(a16);
02342         pk.pack(a17);
02343         pk.pack(a18);
02344         pk.pack(a19);
02345         pk.pack(a20);
02346         pk.pack(a21);
02347         pk.pack(a22);
02348         pk.pack(a23);
02349         pk.pack(a24);
02350         pk.pack(a25);
02351     }
02352     void msgpack_unpack(msgpack::object const& o)
02353     {
02354         if(o.type != msgpack::type::ARRAY) { 
02355             printf("throw msgpack::type_error()");
02356 //            throw msgpack::type_error(); 
02357         }
02358         const size_t size = o.via.array.size;
02359         if(size > 0) {
02360             msgpack::object *ptr = o.via.array.ptr;
02361             switch(size) {
02362             default:
02363             case 26: ptr[25].convert(a25);
02364             case 25: ptr[24].convert(a24);
02365             case 24: ptr[23].convert(a23);
02366             case 23: ptr[22].convert(a22);
02367             case 22: ptr[21].convert(a21);
02368             case 21: ptr[20].convert(a20);
02369             case 20: ptr[19].convert(a19);
02370             case 19: ptr[18].convert(a18);
02371             case 18: ptr[17].convert(a17);
02372             case 17: ptr[16].convert(a16);
02373             case 16: ptr[15].convert(a15);
02374             case 15: ptr[14].convert(a14);
02375             case 14: ptr[13].convert(a13);
02376             case 13: ptr[12].convert(a12);
02377             case 12: ptr[11].convert(a11);
02378             case 11: ptr[10].convert(a10);
02379             case 10: ptr[9].convert(a9);
02380             case 9: ptr[8].convert(a8);
02381             case 8: ptr[7].convert(a7);
02382             case 7: ptr[6].convert(a6);
02383             case 6: ptr[5].convert(a5);
02384             case 5: ptr[4].convert(a4);
02385             case 4: ptr[3].convert(a3);
02386             case 3: ptr[2].convert(a2);
02387             case 2: ptr[1].convert(a1);
02388             case 1: ptr[0].convert(a0);
02389             }
02390         }
02391     }
02392     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
02393     {
02394         o->type = msgpack::type::ARRAY;
02395         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*26));
02396         o->via.array.size = 26;
02397         
02398         o->via.array.ptr[0] = msgpack::object(a0, z);
02399         o->via.array.ptr[1] = msgpack::object(a1, z);
02400         o->via.array.ptr[2] = msgpack::object(a2, z);
02401         o->via.array.ptr[3] = msgpack::object(a3, z);
02402         o->via.array.ptr[4] = msgpack::object(a4, z);
02403         o->via.array.ptr[5] = msgpack::object(a5, z);
02404         o->via.array.ptr[6] = msgpack::object(a6, z);
02405         o->via.array.ptr[7] = msgpack::object(a7, z);
02406         o->via.array.ptr[8] = msgpack::object(a8, z);
02407         o->via.array.ptr[9] = msgpack::object(a9, z);
02408         o->via.array.ptr[10] = msgpack::object(a10, z);
02409         o->via.array.ptr[11] = msgpack::object(a11, z);
02410         o->via.array.ptr[12] = msgpack::object(a12, z);
02411         o->via.array.ptr[13] = msgpack::object(a13, z);
02412         o->via.array.ptr[14] = msgpack::object(a14, z);
02413         o->via.array.ptr[15] = msgpack::object(a15, z);
02414         o->via.array.ptr[16] = msgpack::object(a16, z);
02415         o->via.array.ptr[17] = msgpack::object(a17, z);
02416         o->via.array.ptr[18] = msgpack::object(a18, z);
02417         o->via.array.ptr[19] = msgpack::object(a19, z);
02418         o->via.array.ptr[20] = msgpack::object(a20, z);
02419         o->via.array.ptr[21] = msgpack::object(a21, z);
02420         o->via.array.ptr[22] = msgpack::object(a22, z);
02421         o->via.array.ptr[23] = msgpack::object(a23, z);
02422         o->via.array.ptr[24] = msgpack::object(a24, z);
02423         o->via.array.ptr[25] = msgpack::object(a25, z);
02424     }
02425     
02426     A0& a0;
02427     A1& a1;
02428     A2& a2;
02429     A3& a3;
02430     A4& a4;
02431     A5& a5;
02432     A6& a6;
02433     A7& a7;
02434     A8& a8;
02435     A9& a9;
02436     A10& a10;
02437     A11& a11;
02438     A12& a12;
02439     A13& a13;
02440     A14& a14;
02441     A15& a15;
02442     A16& a16;
02443     A17& a17;
02444     A18& a18;
02445     A19& a19;
02446     A20& a20;
02447     A21& a21;
02448     A22& a22;
02449     A23& a23;
02450     A24& a24;
02451     A25& a25;
02452 };
02453 
02454 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
02455 struct 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> {
02456     typedef 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> value_type;
02457     typedef 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> tuple_type;
02458     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) :
02459         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) {}
02460     template <typename Packer>
02461     void msgpack_pack(Packer& pk) const
02462     {
02463         pk.pack_array(27);
02464         
02465         pk.pack(a0);
02466         pk.pack(a1);
02467         pk.pack(a2);
02468         pk.pack(a3);
02469         pk.pack(a4);
02470         pk.pack(a5);
02471         pk.pack(a6);
02472         pk.pack(a7);
02473         pk.pack(a8);
02474         pk.pack(a9);
02475         pk.pack(a10);
02476         pk.pack(a11);
02477         pk.pack(a12);
02478         pk.pack(a13);
02479         pk.pack(a14);
02480         pk.pack(a15);
02481         pk.pack(a16);
02482         pk.pack(a17);
02483         pk.pack(a18);
02484         pk.pack(a19);
02485         pk.pack(a20);
02486         pk.pack(a21);
02487         pk.pack(a22);
02488         pk.pack(a23);
02489         pk.pack(a24);
02490         pk.pack(a25);
02491         pk.pack(a26);
02492     }
02493     void msgpack_unpack(msgpack::object const& o)
02494     {
02495         if(o.type != msgpack::type::ARRAY) { 
02496             printf("throw msgpack::type_error()");
02497 //            throw msgpack::type_error(); 
02498         }
02499         const size_t size = o.via.array.size;
02500         if(size > 0) {
02501             msgpack::object *ptr = o.via.array.ptr;
02502             switch(size) {
02503             default:
02504             case 27: ptr[26].convert(a26);
02505             case 26: ptr[25].convert(a25);
02506             case 25: ptr[24].convert(a24);
02507             case 24: ptr[23].convert(a23);
02508             case 23: ptr[22].convert(a22);
02509             case 22: ptr[21].convert(a21);
02510             case 21: ptr[20].convert(a20);
02511             case 20: ptr[19].convert(a19);
02512             case 19: ptr[18].convert(a18);
02513             case 18: ptr[17].convert(a17);
02514             case 17: ptr[16].convert(a16);
02515             case 16: ptr[15].convert(a15);
02516             case 15: ptr[14].convert(a14);
02517             case 14: ptr[13].convert(a13);
02518             case 13: ptr[12].convert(a12);
02519             case 12: ptr[11].convert(a11);
02520             case 11: ptr[10].convert(a10);
02521             case 10: ptr[9].convert(a9);
02522             case 9: ptr[8].convert(a8);
02523             case 8: ptr[7].convert(a7);
02524             case 7: ptr[6].convert(a6);
02525             case 6: ptr[5].convert(a5);
02526             case 5: ptr[4].convert(a4);
02527             case 4: ptr[3].convert(a3);
02528             case 3: ptr[2].convert(a2);
02529             case 2: ptr[1].convert(a1);
02530             case 1: ptr[0].convert(a0);
02531             }
02532         }
02533     }
02534     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
02535     {
02536         o->type = msgpack::type::ARRAY;
02537         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*27));
02538         o->via.array.size = 27;
02539         
02540         o->via.array.ptr[0] = msgpack::object(a0, z);
02541         o->via.array.ptr[1] = msgpack::object(a1, z);
02542         o->via.array.ptr[2] = msgpack::object(a2, z);
02543         o->via.array.ptr[3] = msgpack::object(a3, z);
02544         o->via.array.ptr[4] = msgpack::object(a4, z);
02545         o->via.array.ptr[5] = msgpack::object(a5, z);
02546         o->via.array.ptr[6] = msgpack::object(a6, z);
02547         o->via.array.ptr[7] = msgpack::object(a7, z);
02548         o->via.array.ptr[8] = msgpack::object(a8, z);
02549         o->via.array.ptr[9] = msgpack::object(a9, z);
02550         o->via.array.ptr[10] = msgpack::object(a10, z);
02551         o->via.array.ptr[11] = msgpack::object(a11, z);
02552         o->via.array.ptr[12] = msgpack::object(a12, z);
02553         o->via.array.ptr[13] = msgpack::object(a13, z);
02554         o->via.array.ptr[14] = msgpack::object(a14, z);
02555         o->via.array.ptr[15] = msgpack::object(a15, z);
02556         o->via.array.ptr[16] = msgpack::object(a16, z);
02557         o->via.array.ptr[17] = msgpack::object(a17, z);
02558         o->via.array.ptr[18] = msgpack::object(a18, z);
02559         o->via.array.ptr[19] = msgpack::object(a19, z);
02560         o->via.array.ptr[20] = msgpack::object(a20, z);
02561         o->via.array.ptr[21] = msgpack::object(a21, z);
02562         o->via.array.ptr[22] = msgpack::object(a22, z);
02563         o->via.array.ptr[23] = msgpack::object(a23, z);
02564         o->via.array.ptr[24] = msgpack::object(a24, z);
02565         o->via.array.ptr[25] = msgpack::object(a25, z);
02566         o->via.array.ptr[26] = msgpack::object(a26, z);
02567     }
02568     
02569     A0& a0;
02570     A1& a1;
02571     A2& a2;
02572     A3& a3;
02573     A4& a4;
02574     A5& a5;
02575     A6& a6;
02576     A7& a7;
02577     A8& a8;
02578     A9& a9;
02579     A10& a10;
02580     A11& a11;
02581     A12& a12;
02582     A13& a13;
02583     A14& a14;
02584     A15& a15;
02585     A16& a16;
02586     A17& a17;
02587     A18& a18;
02588     A19& a19;
02589     A20& a20;
02590     A21& a21;
02591     A22& a22;
02592     A23& a23;
02593     A24& a24;
02594     A25& a25;
02595     A26& a26;
02596 };
02597 
02598 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
02599 struct 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> {
02600     typedef 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> value_type;
02601     typedef 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> tuple_type;
02602     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) :
02603         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) {}
02604     template <typename Packer>
02605     void msgpack_pack(Packer& pk) const
02606     {
02607         pk.pack_array(28);
02608         
02609         pk.pack(a0);
02610         pk.pack(a1);
02611         pk.pack(a2);
02612         pk.pack(a3);
02613         pk.pack(a4);
02614         pk.pack(a5);
02615         pk.pack(a6);
02616         pk.pack(a7);
02617         pk.pack(a8);
02618         pk.pack(a9);
02619         pk.pack(a10);
02620         pk.pack(a11);
02621         pk.pack(a12);
02622         pk.pack(a13);
02623         pk.pack(a14);
02624         pk.pack(a15);
02625         pk.pack(a16);
02626         pk.pack(a17);
02627         pk.pack(a18);
02628         pk.pack(a19);
02629         pk.pack(a20);
02630         pk.pack(a21);
02631         pk.pack(a22);
02632         pk.pack(a23);
02633         pk.pack(a24);
02634         pk.pack(a25);
02635         pk.pack(a26);
02636         pk.pack(a27);
02637     }
02638     void msgpack_unpack(msgpack::object const& o)
02639     {
02640         if(o.type != msgpack::type::ARRAY) { 
02641             printf("throw msgpack::type_error()");
02642 //            throw msgpack::type_error(); 
02643         }
02644         const size_t size = o.via.array.size;
02645         if(size > 0) {
02646             msgpack::object *ptr = o.via.array.ptr;
02647             switch(size) {
02648             default:
02649             case 28: ptr[27].convert(a27);
02650             case 27: ptr[26].convert(a26);
02651             case 26: ptr[25].convert(a25);
02652             case 25: ptr[24].convert(a24);
02653             case 24: ptr[23].convert(a23);
02654             case 23: ptr[22].convert(a22);
02655             case 22: ptr[21].convert(a21);
02656             case 21: ptr[20].convert(a20);
02657             case 20: ptr[19].convert(a19);
02658             case 19: ptr[18].convert(a18);
02659             case 18: ptr[17].convert(a17);
02660             case 17: ptr[16].convert(a16);
02661             case 16: ptr[15].convert(a15);
02662             case 15: ptr[14].convert(a14);
02663             case 14: ptr[13].convert(a13);
02664             case 13: ptr[12].convert(a12);
02665             case 12: ptr[11].convert(a11);
02666             case 11: ptr[10].convert(a10);
02667             case 10: ptr[9].convert(a9);
02668             case 9: ptr[8].convert(a8);
02669             case 8: ptr[7].convert(a7);
02670             case 7: ptr[6].convert(a6);
02671             case 6: ptr[5].convert(a5);
02672             case 5: ptr[4].convert(a4);
02673             case 4: ptr[3].convert(a3);
02674             case 3: ptr[2].convert(a2);
02675             case 2: ptr[1].convert(a1);
02676             case 1: ptr[0].convert(a0);
02677             }
02678         }
02679     }
02680     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
02681     {
02682         o->type = msgpack::type::ARRAY;
02683         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*28));
02684         o->via.array.size = 28;
02685         
02686         o->via.array.ptr[0] = msgpack::object(a0, z);
02687         o->via.array.ptr[1] = msgpack::object(a1, z);
02688         o->via.array.ptr[2] = msgpack::object(a2, z);
02689         o->via.array.ptr[3] = msgpack::object(a3, z);
02690         o->via.array.ptr[4] = msgpack::object(a4, z);
02691         o->via.array.ptr[5] = msgpack::object(a5, z);
02692         o->via.array.ptr[6] = msgpack::object(a6, z);
02693         o->via.array.ptr[7] = msgpack::object(a7, z);
02694         o->via.array.ptr[8] = msgpack::object(a8, z);
02695         o->via.array.ptr[9] = msgpack::object(a9, z);
02696         o->via.array.ptr[10] = msgpack::object(a10, z);
02697         o->via.array.ptr[11] = msgpack::object(a11, z);
02698         o->via.array.ptr[12] = msgpack::object(a12, z);
02699         o->via.array.ptr[13] = msgpack::object(a13, z);
02700         o->via.array.ptr[14] = msgpack::object(a14, z);
02701         o->via.array.ptr[15] = msgpack::object(a15, z);
02702         o->via.array.ptr[16] = msgpack::object(a16, z);
02703         o->via.array.ptr[17] = msgpack::object(a17, z);
02704         o->via.array.ptr[18] = msgpack::object(a18, z);
02705         o->via.array.ptr[19] = msgpack::object(a19, z);
02706         o->via.array.ptr[20] = msgpack::object(a20, z);
02707         o->via.array.ptr[21] = msgpack::object(a21, z);
02708         o->via.array.ptr[22] = msgpack::object(a22, z);
02709         o->via.array.ptr[23] = msgpack::object(a23, z);
02710         o->via.array.ptr[24] = msgpack::object(a24, z);
02711         o->via.array.ptr[25] = msgpack::object(a25, z);
02712         o->via.array.ptr[26] = msgpack::object(a26, z);
02713         o->via.array.ptr[27] = msgpack::object(a27, z);
02714     }
02715     
02716     A0& a0;
02717     A1& a1;
02718     A2& a2;
02719     A3& a3;
02720     A4& a4;
02721     A5& a5;
02722     A6& a6;
02723     A7& a7;
02724     A8& a8;
02725     A9& a9;
02726     A10& a10;
02727     A11& a11;
02728     A12& a12;
02729     A13& a13;
02730     A14& a14;
02731     A15& a15;
02732     A16& a16;
02733     A17& a17;
02734     A18& a18;
02735     A19& a19;
02736     A20& a20;
02737     A21& a21;
02738     A22& a22;
02739     A23& a23;
02740     A24& a24;
02741     A25& a25;
02742     A26& a26;
02743     A27& a27;
02744 };
02745 
02746 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
02747 struct 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> {
02748     typedef 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> value_type;
02749     typedef 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> tuple_type;
02750     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) :
02751         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) {}
02752     template <typename Packer>
02753     void msgpack_pack(Packer& pk) const
02754     {
02755         pk.pack_array(29);
02756         
02757         pk.pack(a0);
02758         pk.pack(a1);
02759         pk.pack(a2);
02760         pk.pack(a3);
02761         pk.pack(a4);
02762         pk.pack(a5);
02763         pk.pack(a6);
02764         pk.pack(a7);
02765         pk.pack(a8);
02766         pk.pack(a9);
02767         pk.pack(a10);
02768         pk.pack(a11);
02769         pk.pack(a12);
02770         pk.pack(a13);
02771         pk.pack(a14);
02772         pk.pack(a15);
02773         pk.pack(a16);
02774         pk.pack(a17);
02775         pk.pack(a18);
02776         pk.pack(a19);
02777         pk.pack(a20);
02778         pk.pack(a21);
02779         pk.pack(a22);
02780         pk.pack(a23);
02781         pk.pack(a24);
02782         pk.pack(a25);
02783         pk.pack(a26);
02784         pk.pack(a27);
02785         pk.pack(a28);
02786     }
02787     void msgpack_unpack(msgpack::object const& o)
02788     {
02789         if(o.type != msgpack::type::ARRAY) { 
02790              printf("throw msgpack::type_error()");
02791 //           throw msgpack::type_error(); 
02792         }
02793         const size_t size = o.via.array.size;
02794         if(size > 0) {
02795             msgpack::object *ptr = o.via.array.ptr;
02796             switch(size) {
02797             default:
02798             case 29: ptr[28].convert(a28);
02799             case 28: ptr[27].convert(a27);
02800             case 27: ptr[26].convert(a26);
02801             case 26: ptr[25].convert(a25);
02802             case 25: ptr[24].convert(a24);
02803             case 24: ptr[23].convert(a23);
02804             case 23: ptr[22].convert(a22);
02805             case 22: ptr[21].convert(a21);
02806             case 21: ptr[20].convert(a20);
02807             case 20: ptr[19].convert(a19);
02808             case 19: ptr[18].convert(a18);
02809             case 18: ptr[17].convert(a17);
02810             case 17: ptr[16].convert(a16);
02811             case 16: ptr[15].convert(a15);
02812             case 15: ptr[14].convert(a14);
02813             case 14: ptr[13].convert(a13);
02814             case 13: ptr[12].convert(a12);
02815             case 12: ptr[11].convert(a11);
02816             case 11: ptr[10].convert(a10);
02817             case 10: ptr[9].convert(a9);
02818             case 9: ptr[8].convert(a8);
02819             case 8: ptr[7].convert(a7);
02820             case 7: ptr[6].convert(a6);
02821             case 6: ptr[5].convert(a5);
02822             case 5: ptr[4].convert(a4);
02823             case 4: ptr[3].convert(a3);
02824             case 3: ptr[2].convert(a2);
02825             case 2: ptr[1].convert(a1);
02826             case 1: ptr[0].convert(a0);
02827             }
02828         }
02829     }
02830     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
02831     {
02832         o->type = msgpack::type::ARRAY;
02833         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*29));
02834         o->via.array.size = 29;
02835         
02836         o->via.array.ptr[0] = msgpack::object(a0, z);
02837         o->via.array.ptr[1] = msgpack::object(a1, z);
02838         o->via.array.ptr[2] = msgpack::object(a2, z);
02839         o->via.array.ptr[3] = msgpack::object(a3, z);
02840         o->via.array.ptr[4] = msgpack::object(a4, z);
02841         o->via.array.ptr[5] = msgpack::object(a5, z);
02842         o->via.array.ptr[6] = msgpack::object(a6, z);
02843         o->via.array.ptr[7] = msgpack::object(a7, z);
02844         o->via.array.ptr[8] = msgpack::object(a8, z);
02845         o->via.array.ptr[9] = msgpack::object(a9, z);
02846         o->via.array.ptr[10] = msgpack::object(a10, z);
02847         o->via.array.ptr[11] = msgpack::object(a11, z);
02848         o->via.array.ptr[12] = msgpack::object(a12, z);
02849         o->via.array.ptr[13] = msgpack::object(a13, z);
02850         o->via.array.ptr[14] = msgpack::object(a14, z);
02851         o->via.array.ptr[15] = msgpack::object(a15, z);
02852         o->via.array.ptr[16] = msgpack::object(a16, z);
02853         o->via.array.ptr[17] = msgpack::object(a17, z);
02854         o->via.array.ptr[18] = msgpack::object(a18, z);
02855         o->via.array.ptr[19] = msgpack::object(a19, z);
02856         o->via.array.ptr[20] = msgpack::object(a20, z);
02857         o->via.array.ptr[21] = msgpack::object(a21, z);
02858         o->via.array.ptr[22] = msgpack::object(a22, z);
02859         o->via.array.ptr[23] = msgpack::object(a23, z);
02860         o->via.array.ptr[24] = msgpack::object(a24, z);
02861         o->via.array.ptr[25] = msgpack::object(a25, z);
02862         o->via.array.ptr[26] = msgpack::object(a26, z);
02863         o->via.array.ptr[27] = msgpack::object(a27, z);
02864         o->via.array.ptr[28] = msgpack::object(a28, z);
02865     }
02866     
02867     A0& a0;
02868     A1& a1;
02869     A2& a2;
02870     A3& a3;
02871     A4& a4;
02872     A5& a5;
02873     A6& a6;
02874     A7& a7;
02875     A8& a8;
02876     A9& a9;
02877     A10& a10;
02878     A11& a11;
02879     A12& a12;
02880     A13& a13;
02881     A14& a14;
02882     A15& a15;
02883     A16& a16;
02884     A17& a17;
02885     A18& a18;
02886     A19& a19;
02887     A20& a20;
02888     A21& a21;
02889     A22& a22;
02890     A23& a23;
02891     A24& a24;
02892     A25& a25;
02893     A26& a26;
02894     A27& a27;
02895     A28& a28;
02896 };
02897 
02898 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
02899 struct 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> {
02900     typedef 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> value_type;
02901     typedef 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> tuple_type;
02902     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) :
02903         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) {}
02904     template <typename Packer>
02905     void msgpack_pack(Packer& pk) const
02906     {
02907         pk.pack_array(30);
02908         
02909         pk.pack(a0);
02910         pk.pack(a1);
02911         pk.pack(a2);
02912         pk.pack(a3);
02913         pk.pack(a4);
02914         pk.pack(a5);
02915         pk.pack(a6);
02916         pk.pack(a7);
02917         pk.pack(a8);
02918         pk.pack(a9);
02919         pk.pack(a10);
02920         pk.pack(a11);
02921         pk.pack(a12);
02922         pk.pack(a13);
02923         pk.pack(a14);
02924         pk.pack(a15);
02925         pk.pack(a16);
02926         pk.pack(a17);
02927         pk.pack(a18);
02928         pk.pack(a19);
02929         pk.pack(a20);
02930         pk.pack(a21);
02931         pk.pack(a22);
02932         pk.pack(a23);
02933         pk.pack(a24);
02934         pk.pack(a25);
02935         pk.pack(a26);
02936         pk.pack(a27);
02937         pk.pack(a28);
02938         pk.pack(a29);
02939     }
02940     void msgpack_unpack(msgpack::object const& o)
02941     {
02942         if(o.type != msgpack::type::ARRAY) { 
02943             printf("throw msgpack::type_error()");
02944 //            throw msgpack::type_error(); 
02945         }
02946         const size_t size = o.via.array.size;
02947         if(size > 0) {
02948             msgpack::object *ptr = o.via.array.ptr;
02949             switch(size) {
02950             default:
02951             case 30: ptr[29].convert(a29);
02952             case 29: ptr[28].convert(a28);
02953             case 28: ptr[27].convert(a27);
02954             case 27: ptr[26].convert(a26);
02955             case 26: ptr[25].convert(a25);
02956             case 25: ptr[24].convert(a24);
02957             case 24: ptr[23].convert(a23);
02958             case 23: ptr[22].convert(a22);
02959             case 22: ptr[21].convert(a21);
02960             case 21: ptr[20].convert(a20);
02961             case 20: ptr[19].convert(a19);
02962             case 19: ptr[18].convert(a18);
02963             case 18: ptr[17].convert(a17);
02964             case 17: ptr[16].convert(a16);
02965             case 16: ptr[15].convert(a15);
02966             case 15: ptr[14].convert(a14);
02967             case 14: ptr[13].convert(a13);
02968             case 13: ptr[12].convert(a12);
02969             case 12: ptr[11].convert(a11);
02970             case 11: ptr[10].convert(a10);
02971             case 10: ptr[9].convert(a9);
02972             case 9: ptr[8].convert(a8);
02973             case 8: ptr[7].convert(a7);
02974             case 7: ptr[6].convert(a6);
02975             case 6: ptr[5].convert(a5);
02976             case 5: ptr[4].convert(a4);
02977             case 4: ptr[3].convert(a3);
02978             case 3: ptr[2].convert(a2);
02979             case 2: ptr[1].convert(a1);
02980             case 1: ptr[0].convert(a0);
02981             }
02982         }
02983     }
02984     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
02985     {
02986         o->type = msgpack::type::ARRAY;
02987         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*30));
02988         o->via.array.size = 30;
02989         
02990         o->via.array.ptr[0] = msgpack::object(a0, z);
02991         o->via.array.ptr[1] = msgpack::object(a1, z);
02992         o->via.array.ptr[2] = msgpack::object(a2, z);
02993         o->via.array.ptr[3] = msgpack::object(a3, z);
02994         o->via.array.ptr[4] = msgpack::object(a4, z);
02995         o->via.array.ptr[5] = msgpack::object(a5, z);
02996         o->via.array.ptr[6] = msgpack::object(a6, z);
02997         o->via.array.ptr[7] = msgpack::object(a7, z);
02998         o->via.array.ptr[8] = msgpack::object(a8, z);
02999         o->via.array.ptr[9] = msgpack::object(a9, z);
03000         o->via.array.ptr[10] = msgpack::object(a10, z);
03001         o->via.array.ptr[11] = msgpack::object(a11, z);
03002         o->via.array.ptr[12] = msgpack::object(a12, z);
03003         o->via.array.ptr[13] = msgpack::object(a13, z);
03004         o->via.array.ptr[14] = msgpack::object(a14, z);
03005         o->via.array.ptr[15] = msgpack::object(a15, z);
03006         o->via.array.ptr[16] = msgpack::object(a16, z);
03007         o->via.array.ptr[17] = msgpack::object(a17, z);
03008         o->via.array.ptr[18] = msgpack::object(a18, z);
03009         o->via.array.ptr[19] = msgpack::object(a19, z);
03010         o->via.array.ptr[20] = msgpack::object(a20, z);
03011         o->via.array.ptr[21] = msgpack::object(a21, z);
03012         o->via.array.ptr[22] = msgpack::object(a22, z);
03013         o->via.array.ptr[23] = msgpack::object(a23, z);
03014         o->via.array.ptr[24] = msgpack::object(a24, z);
03015         o->via.array.ptr[25] = msgpack::object(a25, z);
03016         o->via.array.ptr[26] = msgpack::object(a26, z);
03017         o->via.array.ptr[27] = msgpack::object(a27, z);
03018         o->via.array.ptr[28] = msgpack::object(a28, z);
03019         o->via.array.ptr[29] = msgpack::object(a29, z);
03020     }
03021     
03022     A0& a0;
03023     A1& a1;
03024     A2& a2;
03025     A3& a3;
03026     A4& a4;
03027     A5& a5;
03028     A6& a6;
03029     A7& a7;
03030     A8& a8;
03031     A9& a9;
03032     A10& a10;
03033     A11& a11;
03034     A12& a12;
03035     A13& a13;
03036     A14& a14;
03037     A15& a15;
03038     A16& a16;
03039     A17& a17;
03040     A18& a18;
03041     A19& a19;
03042     A20& a20;
03043     A21& a21;
03044     A22& a22;
03045     A23& a23;
03046     A24& a24;
03047     A25& a25;
03048     A26& a26;
03049     A27& a27;
03050     A28& a28;
03051     A29& a29;
03052 };
03053 
03054 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
03055 struct 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> {
03056     typedef 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> value_type;
03057     typedef 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> tuple_type;
03058     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) :
03059         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) {}
03060     template <typename Packer>
03061     void msgpack_pack(Packer& pk) const
03062     {
03063         pk.pack_array(31);
03064         
03065         pk.pack(a0);
03066         pk.pack(a1);
03067         pk.pack(a2);
03068         pk.pack(a3);
03069         pk.pack(a4);
03070         pk.pack(a5);
03071         pk.pack(a6);
03072         pk.pack(a7);
03073         pk.pack(a8);
03074         pk.pack(a9);
03075         pk.pack(a10);
03076         pk.pack(a11);
03077         pk.pack(a12);
03078         pk.pack(a13);
03079         pk.pack(a14);
03080         pk.pack(a15);
03081         pk.pack(a16);
03082         pk.pack(a17);
03083         pk.pack(a18);
03084         pk.pack(a19);
03085         pk.pack(a20);
03086         pk.pack(a21);
03087         pk.pack(a22);
03088         pk.pack(a23);
03089         pk.pack(a24);
03090         pk.pack(a25);
03091         pk.pack(a26);
03092         pk.pack(a27);
03093         pk.pack(a28);
03094         pk.pack(a29);
03095         pk.pack(a30);
03096     }
03097     void msgpack_unpack(msgpack::object const& o)
03098     {
03099         if(o.type != msgpack::type::ARRAY) { 
03100             printf("throw msgpack::type_error()");
03101 //            throw msgpack::type_error(); 
03102         }
03103         const size_t size = o.via.array.size;
03104         if(size > 0) {
03105             msgpack::object *ptr = o.via.array.ptr;
03106             switch(size) {
03107             default:
03108             case 31: ptr[30].convert(a30);
03109             case 30: ptr[29].convert(a29);
03110             case 29: ptr[28].convert(a28);
03111             case 28: ptr[27].convert(a27);
03112             case 27: ptr[26].convert(a26);
03113             case 26: ptr[25].convert(a25);
03114             case 25: ptr[24].convert(a24);
03115             case 24: ptr[23].convert(a23);
03116             case 23: ptr[22].convert(a22);
03117             case 22: ptr[21].convert(a21);
03118             case 21: ptr[20].convert(a20);
03119             case 20: ptr[19].convert(a19);
03120             case 19: ptr[18].convert(a18);
03121             case 18: ptr[17].convert(a17);
03122             case 17: ptr[16].convert(a16);
03123             case 16: ptr[15].convert(a15);
03124             case 15: ptr[14].convert(a14);
03125             case 14: ptr[13].convert(a13);
03126             case 13: ptr[12].convert(a12);
03127             case 12: ptr[11].convert(a11);
03128             case 11: ptr[10].convert(a10);
03129             case 10: ptr[9].convert(a9);
03130             case 9: ptr[8].convert(a8);
03131             case 8: ptr[7].convert(a7);
03132             case 7: ptr[6].convert(a6);
03133             case 6: ptr[5].convert(a5);
03134             case 5: ptr[4].convert(a4);
03135             case 4: ptr[3].convert(a3);
03136             case 3: ptr[2].convert(a2);
03137             case 2: ptr[1].convert(a1);
03138             case 1: ptr[0].convert(a0);
03139             }
03140         }
03141     }
03142     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
03143     {
03144         o->type = msgpack::type::ARRAY;
03145         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*31));
03146         o->via.array.size = 31;
03147         
03148         o->via.array.ptr[0] = msgpack::object(a0, z);
03149         o->via.array.ptr[1] = msgpack::object(a1, z);
03150         o->via.array.ptr[2] = msgpack::object(a2, z);
03151         o->via.array.ptr[3] = msgpack::object(a3, z);
03152         o->via.array.ptr[4] = msgpack::object(a4, z);
03153         o->via.array.ptr[5] = msgpack::object(a5, z);
03154         o->via.array.ptr[6] = msgpack::object(a6, z);
03155         o->via.array.ptr[7] = msgpack::object(a7, z);
03156         o->via.array.ptr[8] = msgpack::object(a8, z);
03157         o->via.array.ptr[9] = msgpack::object(a9, z);
03158         o->via.array.ptr[10] = msgpack::object(a10, z);
03159         o->via.array.ptr[11] = msgpack::object(a11, z);
03160         o->via.array.ptr[12] = msgpack::object(a12, z);
03161         o->via.array.ptr[13] = msgpack::object(a13, z);
03162         o->via.array.ptr[14] = msgpack::object(a14, z);
03163         o->via.array.ptr[15] = msgpack::object(a15, z);
03164         o->via.array.ptr[16] = msgpack::object(a16, z);
03165         o->via.array.ptr[17] = msgpack::object(a17, z);
03166         o->via.array.ptr[18] = msgpack::object(a18, z);
03167         o->via.array.ptr[19] = msgpack::object(a19, z);
03168         o->via.array.ptr[20] = msgpack::object(a20, z);
03169         o->via.array.ptr[21] = msgpack::object(a21, z);
03170         o->via.array.ptr[22] = msgpack::object(a22, z);
03171         o->via.array.ptr[23] = msgpack::object(a23, z);
03172         o->via.array.ptr[24] = msgpack::object(a24, z);
03173         o->via.array.ptr[25] = msgpack::object(a25, z);
03174         o->via.array.ptr[26] = msgpack::object(a26, z);
03175         o->via.array.ptr[27] = msgpack::object(a27, z);
03176         o->via.array.ptr[28] = msgpack::object(a28, z);
03177         o->via.array.ptr[29] = msgpack::object(a29, z);
03178         o->via.array.ptr[30] = msgpack::object(a30, z);
03179     }
03180     
03181     A0& a0;
03182     A1& a1;
03183     A2& a2;
03184     A3& a3;
03185     A4& a4;
03186     A5& a5;
03187     A6& a6;
03188     A7& a7;
03189     A8& a8;
03190     A9& a9;
03191     A10& a10;
03192     A11& a11;
03193     A12& a12;
03194     A13& a13;
03195     A14& a14;
03196     A15& a15;
03197     A16& a16;
03198     A17& a17;
03199     A18& a18;
03200     A19& a19;
03201     A20& a20;
03202     A21& a21;
03203     A22& a22;
03204     A23& a23;
03205     A24& a24;
03206     A25& a25;
03207     A26& a26;
03208     A27& a27;
03209     A28& a28;
03210     A29& a29;
03211     A30& a30;
03212 };
03213 
03214 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
03215 struct 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> {
03216     typedef 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> value_type;
03217     typedef 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> tuple_type;
03218     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) :
03219         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) {}
03220     template <typename Packer>
03221     void msgpack_pack(Packer& pk) const
03222     {
03223         pk.pack_array(32);
03224         
03225         pk.pack(a0);
03226         pk.pack(a1);
03227         pk.pack(a2);
03228         pk.pack(a3);
03229         pk.pack(a4);
03230         pk.pack(a5);
03231         pk.pack(a6);
03232         pk.pack(a7);
03233         pk.pack(a8);
03234         pk.pack(a9);
03235         pk.pack(a10);
03236         pk.pack(a11);
03237         pk.pack(a12);
03238         pk.pack(a13);
03239         pk.pack(a14);
03240         pk.pack(a15);
03241         pk.pack(a16);
03242         pk.pack(a17);
03243         pk.pack(a18);
03244         pk.pack(a19);
03245         pk.pack(a20);
03246         pk.pack(a21);
03247         pk.pack(a22);
03248         pk.pack(a23);
03249         pk.pack(a24);
03250         pk.pack(a25);
03251         pk.pack(a26);
03252         pk.pack(a27);
03253         pk.pack(a28);
03254         pk.pack(a29);
03255         pk.pack(a30);
03256         pk.pack(a31);
03257     }
03258     void msgpack_unpack(msgpack::object const& o)
03259     {
03260         if(o.type != msgpack::type::ARRAY) { 
03261             printf("throw msgpack::type_error()");
03262 //            throw msgpack::type_error(); 
03263         }
03264         const size_t size = o.via.array.size;
03265         if(size > 0) {
03266             msgpack::object *ptr = o.via.array.ptr;
03267             switch(size) {
03268             default:
03269             case 32: ptr[31].convert(a31);
03270             case 31: ptr[30].convert(a30);
03271             case 30: ptr[29].convert(a29);
03272             case 29: ptr[28].convert(a28);
03273             case 28: ptr[27].convert(a27);
03274             case 27: ptr[26].convert(a26);
03275             case 26: ptr[25].convert(a25);
03276             case 25: ptr[24].convert(a24);
03277             case 24: ptr[23].convert(a23);
03278             case 23: ptr[22].convert(a22);
03279             case 22: ptr[21].convert(a21);
03280             case 21: ptr[20].convert(a20);
03281             case 20: ptr[19].convert(a19);
03282             case 19: ptr[18].convert(a18);
03283             case 18: ptr[17].convert(a17);
03284             case 17: ptr[16].convert(a16);
03285             case 16: ptr[15].convert(a15);
03286             case 15: ptr[14].convert(a14);
03287             case 14: ptr[13].convert(a13);
03288             case 13: ptr[12].convert(a12);
03289             case 12: ptr[11].convert(a11);
03290             case 11: ptr[10].convert(a10);
03291             case 10: ptr[9].convert(a9);
03292             case 9: ptr[8].convert(a8);
03293             case 8: ptr[7].convert(a7);
03294             case 7: ptr[6].convert(a6);
03295             case 6: ptr[5].convert(a5);
03296             case 5: ptr[4].convert(a4);
03297             case 4: ptr[3].convert(a3);
03298             case 3: ptr[2].convert(a2);
03299             case 2: ptr[1].convert(a1);
03300             case 1: ptr[0].convert(a0);
03301             }
03302         }
03303     }
03304     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
03305     {
03306         o->type = msgpack::type::ARRAY;
03307         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*32));
03308         o->via.array.size = 32;
03309         
03310         o->via.array.ptr[0] = msgpack::object(a0, z);
03311         o->via.array.ptr[1] = msgpack::object(a1, z);
03312         o->via.array.ptr[2] = msgpack::object(a2, z);
03313         o->via.array.ptr[3] = msgpack::object(a3, z);
03314         o->via.array.ptr[4] = msgpack::object(a4, z);
03315         o->via.array.ptr[5] = msgpack::object(a5, z);
03316         o->via.array.ptr[6] = msgpack::object(a6, z);
03317         o->via.array.ptr[7] = msgpack::object(a7, z);
03318         o->via.array.ptr[8] = msgpack::object(a8, z);
03319         o->via.array.ptr[9] = msgpack::object(a9, z);
03320         o->via.array.ptr[10] = msgpack::object(a10, z);
03321         o->via.array.ptr[11] = msgpack::object(a11, z);
03322         o->via.array.ptr[12] = msgpack::object(a12, z);
03323         o->via.array.ptr[13] = msgpack::object(a13, z);
03324         o->via.array.ptr[14] = msgpack::object(a14, z);
03325         o->via.array.ptr[15] = msgpack::object(a15, z);
03326         o->via.array.ptr[16] = msgpack::object(a16, z);
03327         o->via.array.ptr[17] = msgpack::object(a17, z);
03328         o->via.array.ptr[18] = msgpack::object(a18, z);
03329         o->via.array.ptr[19] = msgpack::object(a19, z);
03330         o->via.array.ptr[20] = msgpack::object(a20, z);
03331         o->via.array.ptr[21] = msgpack::object(a21, z);
03332         o->via.array.ptr[22] = msgpack::object(a22, z);
03333         o->via.array.ptr[23] = msgpack::object(a23, z);
03334         o->via.array.ptr[24] = msgpack::object(a24, z);
03335         o->via.array.ptr[25] = msgpack::object(a25, z);
03336         o->via.array.ptr[26] = msgpack::object(a26, z);
03337         o->via.array.ptr[27] = msgpack::object(a27, z);
03338         o->via.array.ptr[28] = msgpack::object(a28, z);
03339         o->via.array.ptr[29] = msgpack::object(a29, z);
03340         o->via.array.ptr[30] = msgpack::object(a30, z);
03341         o->via.array.ptr[31] = msgpack::object(a31, z);
03342     }
03343     
03344     A0& a0;
03345     A1& a1;
03346     A2& a2;
03347     A3& a3;
03348     A4& a4;
03349     A5& a5;
03350     A6& a6;
03351     A7& a7;
03352     A8& a8;
03353     A9& a9;
03354     A10& a10;
03355     A11& a11;
03356     A12& a12;
03357     A13& a13;
03358     A14& a14;
03359     A15& a15;
03360     A16& a16;
03361     A17& a17;
03362     A18& a18;
03363     A19& a19;
03364     A20& a20;
03365     A21& a21;
03366     A22& a22;
03367     A23& a23;
03368     A24& a24;
03369     A25& a25;
03370     A26& a26;
03371     A27& a27;
03372     A28& a28;
03373     A29& a29;
03374     A30& a30;
03375     A31& a31;
03376 };
03377 
03378 /// @endcond
03379 
03380 inline define_array<> make_define_array()
03381 {
03382     return define_array<>();
03383 }
03384 
03385 /// @cond
03386 
03387 template <typename A0>
03388 inline define_array<A0> make_define_array(A0& a0)
03389 {
03390     return define_array<A0>(a0);
03391 }
03392 
03393 template <typename A0, typename A1>
03394 inline define_array<A0, A1> make_define_array(A0& a0, A1& a1)
03395 {
03396     return define_array<A0, A1>(a0, a1);
03397 }
03398 
03399 template <typename A0, typename A1, typename A2>
03400 inline define_array<A0, A1, A2> make_define_array(A0& a0, A1& a1, A2& a2)
03401 {
03402     return define_array<A0, A1, A2>(a0, a1, a2);
03403 }
03404 
03405 template <typename A0, typename A1, typename A2, typename A3>
03406 inline define_array<A0, A1, A2, A3> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3)
03407 {
03408     return define_array<A0, A1, A2, A3>(a0, a1, a2, a3);
03409 }
03410 
03411 template <typename A0, typename A1, typename A2, typename A3, typename A4>
03412 inline define_array<A0, A1, A2, A3, A4> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4)
03413 {
03414     return define_array<A0, A1, A2, A3, A4>(a0, a1, a2, a3, a4);
03415 }
03416 
03417 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
03418 inline define_array<A0, A1, A2, A3, A4, A5> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5)
03419 {
03420     return define_array<A0, A1, A2, A3, A4, A5>(a0, a1, a2, a3, a4, a5);
03421 }
03422 
03423 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
03424 inline define_array<A0, A1, A2, A3, A4, A5, A6> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6)
03425 {
03426     return define_array<A0, A1, A2, A3, A4, A5, A6>(a0, a1, a2, a3, a4, a5, a6);
03427 }
03428 
03429 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
03430 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7)
03431 {
03432     return define_array<A0, A1, A2, A3, A4, A5, A6, A7>(a0, a1, a2, a3, a4, a5, a6, a7);
03433 }
03434 
03435 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
03436 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8)
03437 {
03438     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8>(a0, a1, a2, a3, a4, a5, a6, a7, a8);
03439 }
03440 
03441 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
03442 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9)
03443 {
03444     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
03445 }
03446 
03447 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
03448 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> 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)
03449 {
03450     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
03451 }
03452 
03453 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
03454 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> 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)
03455 {
03456     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
03457 }
03458 
03459 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
03460 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> 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)
03461 {
03462     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
03463 }
03464 
03465 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
03466 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> 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)
03467 {
03468     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13);
03469 }
03470 
03471 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
03472 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> 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)
03473 {
03474     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);
03475 }
03476 
03477 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
03478 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> 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)
03479 {
03480     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15);
03481 }
03482 
03483 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
03484 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> 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)
03485 {
03486     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16);
03487 }
03488 
03489 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
03490 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> 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)
03491 {
03492     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17);
03493 }
03494 
03495 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
03496 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> 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)
03497 {
03498     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
03499 }
03500 
03501 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
03502 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> 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)
03503 {
03504     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19);
03505 }
03506 
03507 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
03508 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> 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)
03509 {
03510     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
03511 }
03512 
03513 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
03514 inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> 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)
03515 {
03516     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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21);
03517 }
03518 
03519 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
03520 inline 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> 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)
03521 {
03522     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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22);
03523 }
03524 
03525 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
03526 inline 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> 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)
03527 {
03528     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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23);
03529 }
03530 
03531 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
03532 inline 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> 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)
03533 {
03534     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>(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);
03535 }
03536 
03537 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
03538 inline 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> 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)
03539 {
03540     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>(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);
03541 }
03542 
03543 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
03544 inline 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> 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)
03545 {
03546     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>(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);
03547 }
03548 
03549 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
03550 inline 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> 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)
03551 {
03552     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>(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);
03553 }
03554 
03555 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
03556 inline 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> 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)
03557 {
03558     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>(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);
03559 }
03560 
03561 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
03562 inline 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> 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)
03563 {
03564     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>(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);
03565 }
03566 
03567 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
03568 inline 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> 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)
03569 {
03570     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>(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);
03571 }
03572 
03573 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
03574 inline 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> 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)
03575 {
03576     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>(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);
03577 }
03578 
03579 /// @endcond
03580 
03581 }  // namespace type
03582 /// @cond
03583 }  // MSGPACK_API_VERSION_NAMESPACE(v1)
03584 /// @endcond
03585 }  // namespace msgpack
03586 
03587 
03588 #endif // MSGPACK_CPP03_DEFINE_ARRAY_HPP
03589