1 //
2 // MessagePack for C++ static resolution routine
3 //
4 // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi
5 //
6 //    Distributed under the Boost Software License, Version 1.0.
7 //    (See accompanying file LICENSE_1_0.txt or copy at
8 //    http://www.boost.org/LICENSE_1_0.txt)
9 //
10 #ifndef MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP
11 #define MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP
12 
13 #include "msgpack/v1/adaptor/detail/cpp03_define_array_decl.hpp"
14 #include "msgpack/adaptor/msgpack_tuple.hpp"
15 #include "msgpack/adaptor/adaptor_base.hpp"
16 #include "msgpack/object_fwd.hpp"
17 
18 namespace msgpack {
19 /// @cond
MSGPACK_API_VERSION_NAMESPACE(v1)20 MSGPACK_API_VERSION_NAMESPACE(v1) {
21 /// @endcond
22 namespace type {
23 
24 
25 template <>
26 struct define_array<> {
27     typedef define_array<> value_type;
28     typedef tuple<> tuple_type;
29     template <typename Packer>
30     void msgpack_pack(Packer& pk) const
31     {
32         pk.pack_array(0);
33     }
34     void msgpack_unpack(msgpack::object const& o)
35     {
36         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
37     }
38     void msgpack_object(msgpack::object* o, msgpack::zone&) const
39     {
40         o->type = msgpack::type::ARRAY;
41         o->via.array.ptr = MSGPACK_NULLPTR;
42         o->via.array.size = 0;
43     }
44 };
45 
46 /// @cond
47 
48 template <typename A0>
49 struct define_array<A0> {
50     typedef define_array<A0> value_type;
51     typedef tuple<A0> tuple_type;
52     define_array(A0& _a0) :
53         a0(_a0) {}
54     template <typename Packer>
55     void msgpack_pack(Packer& pk) const
56     {
57         pk.pack_array(1);
58 
59         pk.pack(a0);
60     }
61     void msgpack_unpack(msgpack::object const& o)
62     {
63         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
64         const size_t size = o.via.array.size;
65         if(size > 0) {
66             msgpack::object *ptr = o.via.array.ptr;
67             switch(size) {
68             default:
69             case 1: ptr[0].convert(a0);
70             // fallthrough
71 
72             }
73         }
74     }
75     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
76     {
77         o->type = msgpack::type::ARRAY;
78         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*1, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
79         o->via.array.size = 1;
80 
81         o->via.array.ptr[0] = msgpack::object(a0, z);
82     }
83 
84     A0& a0;
85 };
86 
87 template <typename A0, typename A1>
88 struct define_array<A0, A1> {
89     typedef define_array<A0, A1> value_type;
90     typedef tuple<A0, A1> tuple_type;
91     define_array(A0& _a0, A1& _a1) :
92         a0(_a0), a1(_a1) {}
93     template <typename Packer>
94     void msgpack_pack(Packer& pk) const
95     {
96         pk.pack_array(2);
97 
98         pk.pack(a0);
99         pk.pack(a1);
100     }
101     void msgpack_unpack(msgpack::object const& o)
102     {
103         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
104         const size_t size = o.via.array.size;
105         if(size > 0) {
106             msgpack::object *ptr = o.via.array.ptr;
107             switch(size) {
108             default:
109             case 2: ptr[1].convert(a1);
110             // fallthrough
111 
112             case 1: ptr[0].convert(a0);
113             // fallthrough
114 
115             }
116         }
117     }
118     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
119     {
120         o->type = msgpack::type::ARRAY;
121         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*2, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
122         o->via.array.size = 2;
123 
124         o->via.array.ptr[0] = msgpack::object(a0, z);
125         o->via.array.ptr[1] = msgpack::object(a1, z);
126     }
127 
128     A0& a0;
129     A1& a1;
130 };
131 
132 template <typename A0, typename A1, typename A2>
133 struct define_array<A0, A1, A2> {
134     typedef define_array<A0, A1, A2> value_type;
135     typedef tuple<A0, A1, A2> tuple_type;
136     define_array(A0& _a0, A1& _a1, A2& _a2) :
137         a0(_a0), a1(_a1), a2(_a2) {}
138     template <typename Packer>
139     void msgpack_pack(Packer& pk) const
140     {
141         pk.pack_array(3);
142 
143         pk.pack(a0);
144         pk.pack(a1);
145         pk.pack(a2);
146     }
147     void msgpack_unpack(msgpack::object const& o)
148     {
149         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
150         const size_t size = o.via.array.size;
151         if(size > 0) {
152             msgpack::object *ptr = o.via.array.ptr;
153             switch(size) {
154             default:
155             case 3: ptr[2].convert(a2);
156             // fallthrough
157 
158             case 2: ptr[1].convert(a1);
159             // fallthrough
160 
161             case 1: ptr[0].convert(a0);
162             // fallthrough
163 
164             }
165         }
166     }
167     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
168     {
169         o->type = msgpack::type::ARRAY;
170         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*3, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
171         o->via.array.size = 3;
172 
173         o->via.array.ptr[0] = msgpack::object(a0, z);
174         o->via.array.ptr[1] = msgpack::object(a1, z);
175         o->via.array.ptr[2] = msgpack::object(a2, z);
176     }
177 
178     A0& a0;
179     A1& a1;
180     A2& a2;
181 };
182 
183 template <typename A0, typename A1, typename A2, typename A3>
184 struct define_array<A0, A1, A2, A3> {
185     typedef define_array<A0, A1, A2, A3> value_type;
186     typedef tuple<A0, A1, A2, A3> tuple_type;
187     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3) :
188         a0(_a0), a1(_a1), a2(_a2), a3(_a3) {}
189     template <typename Packer>
190     void msgpack_pack(Packer& pk) const
191     {
192         pk.pack_array(4);
193 
194         pk.pack(a0);
195         pk.pack(a1);
196         pk.pack(a2);
197         pk.pack(a3);
198     }
199     void msgpack_unpack(msgpack::object const& o)
200     {
201         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
202         const size_t size = o.via.array.size;
203         if(size > 0) {
204             msgpack::object *ptr = o.via.array.ptr;
205             switch(size) {
206             default:
207             case 4: ptr[3].convert(a3);
208             // fallthrough
209 
210             case 3: ptr[2].convert(a2);
211             // fallthrough
212 
213             case 2: ptr[1].convert(a1);
214             // fallthrough
215 
216             case 1: ptr[0].convert(a0);
217             // fallthrough
218 
219             }
220         }
221     }
222     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
223     {
224         o->type = msgpack::type::ARRAY;
225         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*4, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
226         o->via.array.size = 4;
227 
228         o->via.array.ptr[0] = msgpack::object(a0, z);
229         o->via.array.ptr[1] = msgpack::object(a1, z);
230         o->via.array.ptr[2] = msgpack::object(a2, z);
231         o->via.array.ptr[3] = msgpack::object(a3, z);
232     }
233 
234     A0& a0;
235     A1& a1;
236     A2& a2;
237     A3& a3;
238 };
239 
240 template <typename A0, typename A1, typename A2, typename A3, typename A4>
241 struct define_array<A0, A1, A2, A3, A4> {
242     typedef define_array<A0, A1, A2, A3, A4> value_type;
243     typedef tuple<A0, A1, A2, A3, A4> tuple_type;
244     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4) :
245         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4) {}
246     template <typename Packer>
247     void msgpack_pack(Packer& pk) const
248     {
249         pk.pack_array(5);
250 
251         pk.pack(a0);
252         pk.pack(a1);
253         pk.pack(a2);
254         pk.pack(a3);
255         pk.pack(a4);
256     }
257     void msgpack_unpack(msgpack::object const& o)
258     {
259         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
260         const size_t size = o.via.array.size;
261         if(size > 0) {
262             msgpack::object *ptr = o.via.array.ptr;
263             switch(size) {
264             default:
265             case 5: ptr[4].convert(a4);
266             // fallthrough
267 
268             case 4: ptr[3].convert(a3);
269             // fallthrough
270 
271             case 3: ptr[2].convert(a2);
272             // fallthrough
273 
274             case 2: ptr[1].convert(a1);
275             // fallthrough
276 
277             case 1: ptr[0].convert(a0);
278             // fallthrough
279 
280             }
281         }
282     }
283     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
284     {
285         o->type = msgpack::type::ARRAY;
286         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*5, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
287         o->via.array.size = 5;
288 
289         o->via.array.ptr[0] = msgpack::object(a0, z);
290         o->via.array.ptr[1] = msgpack::object(a1, z);
291         o->via.array.ptr[2] = msgpack::object(a2, z);
292         o->via.array.ptr[3] = msgpack::object(a3, z);
293         o->via.array.ptr[4] = msgpack::object(a4, z);
294     }
295 
296     A0& a0;
297     A1& a1;
298     A2& a2;
299     A3& a3;
300     A4& a4;
301 };
302 
303 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
304 struct define_array<A0, A1, A2, A3, A4, A5> {
305     typedef define_array<A0, A1, A2, A3, A4, A5> value_type;
306     typedef tuple<A0, A1, A2, A3, A4, A5> tuple_type;
307     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5) :
308         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5) {}
309     template <typename Packer>
310     void msgpack_pack(Packer& pk) const
311     {
312         pk.pack_array(6);
313 
314         pk.pack(a0);
315         pk.pack(a1);
316         pk.pack(a2);
317         pk.pack(a3);
318         pk.pack(a4);
319         pk.pack(a5);
320     }
321     void msgpack_unpack(msgpack::object const& o)
322     {
323         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
324         const size_t size = o.via.array.size;
325         if(size > 0) {
326             msgpack::object *ptr = o.via.array.ptr;
327             switch(size) {
328             default:
329             case 6: ptr[5].convert(a5);
330             // fallthrough
331 
332             case 5: ptr[4].convert(a4);
333             // fallthrough
334 
335             case 4: ptr[3].convert(a3);
336             // fallthrough
337 
338             case 3: ptr[2].convert(a2);
339             // fallthrough
340 
341             case 2: ptr[1].convert(a1);
342             // fallthrough
343 
344             case 1: ptr[0].convert(a0);
345             // fallthrough
346 
347             }
348         }
349     }
350     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
351     {
352         o->type = msgpack::type::ARRAY;
353         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*6, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
354         o->via.array.size = 6;
355 
356         o->via.array.ptr[0] = msgpack::object(a0, z);
357         o->via.array.ptr[1] = msgpack::object(a1, z);
358         o->via.array.ptr[2] = msgpack::object(a2, z);
359         o->via.array.ptr[3] = msgpack::object(a3, z);
360         o->via.array.ptr[4] = msgpack::object(a4, z);
361         o->via.array.ptr[5] = msgpack::object(a5, z);
362     }
363 
364     A0& a0;
365     A1& a1;
366     A2& a2;
367     A3& a3;
368     A4& a4;
369     A5& a5;
370 };
371 
372 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
373 struct define_array<A0, A1, A2, A3, A4, A5, A6> {
374     typedef define_array<A0, A1, A2, A3, A4, A5, A6> value_type;
375     typedef tuple<A0, A1, A2, A3, A4, A5, A6> tuple_type;
376     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6) :
377         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6) {}
378     template <typename Packer>
379     void msgpack_pack(Packer& pk) const
380     {
381         pk.pack_array(7);
382 
383         pk.pack(a0);
384         pk.pack(a1);
385         pk.pack(a2);
386         pk.pack(a3);
387         pk.pack(a4);
388         pk.pack(a5);
389         pk.pack(a6);
390     }
391     void msgpack_unpack(msgpack::object const& o)
392     {
393         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
394         const size_t size = o.via.array.size;
395         if(size > 0) {
396             msgpack::object *ptr = o.via.array.ptr;
397             switch(size) {
398             default:
399             case 7: ptr[6].convert(a6);
400             // fallthrough
401 
402             case 6: ptr[5].convert(a5);
403             // fallthrough
404 
405             case 5: ptr[4].convert(a4);
406             // fallthrough
407 
408             case 4: ptr[3].convert(a3);
409             // fallthrough
410 
411             case 3: ptr[2].convert(a2);
412             // fallthrough
413 
414             case 2: ptr[1].convert(a1);
415             // fallthrough
416 
417             case 1: ptr[0].convert(a0);
418             // fallthrough
419 
420             }
421         }
422     }
423     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
424     {
425         o->type = msgpack::type::ARRAY;
426         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*7, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
427         o->via.array.size = 7;
428 
429         o->via.array.ptr[0] = msgpack::object(a0, z);
430         o->via.array.ptr[1] = msgpack::object(a1, z);
431         o->via.array.ptr[2] = msgpack::object(a2, z);
432         o->via.array.ptr[3] = msgpack::object(a3, z);
433         o->via.array.ptr[4] = msgpack::object(a4, z);
434         o->via.array.ptr[5] = msgpack::object(a5, z);
435         o->via.array.ptr[6] = msgpack::object(a6, z);
436     }
437 
438     A0& a0;
439     A1& a1;
440     A2& a2;
441     A3& a3;
442     A4& a4;
443     A5& a5;
444     A6& a6;
445 };
446 
447 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
448 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7> {
449     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7> value_type;
450     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7> tuple_type;
451     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7) :
452         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7) {}
453     template <typename Packer>
454     void msgpack_pack(Packer& pk) const
455     {
456         pk.pack_array(8);
457 
458         pk.pack(a0);
459         pk.pack(a1);
460         pk.pack(a2);
461         pk.pack(a3);
462         pk.pack(a4);
463         pk.pack(a5);
464         pk.pack(a6);
465         pk.pack(a7);
466     }
467     void msgpack_unpack(msgpack::object const& o)
468     {
469         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
470         const size_t size = o.via.array.size;
471         if(size > 0) {
472             msgpack::object *ptr = o.via.array.ptr;
473             switch(size) {
474             default:
475             case 8: ptr[7].convert(a7);
476             // fallthrough
477 
478             case 7: ptr[6].convert(a6);
479             // fallthrough
480 
481             case 6: ptr[5].convert(a5);
482             // fallthrough
483 
484             case 5: ptr[4].convert(a4);
485             // fallthrough
486 
487             case 4: ptr[3].convert(a3);
488             // fallthrough
489 
490             case 3: ptr[2].convert(a2);
491             // fallthrough
492 
493             case 2: ptr[1].convert(a1);
494             // fallthrough
495 
496             case 1: ptr[0].convert(a0);
497             // fallthrough
498 
499             }
500         }
501     }
502     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
503     {
504         o->type = msgpack::type::ARRAY;
505         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*8, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
506         o->via.array.size = 8;
507 
508         o->via.array.ptr[0] = msgpack::object(a0, z);
509         o->via.array.ptr[1] = msgpack::object(a1, z);
510         o->via.array.ptr[2] = msgpack::object(a2, z);
511         o->via.array.ptr[3] = msgpack::object(a3, z);
512         o->via.array.ptr[4] = msgpack::object(a4, z);
513         o->via.array.ptr[5] = msgpack::object(a5, z);
514         o->via.array.ptr[6] = msgpack::object(a6, z);
515         o->via.array.ptr[7] = msgpack::object(a7, z);
516     }
517 
518     A0& a0;
519     A1& a1;
520     A2& a2;
521     A3& a3;
522     A4& a4;
523     A5& a5;
524     A6& a6;
525     A7& a7;
526 };
527 
528 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
529 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8> {
530     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8> value_type;
531     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> tuple_type;
532     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8) :
533         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8) {}
534     template <typename Packer>
535     void msgpack_pack(Packer& pk) const
536     {
537         pk.pack_array(9);
538 
539         pk.pack(a0);
540         pk.pack(a1);
541         pk.pack(a2);
542         pk.pack(a3);
543         pk.pack(a4);
544         pk.pack(a5);
545         pk.pack(a6);
546         pk.pack(a7);
547         pk.pack(a8);
548     }
549     void msgpack_unpack(msgpack::object const& o)
550     {
551         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
552         const size_t size = o.via.array.size;
553         if(size > 0) {
554             msgpack::object *ptr = o.via.array.ptr;
555             switch(size) {
556             default:
557             case 9: ptr[8].convert(a8);
558             // fallthrough
559 
560             case 8: ptr[7].convert(a7);
561             // fallthrough
562 
563             case 7: ptr[6].convert(a6);
564             // fallthrough
565 
566             case 6: ptr[5].convert(a5);
567             // fallthrough
568 
569             case 5: ptr[4].convert(a4);
570             // fallthrough
571 
572             case 4: ptr[3].convert(a3);
573             // fallthrough
574 
575             case 3: ptr[2].convert(a2);
576             // fallthrough
577 
578             case 2: ptr[1].convert(a1);
579             // fallthrough
580 
581             case 1: ptr[0].convert(a0);
582             // fallthrough
583 
584             }
585         }
586     }
587     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
588     {
589         o->type = msgpack::type::ARRAY;
590         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*9, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
591         o->via.array.size = 9;
592 
593         o->via.array.ptr[0] = msgpack::object(a0, z);
594         o->via.array.ptr[1] = msgpack::object(a1, z);
595         o->via.array.ptr[2] = msgpack::object(a2, z);
596         o->via.array.ptr[3] = msgpack::object(a3, z);
597         o->via.array.ptr[4] = msgpack::object(a4, z);
598         o->via.array.ptr[5] = msgpack::object(a5, z);
599         o->via.array.ptr[6] = msgpack::object(a6, z);
600         o->via.array.ptr[7] = msgpack::object(a7, z);
601         o->via.array.ptr[8] = msgpack::object(a8, z);
602     }
603 
604     A0& a0;
605     A1& a1;
606     A2& a2;
607     A3& a3;
608     A4& a4;
609     A5& a5;
610     A6& a6;
611     A7& a7;
612     A8& a8;
613 };
614 
615 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
616 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> {
617     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> value_type;
618     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> tuple_type;
619     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9) :
620         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9) {}
621     template <typename Packer>
622     void msgpack_pack(Packer& pk) const
623     {
624         pk.pack_array(10);
625 
626         pk.pack(a0);
627         pk.pack(a1);
628         pk.pack(a2);
629         pk.pack(a3);
630         pk.pack(a4);
631         pk.pack(a5);
632         pk.pack(a6);
633         pk.pack(a7);
634         pk.pack(a8);
635         pk.pack(a9);
636     }
637     void msgpack_unpack(msgpack::object const& o)
638     {
639         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
640         const size_t size = o.via.array.size;
641         if(size > 0) {
642             msgpack::object *ptr = o.via.array.ptr;
643             switch(size) {
644             default:
645             case 10: ptr[9].convert(a9);
646             // fallthrough
647 
648             case 9: ptr[8].convert(a8);
649             // fallthrough
650 
651             case 8: ptr[7].convert(a7);
652             // fallthrough
653 
654             case 7: ptr[6].convert(a6);
655             // fallthrough
656 
657             case 6: ptr[5].convert(a5);
658             // fallthrough
659 
660             case 5: ptr[4].convert(a4);
661             // fallthrough
662 
663             case 4: ptr[3].convert(a3);
664             // fallthrough
665 
666             case 3: ptr[2].convert(a2);
667             // fallthrough
668 
669             case 2: ptr[1].convert(a1);
670             // fallthrough
671 
672             case 1: ptr[0].convert(a0);
673             // fallthrough
674 
675             }
676         }
677     }
678     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
679     {
680         o->type = msgpack::type::ARRAY;
681         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*10, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
682         o->via.array.size = 10;
683 
684         o->via.array.ptr[0] = msgpack::object(a0, z);
685         o->via.array.ptr[1] = msgpack::object(a1, z);
686         o->via.array.ptr[2] = msgpack::object(a2, z);
687         o->via.array.ptr[3] = msgpack::object(a3, z);
688         o->via.array.ptr[4] = msgpack::object(a4, z);
689         o->via.array.ptr[5] = msgpack::object(a5, z);
690         o->via.array.ptr[6] = msgpack::object(a6, z);
691         o->via.array.ptr[7] = msgpack::object(a7, z);
692         o->via.array.ptr[8] = msgpack::object(a8, z);
693         o->via.array.ptr[9] = msgpack::object(a9, z);
694     }
695 
696     A0& a0;
697     A1& a1;
698     A2& a2;
699     A3& a3;
700     A4& a4;
701     A5& a5;
702     A6& a6;
703     A7& a7;
704     A8& a8;
705     A9& a9;
706 };
707 
708 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
709 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> {
710     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> value_type;
711     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> tuple_type;
712     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10) :
713         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10) {}
714     template <typename Packer>
715     void msgpack_pack(Packer& pk) const
716     {
717         pk.pack_array(11);
718 
719         pk.pack(a0);
720         pk.pack(a1);
721         pk.pack(a2);
722         pk.pack(a3);
723         pk.pack(a4);
724         pk.pack(a5);
725         pk.pack(a6);
726         pk.pack(a7);
727         pk.pack(a8);
728         pk.pack(a9);
729         pk.pack(a10);
730     }
731     void msgpack_unpack(msgpack::object const& o)
732     {
733         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
734         const size_t size = o.via.array.size;
735         if(size > 0) {
736             msgpack::object *ptr = o.via.array.ptr;
737             switch(size) {
738             default:
739             case 11: ptr[10].convert(a10);
740             // fallthrough
741 
742             case 10: ptr[9].convert(a9);
743             // fallthrough
744 
745             case 9: ptr[8].convert(a8);
746             // fallthrough
747 
748             case 8: ptr[7].convert(a7);
749             // fallthrough
750 
751             case 7: ptr[6].convert(a6);
752             // fallthrough
753 
754             case 6: ptr[5].convert(a5);
755             // fallthrough
756 
757             case 5: ptr[4].convert(a4);
758             // fallthrough
759 
760             case 4: ptr[3].convert(a3);
761             // fallthrough
762 
763             case 3: ptr[2].convert(a2);
764             // fallthrough
765 
766             case 2: ptr[1].convert(a1);
767             // fallthrough
768 
769             case 1: ptr[0].convert(a0);
770             // fallthrough
771 
772             }
773         }
774     }
775     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
776     {
777         o->type = msgpack::type::ARRAY;
778         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*11, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
779         o->via.array.size = 11;
780 
781         o->via.array.ptr[0] = msgpack::object(a0, z);
782         o->via.array.ptr[1] = msgpack::object(a1, z);
783         o->via.array.ptr[2] = msgpack::object(a2, z);
784         o->via.array.ptr[3] = msgpack::object(a3, z);
785         o->via.array.ptr[4] = msgpack::object(a4, z);
786         o->via.array.ptr[5] = msgpack::object(a5, z);
787         o->via.array.ptr[6] = msgpack::object(a6, z);
788         o->via.array.ptr[7] = msgpack::object(a7, z);
789         o->via.array.ptr[8] = msgpack::object(a8, z);
790         o->via.array.ptr[9] = msgpack::object(a9, z);
791         o->via.array.ptr[10] = msgpack::object(a10, z);
792     }
793 
794     A0& a0;
795     A1& a1;
796     A2& a2;
797     A3& a3;
798     A4& a4;
799     A5& a5;
800     A6& a6;
801     A7& a7;
802     A8& a8;
803     A9& a9;
804     A10& a10;
805 };
806 
807 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>
808 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> {
809     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> value_type;
810     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> tuple_type;
811     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) :
812         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11) {}
813     template <typename Packer>
814     void msgpack_pack(Packer& pk) const
815     {
816         pk.pack_array(12);
817 
818         pk.pack(a0);
819         pk.pack(a1);
820         pk.pack(a2);
821         pk.pack(a3);
822         pk.pack(a4);
823         pk.pack(a5);
824         pk.pack(a6);
825         pk.pack(a7);
826         pk.pack(a8);
827         pk.pack(a9);
828         pk.pack(a10);
829         pk.pack(a11);
830     }
831     void msgpack_unpack(msgpack::object const& o)
832     {
833         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
834         const size_t size = o.via.array.size;
835         if(size > 0) {
836             msgpack::object *ptr = o.via.array.ptr;
837             switch(size) {
838             default:
839             case 12: ptr[11].convert(a11);
840             // fallthrough
841 
842             case 11: ptr[10].convert(a10);
843             // fallthrough
844 
845             case 10: ptr[9].convert(a9);
846             // fallthrough
847 
848             case 9: ptr[8].convert(a8);
849             // fallthrough
850 
851             case 8: ptr[7].convert(a7);
852             // fallthrough
853 
854             case 7: ptr[6].convert(a6);
855             // fallthrough
856 
857             case 6: ptr[5].convert(a5);
858             // fallthrough
859 
860             case 5: ptr[4].convert(a4);
861             // fallthrough
862 
863             case 4: ptr[3].convert(a3);
864             // fallthrough
865 
866             case 3: ptr[2].convert(a2);
867             // fallthrough
868 
869             case 2: ptr[1].convert(a1);
870             // fallthrough
871 
872             case 1: ptr[0].convert(a0);
873             // fallthrough
874 
875             }
876         }
877     }
878     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
879     {
880         o->type = msgpack::type::ARRAY;
881         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*12, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
882         o->via.array.size = 12;
883 
884         o->via.array.ptr[0] = msgpack::object(a0, z);
885         o->via.array.ptr[1] = msgpack::object(a1, z);
886         o->via.array.ptr[2] = msgpack::object(a2, z);
887         o->via.array.ptr[3] = msgpack::object(a3, z);
888         o->via.array.ptr[4] = msgpack::object(a4, z);
889         o->via.array.ptr[5] = msgpack::object(a5, z);
890         o->via.array.ptr[6] = msgpack::object(a6, z);
891         o->via.array.ptr[7] = msgpack::object(a7, z);
892         o->via.array.ptr[8] = msgpack::object(a8, z);
893         o->via.array.ptr[9] = msgpack::object(a9, z);
894         o->via.array.ptr[10] = msgpack::object(a10, z);
895         o->via.array.ptr[11] = msgpack::object(a11, z);
896     }
897 
898     A0& a0;
899     A1& a1;
900     A2& a2;
901     A3& a3;
902     A4& a4;
903     A5& a5;
904     A6& a6;
905     A7& a7;
906     A8& a8;
907     A9& a9;
908     A10& a10;
909     A11& a11;
910 };
911 
912 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>
913 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> {
914     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> value_type;
915     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> tuple_type;
916     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) :
917         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) {}
918     template <typename Packer>
919     void msgpack_pack(Packer& pk) const
920     {
921         pk.pack_array(13);
922 
923         pk.pack(a0);
924         pk.pack(a1);
925         pk.pack(a2);
926         pk.pack(a3);
927         pk.pack(a4);
928         pk.pack(a5);
929         pk.pack(a6);
930         pk.pack(a7);
931         pk.pack(a8);
932         pk.pack(a9);
933         pk.pack(a10);
934         pk.pack(a11);
935         pk.pack(a12);
936     }
937     void msgpack_unpack(msgpack::object const& o)
938     {
939         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
940         const size_t size = o.via.array.size;
941         if(size > 0) {
942             msgpack::object *ptr = o.via.array.ptr;
943             switch(size) {
944             default:
945             case 13: ptr[12].convert(a12);
946             // fallthrough
947 
948             case 12: ptr[11].convert(a11);
949             // fallthrough
950 
951             case 11: ptr[10].convert(a10);
952             // fallthrough
953 
954             case 10: ptr[9].convert(a9);
955             // fallthrough
956 
957             case 9: ptr[8].convert(a8);
958             // fallthrough
959 
960             case 8: ptr[7].convert(a7);
961             // fallthrough
962 
963             case 7: ptr[6].convert(a6);
964             // fallthrough
965 
966             case 6: ptr[5].convert(a5);
967             // fallthrough
968 
969             case 5: ptr[4].convert(a4);
970             // fallthrough
971 
972             case 4: ptr[3].convert(a3);
973             // fallthrough
974 
975             case 3: ptr[2].convert(a2);
976             // fallthrough
977 
978             case 2: ptr[1].convert(a1);
979             // fallthrough
980 
981             case 1: ptr[0].convert(a0);
982             // fallthrough
983 
984             }
985         }
986     }
987     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
988     {
989         o->type = msgpack::type::ARRAY;
990         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*13, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
991         o->via.array.size = 13;
992 
993         o->via.array.ptr[0] = msgpack::object(a0, z);
994         o->via.array.ptr[1] = msgpack::object(a1, z);
995         o->via.array.ptr[2] = msgpack::object(a2, z);
996         o->via.array.ptr[3] = msgpack::object(a3, z);
997         o->via.array.ptr[4] = msgpack::object(a4, z);
998         o->via.array.ptr[5] = msgpack::object(a5, z);
999         o->via.array.ptr[6] = msgpack::object(a6, z);
1000         o->via.array.ptr[7] = msgpack::object(a7, z);
1001         o->via.array.ptr[8] = msgpack::object(a8, z);
1002         o->via.array.ptr[9] = msgpack::object(a9, z);
1003         o->via.array.ptr[10] = msgpack::object(a10, z);
1004         o->via.array.ptr[11] = msgpack::object(a11, z);
1005         o->via.array.ptr[12] = msgpack::object(a12, z);
1006     }
1007 
1008     A0& a0;
1009     A1& a1;
1010     A2& a2;
1011     A3& a3;
1012     A4& a4;
1013     A5& a5;
1014     A6& a6;
1015     A7& a7;
1016     A8& a8;
1017     A9& a9;
1018     A10& a10;
1019     A11& a11;
1020     A12& a12;
1021 };
1022 
1023 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>
1024 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> {
1025     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> value_type;
1026     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> tuple_type;
1027     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) :
1028         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) {}
1029     template <typename Packer>
1030     void msgpack_pack(Packer& pk) const
1031     {
1032         pk.pack_array(14);
1033 
1034         pk.pack(a0);
1035         pk.pack(a1);
1036         pk.pack(a2);
1037         pk.pack(a3);
1038         pk.pack(a4);
1039         pk.pack(a5);
1040         pk.pack(a6);
1041         pk.pack(a7);
1042         pk.pack(a8);
1043         pk.pack(a9);
1044         pk.pack(a10);
1045         pk.pack(a11);
1046         pk.pack(a12);
1047         pk.pack(a13);
1048     }
1049     void msgpack_unpack(msgpack::object const& o)
1050     {
1051         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
1052         const size_t size = o.via.array.size;
1053         if(size > 0) {
1054             msgpack::object *ptr = o.via.array.ptr;
1055             switch(size) {
1056             default:
1057             case 14: ptr[13].convert(a13);
1058             // fallthrough
1059 
1060             case 13: ptr[12].convert(a12);
1061             // fallthrough
1062 
1063             case 12: ptr[11].convert(a11);
1064             // fallthrough
1065 
1066             case 11: ptr[10].convert(a10);
1067             // fallthrough
1068 
1069             case 10: ptr[9].convert(a9);
1070             // fallthrough
1071 
1072             case 9: ptr[8].convert(a8);
1073             // fallthrough
1074 
1075             case 8: ptr[7].convert(a7);
1076             // fallthrough
1077 
1078             case 7: ptr[6].convert(a6);
1079             // fallthrough
1080 
1081             case 6: ptr[5].convert(a5);
1082             // fallthrough
1083 
1084             case 5: ptr[4].convert(a4);
1085             // fallthrough
1086 
1087             case 4: ptr[3].convert(a3);
1088             // fallthrough
1089 
1090             case 3: ptr[2].convert(a2);
1091             // fallthrough
1092 
1093             case 2: ptr[1].convert(a1);
1094             // fallthrough
1095 
1096             case 1: ptr[0].convert(a0);
1097             // fallthrough
1098 
1099             }
1100         }
1101     }
1102     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
1103     {
1104         o->type = msgpack::type::ARRAY;
1105         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*14, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
1106         o->via.array.size = 14;
1107 
1108         o->via.array.ptr[0] = msgpack::object(a0, z);
1109         o->via.array.ptr[1] = msgpack::object(a1, z);
1110         o->via.array.ptr[2] = msgpack::object(a2, z);
1111         o->via.array.ptr[3] = msgpack::object(a3, z);
1112         o->via.array.ptr[4] = msgpack::object(a4, z);
1113         o->via.array.ptr[5] = msgpack::object(a5, z);
1114         o->via.array.ptr[6] = msgpack::object(a6, z);
1115         o->via.array.ptr[7] = msgpack::object(a7, z);
1116         o->via.array.ptr[8] = msgpack::object(a8, z);
1117         o->via.array.ptr[9] = msgpack::object(a9, z);
1118         o->via.array.ptr[10] = msgpack::object(a10, z);
1119         o->via.array.ptr[11] = msgpack::object(a11, z);
1120         o->via.array.ptr[12] = msgpack::object(a12, z);
1121         o->via.array.ptr[13] = msgpack::object(a13, z);
1122     }
1123 
1124     A0& a0;
1125     A1& a1;
1126     A2& a2;
1127     A3& a3;
1128     A4& a4;
1129     A5& a5;
1130     A6& a6;
1131     A7& a7;
1132     A8& a8;
1133     A9& a9;
1134     A10& a10;
1135     A11& a11;
1136     A12& a12;
1137     A13& a13;
1138 };
1139 
1140 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>
1141 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> {
1142     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> value_type;
1143     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> tuple_type;
1144     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) :
1145         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) {}
1146     template <typename Packer>
1147     void msgpack_pack(Packer& pk) const
1148     {
1149         pk.pack_array(15);
1150 
1151         pk.pack(a0);
1152         pk.pack(a1);
1153         pk.pack(a2);
1154         pk.pack(a3);
1155         pk.pack(a4);
1156         pk.pack(a5);
1157         pk.pack(a6);
1158         pk.pack(a7);
1159         pk.pack(a8);
1160         pk.pack(a9);
1161         pk.pack(a10);
1162         pk.pack(a11);
1163         pk.pack(a12);
1164         pk.pack(a13);
1165         pk.pack(a14);
1166     }
1167     void msgpack_unpack(msgpack::object const& o)
1168     {
1169         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
1170         const size_t size = o.via.array.size;
1171         if(size > 0) {
1172             msgpack::object *ptr = o.via.array.ptr;
1173             switch(size) {
1174             default:
1175             case 15: ptr[14].convert(a14);
1176             // fallthrough
1177 
1178             case 14: ptr[13].convert(a13);
1179             // fallthrough
1180 
1181             case 13: ptr[12].convert(a12);
1182             // fallthrough
1183 
1184             case 12: ptr[11].convert(a11);
1185             // fallthrough
1186 
1187             case 11: ptr[10].convert(a10);
1188             // fallthrough
1189 
1190             case 10: ptr[9].convert(a9);
1191             // fallthrough
1192 
1193             case 9: ptr[8].convert(a8);
1194             // fallthrough
1195 
1196             case 8: ptr[7].convert(a7);
1197             // fallthrough
1198 
1199             case 7: ptr[6].convert(a6);
1200             // fallthrough
1201 
1202             case 6: ptr[5].convert(a5);
1203             // fallthrough
1204 
1205             case 5: ptr[4].convert(a4);
1206             // fallthrough
1207 
1208             case 4: ptr[3].convert(a3);
1209             // fallthrough
1210 
1211             case 3: ptr[2].convert(a2);
1212             // fallthrough
1213 
1214             case 2: ptr[1].convert(a1);
1215             // fallthrough
1216 
1217             case 1: ptr[0].convert(a0);
1218             // fallthrough
1219 
1220             }
1221         }
1222     }
1223     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
1224     {
1225         o->type = msgpack::type::ARRAY;
1226         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*15, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
1227         o->via.array.size = 15;
1228 
1229         o->via.array.ptr[0] = msgpack::object(a0, z);
1230         o->via.array.ptr[1] = msgpack::object(a1, z);
1231         o->via.array.ptr[2] = msgpack::object(a2, z);
1232         o->via.array.ptr[3] = msgpack::object(a3, z);
1233         o->via.array.ptr[4] = msgpack::object(a4, z);
1234         o->via.array.ptr[5] = msgpack::object(a5, z);
1235         o->via.array.ptr[6] = msgpack::object(a6, z);
1236         o->via.array.ptr[7] = msgpack::object(a7, z);
1237         o->via.array.ptr[8] = msgpack::object(a8, z);
1238         o->via.array.ptr[9] = msgpack::object(a9, z);
1239         o->via.array.ptr[10] = msgpack::object(a10, z);
1240         o->via.array.ptr[11] = msgpack::object(a11, z);
1241         o->via.array.ptr[12] = msgpack::object(a12, z);
1242         o->via.array.ptr[13] = msgpack::object(a13, z);
1243         o->via.array.ptr[14] = msgpack::object(a14, z);
1244     }
1245 
1246     A0& a0;
1247     A1& a1;
1248     A2& a2;
1249     A3& a3;
1250     A4& a4;
1251     A5& a5;
1252     A6& a6;
1253     A7& a7;
1254     A8& a8;
1255     A9& a9;
1256     A10& a10;
1257     A11& a11;
1258     A12& a12;
1259     A13& a13;
1260     A14& a14;
1261 };
1262 
1263 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>
1264 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> {
1265     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> value_type;
1266     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> tuple_type;
1267     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) :
1268         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) {}
1269     template <typename Packer>
1270     void msgpack_pack(Packer& pk) const
1271     {
1272         pk.pack_array(16);
1273 
1274         pk.pack(a0);
1275         pk.pack(a1);
1276         pk.pack(a2);
1277         pk.pack(a3);
1278         pk.pack(a4);
1279         pk.pack(a5);
1280         pk.pack(a6);
1281         pk.pack(a7);
1282         pk.pack(a8);
1283         pk.pack(a9);
1284         pk.pack(a10);
1285         pk.pack(a11);
1286         pk.pack(a12);
1287         pk.pack(a13);
1288         pk.pack(a14);
1289         pk.pack(a15);
1290     }
1291     void msgpack_unpack(msgpack::object const& o)
1292     {
1293         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
1294         const size_t size = o.via.array.size;
1295         if(size > 0) {
1296             msgpack::object *ptr = o.via.array.ptr;
1297             switch(size) {
1298             default:
1299             case 16: ptr[15].convert(a15);
1300             // fallthrough
1301 
1302             case 15: ptr[14].convert(a14);
1303             // fallthrough
1304 
1305             case 14: ptr[13].convert(a13);
1306             // fallthrough
1307 
1308             case 13: ptr[12].convert(a12);
1309             // fallthrough
1310 
1311             case 12: ptr[11].convert(a11);
1312             // fallthrough
1313 
1314             case 11: ptr[10].convert(a10);
1315             // fallthrough
1316 
1317             case 10: ptr[9].convert(a9);
1318             // fallthrough
1319 
1320             case 9: ptr[8].convert(a8);
1321             // fallthrough
1322 
1323             case 8: ptr[7].convert(a7);
1324             // fallthrough
1325 
1326             case 7: ptr[6].convert(a6);
1327             // fallthrough
1328 
1329             case 6: ptr[5].convert(a5);
1330             // fallthrough
1331 
1332             case 5: ptr[4].convert(a4);
1333             // fallthrough
1334 
1335             case 4: ptr[3].convert(a3);
1336             // fallthrough
1337 
1338             case 3: ptr[2].convert(a2);
1339             // fallthrough
1340 
1341             case 2: ptr[1].convert(a1);
1342             // fallthrough
1343 
1344             case 1: ptr[0].convert(a0);
1345             // fallthrough
1346 
1347             }
1348         }
1349     }
1350     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
1351     {
1352         o->type = msgpack::type::ARRAY;
1353         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*16, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
1354         o->via.array.size = 16;
1355 
1356         o->via.array.ptr[0] = msgpack::object(a0, z);
1357         o->via.array.ptr[1] = msgpack::object(a1, z);
1358         o->via.array.ptr[2] = msgpack::object(a2, z);
1359         o->via.array.ptr[3] = msgpack::object(a3, z);
1360         o->via.array.ptr[4] = msgpack::object(a4, z);
1361         o->via.array.ptr[5] = msgpack::object(a5, z);
1362         o->via.array.ptr[6] = msgpack::object(a6, z);
1363         o->via.array.ptr[7] = msgpack::object(a7, z);
1364         o->via.array.ptr[8] = msgpack::object(a8, z);
1365         o->via.array.ptr[9] = msgpack::object(a9, z);
1366         o->via.array.ptr[10] = msgpack::object(a10, z);
1367         o->via.array.ptr[11] = msgpack::object(a11, z);
1368         o->via.array.ptr[12] = msgpack::object(a12, z);
1369         o->via.array.ptr[13] = msgpack::object(a13, z);
1370         o->via.array.ptr[14] = msgpack::object(a14, z);
1371         o->via.array.ptr[15] = msgpack::object(a15, z);
1372     }
1373 
1374     A0& a0;
1375     A1& a1;
1376     A2& a2;
1377     A3& a3;
1378     A4& a4;
1379     A5& a5;
1380     A6& a6;
1381     A7& a7;
1382     A8& a8;
1383     A9& a9;
1384     A10& a10;
1385     A11& a11;
1386     A12& a12;
1387     A13& a13;
1388     A14& a14;
1389     A15& a15;
1390 };
1391 
1392 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>
1393 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> {
1394     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> value_type;
1395     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> tuple_type;
1396     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) :
1397         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) {}
1398     template <typename Packer>
1399     void msgpack_pack(Packer& pk) const
1400     {
1401         pk.pack_array(17);
1402 
1403         pk.pack(a0);
1404         pk.pack(a1);
1405         pk.pack(a2);
1406         pk.pack(a3);
1407         pk.pack(a4);
1408         pk.pack(a5);
1409         pk.pack(a6);
1410         pk.pack(a7);
1411         pk.pack(a8);
1412         pk.pack(a9);
1413         pk.pack(a10);
1414         pk.pack(a11);
1415         pk.pack(a12);
1416         pk.pack(a13);
1417         pk.pack(a14);
1418         pk.pack(a15);
1419         pk.pack(a16);
1420     }
1421     void msgpack_unpack(msgpack::object const& o)
1422     {
1423         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
1424         const size_t size = o.via.array.size;
1425         if(size > 0) {
1426             msgpack::object *ptr = o.via.array.ptr;
1427             switch(size) {
1428             default:
1429             case 17: ptr[16].convert(a16);
1430             // fallthrough
1431 
1432             case 16: ptr[15].convert(a15);
1433             // fallthrough
1434 
1435             case 15: ptr[14].convert(a14);
1436             // fallthrough
1437 
1438             case 14: ptr[13].convert(a13);
1439             // fallthrough
1440 
1441             case 13: ptr[12].convert(a12);
1442             // fallthrough
1443 
1444             case 12: ptr[11].convert(a11);
1445             // fallthrough
1446 
1447             case 11: ptr[10].convert(a10);
1448             // fallthrough
1449 
1450             case 10: ptr[9].convert(a9);
1451             // fallthrough
1452 
1453             case 9: ptr[8].convert(a8);
1454             // fallthrough
1455 
1456             case 8: ptr[7].convert(a7);
1457             // fallthrough
1458 
1459             case 7: ptr[6].convert(a6);
1460             // fallthrough
1461 
1462             case 6: ptr[5].convert(a5);
1463             // fallthrough
1464 
1465             case 5: ptr[4].convert(a4);
1466             // fallthrough
1467 
1468             case 4: ptr[3].convert(a3);
1469             // fallthrough
1470 
1471             case 3: ptr[2].convert(a2);
1472             // fallthrough
1473 
1474             case 2: ptr[1].convert(a1);
1475             // fallthrough
1476 
1477             case 1: ptr[0].convert(a0);
1478             // fallthrough
1479 
1480             }
1481         }
1482     }
1483     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
1484     {
1485         o->type = msgpack::type::ARRAY;
1486         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*17, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
1487         o->via.array.size = 17;
1488 
1489         o->via.array.ptr[0] = msgpack::object(a0, z);
1490         o->via.array.ptr[1] = msgpack::object(a1, z);
1491         o->via.array.ptr[2] = msgpack::object(a2, z);
1492         o->via.array.ptr[3] = msgpack::object(a3, z);
1493         o->via.array.ptr[4] = msgpack::object(a4, z);
1494         o->via.array.ptr[5] = msgpack::object(a5, z);
1495         o->via.array.ptr[6] = msgpack::object(a6, z);
1496         o->via.array.ptr[7] = msgpack::object(a7, z);
1497         o->via.array.ptr[8] = msgpack::object(a8, z);
1498         o->via.array.ptr[9] = msgpack::object(a9, z);
1499         o->via.array.ptr[10] = msgpack::object(a10, z);
1500         o->via.array.ptr[11] = msgpack::object(a11, z);
1501         o->via.array.ptr[12] = msgpack::object(a12, z);
1502         o->via.array.ptr[13] = msgpack::object(a13, z);
1503         o->via.array.ptr[14] = msgpack::object(a14, z);
1504         o->via.array.ptr[15] = msgpack::object(a15, z);
1505         o->via.array.ptr[16] = msgpack::object(a16, z);
1506     }
1507 
1508     A0& a0;
1509     A1& a1;
1510     A2& a2;
1511     A3& a3;
1512     A4& a4;
1513     A5& a5;
1514     A6& a6;
1515     A7& a7;
1516     A8& a8;
1517     A9& a9;
1518     A10& a10;
1519     A11& a11;
1520     A12& a12;
1521     A13& a13;
1522     A14& a14;
1523     A15& a15;
1524     A16& a16;
1525 };
1526 
1527 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>
1528 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> {
1529     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> value_type;
1530     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> tuple_type;
1531     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) :
1532         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) {}
1533     template <typename Packer>
1534     void msgpack_pack(Packer& pk) const
1535     {
1536         pk.pack_array(18);
1537 
1538         pk.pack(a0);
1539         pk.pack(a1);
1540         pk.pack(a2);
1541         pk.pack(a3);
1542         pk.pack(a4);
1543         pk.pack(a5);
1544         pk.pack(a6);
1545         pk.pack(a7);
1546         pk.pack(a8);
1547         pk.pack(a9);
1548         pk.pack(a10);
1549         pk.pack(a11);
1550         pk.pack(a12);
1551         pk.pack(a13);
1552         pk.pack(a14);
1553         pk.pack(a15);
1554         pk.pack(a16);
1555         pk.pack(a17);
1556     }
1557     void msgpack_unpack(msgpack::object const& o)
1558     {
1559         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
1560         const size_t size = o.via.array.size;
1561         if(size > 0) {
1562             msgpack::object *ptr = o.via.array.ptr;
1563             switch(size) {
1564             default:
1565             case 18: ptr[17].convert(a17);
1566             // fallthrough
1567 
1568             case 17: ptr[16].convert(a16);
1569             // fallthrough
1570 
1571             case 16: ptr[15].convert(a15);
1572             // fallthrough
1573 
1574             case 15: ptr[14].convert(a14);
1575             // fallthrough
1576 
1577             case 14: ptr[13].convert(a13);
1578             // fallthrough
1579 
1580             case 13: ptr[12].convert(a12);
1581             // fallthrough
1582 
1583             case 12: ptr[11].convert(a11);
1584             // fallthrough
1585 
1586             case 11: ptr[10].convert(a10);
1587             // fallthrough
1588 
1589             case 10: ptr[9].convert(a9);
1590             // fallthrough
1591 
1592             case 9: ptr[8].convert(a8);
1593             // fallthrough
1594 
1595             case 8: ptr[7].convert(a7);
1596             // fallthrough
1597 
1598             case 7: ptr[6].convert(a6);
1599             // fallthrough
1600 
1601             case 6: ptr[5].convert(a5);
1602             // fallthrough
1603 
1604             case 5: ptr[4].convert(a4);
1605             // fallthrough
1606 
1607             case 4: ptr[3].convert(a3);
1608             // fallthrough
1609 
1610             case 3: ptr[2].convert(a2);
1611             // fallthrough
1612 
1613             case 2: ptr[1].convert(a1);
1614             // fallthrough
1615 
1616             case 1: ptr[0].convert(a0);
1617             // fallthrough
1618 
1619             }
1620         }
1621     }
1622     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
1623     {
1624         o->type = msgpack::type::ARRAY;
1625         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*18, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
1626         o->via.array.size = 18;
1627 
1628         o->via.array.ptr[0] = msgpack::object(a0, z);
1629         o->via.array.ptr[1] = msgpack::object(a1, z);
1630         o->via.array.ptr[2] = msgpack::object(a2, z);
1631         o->via.array.ptr[3] = msgpack::object(a3, z);
1632         o->via.array.ptr[4] = msgpack::object(a4, z);
1633         o->via.array.ptr[5] = msgpack::object(a5, z);
1634         o->via.array.ptr[6] = msgpack::object(a6, z);
1635         o->via.array.ptr[7] = msgpack::object(a7, z);
1636         o->via.array.ptr[8] = msgpack::object(a8, z);
1637         o->via.array.ptr[9] = msgpack::object(a9, z);
1638         o->via.array.ptr[10] = msgpack::object(a10, z);
1639         o->via.array.ptr[11] = msgpack::object(a11, z);
1640         o->via.array.ptr[12] = msgpack::object(a12, z);
1641         o->via.array.ptr[13] = msgpack::object(a13, z);
1642         o->via.array.ptr[14] = msgpack::object(a14, z);
1643         o->via.array.ptr[15] = msgpack::object(a15, z);
1644         o->via.array.ptr[16] = msgpack::object(a16, z);
1645         o->via.array.ptr[17] = msgpack::object(a17, z);
1646     }
1647 
1648     A0& a0;
1649     A1& a1;
1650     A2& a2;
1651     A3& a3;
1652     A4& a4;
1653     A5& a5;
1654     A6& a6;
1655     A7& a7;
1656     A8& a8;
1657     A9& a9;
1658     A10& a10;
1659     A11& a11;
1660     A12& a12;
1661     A13& a13;
1662     A14& a14;
1663     A15& a15;
1664     A16& a16;
1665     A17& a17;
1666 };
1667 
1668 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>
1669 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> {
1670     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> value_type;
1671     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> tuple_type;
1672     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) :
1673         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) {}
1674     template <typename Packer>
1675     void msgpack_pack(Packer& pk) const
1676     {
1677         pk.pack_array(19);
1678 
1679         pk.pack(a0);
1680         pk.pack(a1);
1681         pk.pack(a2);
1682         pk.pack(a3);
1683         pk.pack(a4);
1684         pk.pack(a5);
1685         pk.pack(a6);
1686         pk.pack(a7);
1687         pk.pack(a8);
1688         pk.pack(a9);
1689         pk.pack(a10);
1690         pk.pack(a11);
1691         pk.pack(a12);
1692         pk.pack(a13);
1693         pk.pack(a14);
1694         pk.pack(a15);
1695         pk.pack(a16);
1696         pk.pack(a17);
1697         pk.pack(a18);
1698     }
1699     void msgpack_unpack(msgpack::object const& o)
1700     {
1701         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
1702         const size_t size = o.via.array.size;
1703         if(size > 0) {
1704             msgpack::object *ptr = o.via.array.ptr;
1705             switch(size) {
1706             default:
1707             case 19: ptr[18].convert(a18);
1708             // fallthrough
1709 
1710             case 18: ptr[17].convert(a17);
1711             // fallthrough
1712 
1713             case 17: ptr[16].convert(a16);
1714             // fallthrough
1715 
1716             case 16: ptr[15].convert(a15);
1717             // fallthrough
1718 
1719             case 15: ptr[14].convert(a14);
1720             // fallthrough
1721 
1722             case 14: ptr[13].convert(a13);
1723             // fallthrough
1724 
1725             case 13: ptr[12].convert(a12);
1726             // fallthrough
1727 
1728             case 12: ptr[11].convert(a11);
1729             // fallthrough
1730 
1731             case 11: ptr[10].convert(a10);
1732             // fallthrough
1733 
1734             case 10: ptr[9].convert(a9);
1735             // fallthrough
1736 
1737             case 9: ptr[8].convert(a8);
1738             // fallthrough
1739 
1740             case 8: ptr[7].convert(a7);
1741             // fallthrough
1742 
1743             case 7: ptr[6].convert(a6);
1744             // fallthrough
1745 
1746             case 6: ptr[5].convert(a5);
1747             // fallthrough
1748 
1749             case 5: ptr[4].convert(a4);
1750             // fallthrough
1751 
1752             case 4: ptr[3].convert(a3);
1753             // fallthrough
1754 
1755             case 3: ptr[2].convert(a2);
1756             // fallthrough
1757 
1758             case 2: ptr[1].convert(a1);
1759             // fallthrough
1760 
1761             case 1: ptr[0].convert(a0);
1762             // fallthrough
1763 
1764             }
1765         }
1766     }
1767     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
1768     {
1769         o->type = msgpack::type::ARRAY;
1770         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*19, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
1771         o->via.array.size = 19;
1772 
1773         o->via.array.ptr[0] = msgpack::object(a0, z);
1774         o->via.array.ptr[1] = msgpack::object(a1, z);
1775         o->via.array.ptr[2] = msgpack::object(a2, z);
1776         o->via.array.ptr[3] = msgpack::object(a3, z);
1777         o->via.array.ptr[4] = msgpack::object(a4, z);
1778         o->via.array.ptr[5] = msgpack::object(a5, z);
1779         o->via.array.ptr[6] = msgpack::object(a6, z);
1780         o->via.array.ptr[7] = msgpack::object(a7, z);
1781         o->via.array.ptr[8] = msgpack::object(a8, z);
1782         o->via.array.ptr[9] = msgpack::object(a9, z);
1783         o->via.array.ptr[10] = msgpack::object(a10, z);
1784         o->via.array.ptr[11] = msgpack::object(a11, z);
1785         o->via.array.ptr[12] = msgpack::object(a12, z);
1786         o->via.array.ptr[13] = msgpack::object(a13, z);
1787         o->via.array.ptr[14] = msgpack::object(a14, z);
1788         o->via.array.ptr[15] = msgpack::object(a15, z);
1789         o->via.array.ptr[16] = msgpack::object(a16, z);
1790         o->via.array.ptr[17] = msgpack::object(a17, z);
1791         o->via.array.ptr[18] = msgpack::object(a18, z);
1792     }
1793 
1794     A0& a0;
1795     A1& a1;
1796     A2& a2;
1797     A3& a3;
1798     A4& a4;
1799     A5& a5;
1800     A6& a6;
1801     A7& a7;
1802     A8& a8;
1803     A9& a9;
1804     A10& a10;
1805     A11& a11;
1806     A12& a12;
1807     A13& a13;
1808     A14& a14;
1809     A15& a15;
1810     A16& a16;
1811     A17& a17;
1812     A18& a18;
1813 };
1814 
1815 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>
1816 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> {
1817     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;
1818     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> tuple_type;
1819     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) :
1820         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) {}
1821     template <typename Packer>
1822     void msgpack_pack(Packer& pk) const
1823     {
1824         pk.pack_array(20);
1825 
1826         pk.pack(a0);
1827         pk.pack(a1);
1828         pk.pack(a2);
1829         pk.pack(a3);
1830         pk.pack(a4);
1831         pk.pack(a5);
1832         pk.pack(a6);
1833         pk.pack(a7);
1834         pk.pack(a8);
1835         pk.pack(a9);
1836         pk.pack(a10);
1837         pk.pack(a11);
1838         pk.pack(a12);
1839         pk.pack(a13);
1840         pk.pack(a14);
1841         pk.pack(a15);
1842         pk.pack(a16);
1843         pk.pack(a17);
1844         pk.pack(a18);
1845         pk.pack(a19);
1846     }
1847     void msgpack_unpack(msgpack::object const& o)
1848     {
1849         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
1850         const size_t size = o.via.array.size;
1851         if(size > 0) {
1852             msgpack::object *ptr = o.via.array.ptr;
1853             switch(size) {
1854             default:
1855             case 20: ptr[19].convert(a19);
1856             // fallthrough
1857 
1858             case 19: ptr[18].convert(a18);
1859             // fallthrough
1860 
1861             case 18: ptr[17].convert(a17);
1862             // fallthrough
1863 
1864             case 17: ptr[16].convert(a16);
1865             // fallthrough
1866 
1867             case 16: ptr[15].convert(a15);
1868             // fallthrough
1869 
1870             case 15: ptr[14].convert(a14);
1871             // fallthrough
1872 
1873             case 14: ptr[13].convert(a13);
1874             // fallthrough
1875 
1876             case 13: ptr[12].convert(a12);
1877             // fallthrough
1878 
1879             case 12: ptr[11].convert(a11);
1880             // fallthrough
1881 
1882             case 11: ptr[10].convert(a10);
1883             // fallthrough
1884 
1885             case 10: ptr[9].convert(a9);
1886             // fallthrough
1887 
1888             case 9: ptr[8].convert(a8);
1889             // fallthrough
1890 
1891             case 8: ptr[7].convert(a7);
1892             // fallthrough
1893 
1894             case 7: ptr[6].convert(a6);
1895             // fallthrough
1896 
1897             case 6: ptr[5].convert(a5);
1898             // fallthrough
1899 
1900             case 5: ptr[4].convert(a4);
1901             // fallthrough
1902 
1903             case 4: ptr[3].convert(a3);
1904             // fallthrough
1905 
1906             case 3: ptr[2].convert(a2);
1907             // fallthrough
1908 
1909             case 2: ptr[1].convert(a1);
1910             // fallthrough
1911 
1912             case 1: ptr[0].convert(a0);
1913             // fallthrough
1914 
1915             }
1916         }
1917     }
1918     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
1919     {
1920         o->type = msgpack::type::ARRAY;
1921         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*20, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
1922         o->via.array.size = 20;
1923 
1924         o->via.array.ptr[0] = msgpack::object(a0, z);
1925         o->via.array.ptr[1] = msgpack::object(a1, z);
1926         o->via.array.ptr[2] = msgpack::object(a2, z);
1927         o->via.array.ptr[3] = msgpack::object(a3, z);
1928         o->via.array.ptr[4] = msgpack::object(a4, z);
1929         o->via.array.ptr[5] = msgpack::object(a5, z);
1930         o->via.array.ptr[6] = msgpack::object(a6, z);
1931         o->via.array.ptr[7] = msgpack::object(a7, z);
1932         o->via.array.ptr[8] = msgpack::object(a8, z);
1933         o->via.array.ptr[9] = msgpack::object(a9, z);
1934         o->via.array.ptr[10] = msgpack::object(a10, z);
1935         o->via.array.ptr[11] = msgpack::object(a11, z);
1936         o->via.array.ptr[12] = msgpack::object(a12, z);
1937         o->via.array.ptr[13] = msgpack::object(a13, z);
1938         o->via.array.ptr[14] = msgpack::object(a14, z);
1939         o->via.array.ptr[15] = msgpack::object(a15, z);
1940         o->via.array.ptr[16] = msgpack::object(a16, z);
1941         o->via.array.ptr[17] = msgpack::object(a17, z);
1942         o->via.array.ptr[18] = msgpack::object(a18, z);
1943         o->via.array.ptr[19] = msgpack::object(a19, z);
1944     }
1945 
1946     A0& a0;
1947     A1& a1;
1948     A2& a2;
1949     A3& a3;
1950     A4& a4;
1951     A5& a5;
1952     A6& a6;
1953     A7& a7;
1954     A8& a8;
1955     A9& a9;
1956     A10& a10;
1957     A11& a11;
1958     A12& a12;
1959     A13& a13;
1960     A14& a14;
1961     A15& a15;
1962     A16& a16;
1963     A17& a17;
1964     A18& a18;
1965     A19& a19;
1966 };
1967 
1968 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>
1969 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> {
1970     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;
1971     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;
1972     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) :
1973         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) {}
1974     template <typename Packer>
1975     void msgpack_pack(Packer& pk) const
1976     {
1977         pk.pack_array(21);
1978 
1979         pk.pack(a0);
1980         pk.pack(a1);
1981         pk.pack(a2);
1982         pk.pack(a3);
1983         pk.pack(a4);
1984         pk.pack(a5);
1985         pk.pack(a6);
1986         pk.pack(a7);
1987         pk.pack(a8);
1988         pk.pack(a9);
1989         pk.pack(a10);
1990         pk.pack(a11);
1991         pk.pack(a12);
1992         pk.pack(a13);
1993         pk.pack(a14);
1994         pk.pack(a15);
1995         pk.pack(a16);
1996         pk.pack(a17);
1997         pk.pack(a18);
1998         pk.pack(a19);
1999         pk.pack(a20);
2000     }
2001     void msgpack_unpack(msgpack::object const& o)
2002     {
2003         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
2004         const size_t size = o.via.array.size;
2005         if(size > 0) {
2006             msgpack::object *ptr = o.via.array.ptr;
2007             switch(size) {
2008             default:
2009             case 21: ptr[20].convert(a20);
2010             // fallthrough
2011 
2012             case 20: ptr[19].convert(a19);
2013             // fallthrough
2014 
2015             case 19: ptr[18].convert(a18);
2016             // fallthrough
2017 
2018             case 18: ptr[17].convert(a17);
2019             // fallthrough
2020 
2021             case 17: ptr[16].convert(a16);
2022             // fallthrough
2023 
2024             case 16: ptr[15].convert(a15);
2025             // fallthrough
2026 
2027             case 15: ptr[14].convert(a14);
2028             // fallthrough
2029 
2030             case 14: ptr[13].convert(a13);
2031             // fallthrough
2032 
2033             case 13: ptr[12].convert(a12);
2034             // fallthrough
2035 
2036             case 12: ptr[11].convert(a11);
2037             // fallthrough
2038 
2039             case 11: ptr[10].convert(a10);
2040             // fallthrough
2041 
2042             case 10: ptr[9].convert(a9);
2043             // fallthrough
2044 
2045             case 9: ptr[8].convert(a8);
2046             // fallthrough
2047 
2048             case 8: ptr[7].convert(a7);
2049             // fallthrough
2050 
2051             case 7: ptr[6].convert(a6);
2052             // fallthrough
2053 
2054             case 6: ptr[5].convert(a5);
2055             // fallthrough
2056 
2057             case 5: ptr[4].convert(a4);
2058             // fallthrough
2059 
2060             case 4: ptr[3].convert(a3);
2061             // fallthrough
2062 
2063             case 3: ptr[2].convert(a2);
2064             // fallthrough
2065 
2066             case 2: ptr[1].convert(a1);
2067             // fallthrough
2068 
2069             case 1: ptr[0].convert(a0);
2070             // fallthrough
2071 
2072             }
2073         }
2074     }
2075     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
2076     {
2077         o->type = msgpack::type::ARRAY;
2078         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*21, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
2079         o->via.array.size = 21;
2080 
2081         o->via.array.ptr[0] = msgpack::object(a0, z);
2082         o->via.array.ptr[1] = msgpack::object(a1, z);
2083         o->via.array.ptr[2] = msgpack::object(a2, z);
2084         o->via.array.ptr[3] = msgpack::object(a3, z);
2085         o->via.array.ptr[4] = msgpack::object(a4, z);
2086         o->via.array.ptr[5] = msgpack::object(a5, z);
2087         o->via.array.ptr[6] = msgpack::object(a6, z);
2088         o->via.array.ptr[7] = msgpack::object(a7, z);
2089         o->via.array.ptr[8] = msgpack::object(a8, z);
2090         o->via.array.ptr[9] = msgpack::object(a9, z);
2091         o->via.array.ptr[10] = msgpack::object(a10, z);
2092         o->via.array.ptr[11] = msgpack::object(a11, z);
2093         o->via.array.ptr[12] = msgpack::object(a12, z);
2094         o->via.array.ptr[13] = msgpack::object(a13, z);
2095         o->via.array.ptr[14] = msgpack::object(a14, z);
2096         o->via.array.ptr[15] = msgpack::object(a15, z);
2097         o->via.array.ptr[16] = msgpack::object(a16, z);
2098         o->via.array.ptr[17] = msgpack::object(a17, z);
2099         o->via.array.ptr[18] = msgpack::object(a18, z);
2100         o->via.array.ptr[19] = msgpack::object(a19, z);
2101         o->via.array.ptr[20] = msgpack::object(a20, z);
2102     }
2103 
2104     A0& a0;
2105     A1& a1;
2106     A2& a2;
2107     A3& a3;
2108     A4& a4;
2109     A5& a5;
2110     A6& a6;
2111     A7& a7;
2112     A8& a8;
2113     A9& a9;
2114     A10& a10;
2115     A11& a11;
2116     A12& a12;
2117     A13& a13;
2118     A14& a14;
2119     A15& a15;
2120     A16& a16;
2121     A17& a17;
2122     A18& a18;
2123     A19& a19;
2124     A20& a20;
2125 };
2126 
2127 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>
2128 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> {
2129     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;
2130     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;
2131     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) :
2132         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) {}
2133     template <typename Packer>
2134     void msgpack_pack(Packer& pk) const
2135     {
2136         pk.pack_array(22);
2137 
2138         pk.pack(a0);
2139         pk.pack(a1);
2140         pk.pack(a2);
2141         pk.pack(a3);
2142         pk.pack(a4);
2143         pk.pack(a5);
2144         pk.pack(a6);
2145         pk.pack(a7);
2146         pk.pack(a8);
2147         pk.pack(a9);
2148         pk.pack(a10);
2149         pk.pack(a11);
2150         pk.pack(a12);
2151         pk.pack(a13);
2152         pk.pack(a14);
2153         pk.pack(a15);
2154         pk.pack(a16);
2155         pk.pack(a17);
2156         pk.pack(a18);
2157         pk.pack(a19);
2158         pk.pack(a20);
2159         pk.pack(a21);
2160     }
2161     void msgpack_unpack(msgpack::object const& o)
2162     {
2163         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
2164         const size_t size = o.via.array.size;
2165         if(size > 0) {
2166             msgpack::object *ptr = o.via.array.ptr;
2167             switch(size) {
2168             default:
2169             case 22: ptr[21].convert(a21);
2170             // fallthrough
2171 
2172             case 21: ptr[20].convert(a20);
2173             // fallthrough
2174 
2175             case 20: ptr[19].convert(a19);
2176             // fallthrough
2177 
2178             case 19: ptr[18].convert(a18);
2179             // fallthrough
2180 
2181             case 18: ptr[17].convert(a17);
2182             // fallthrough
2183 
2184             case 17: ptr[16].convert(a16);
2185             // fallthrough
2186 
2187             case 16: ptr[15].convert(a15);
2188             // fallthrough
2189 
2190             case 15: ptr[14].convert(a14);
2191             // fallthrough
2192 
2193             case 14: ptr[13].convert(a13);
2194             // fallthrough
2195 
2196             case 13: ptr[12].convert(a12);
2197             // fallthrough
2198 
2199             case 12: ptr[11].convert(a11);
2200             // fallthrough
2201 
2202             case 11: ptr[10].convert(a10);
2203             // fallthrough
2204 
2205             case 10: ptr[9].convert(a9);
2206             // fallthrough
2207 
2208             case 9: ptr[8].convert(a8);
2209             // fallthrough
2210 
2211             case 8: ptr[7].convert(a7);
2212             // fallthrough
2213 
2214             case 7: ptr[6].convert(a6);
2215             // fallthrough
2216 
2217             case 6: ptr[5].convert(a5);
2218             // fallthrough
2219 
2220             case 5: ptr[4].convert(a4);
2221             // fallthrough
2222 
2223             case 4: ptr[3].convert(a3);
2224             // fallthrough
2225 
2226             case 3: ptr[2].convert(a2);
2227             // fallthrough
2228 
2229             case 2: ptr[1].convert(a1);
2230             // fallthrough
2231 
2232             case 1: ptr[0].convert(a0);
2233             // fallthrough
2234 
2235             }
2236         }
2237     }
2238     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
2239     {
2240         o->type = msgpack::type::ARRAY;
2241         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*22, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
2242         o->via.array.size = 22;
2243 
2244         o->via.array.ptr[0] = msgpack::object(a0, z);
2245         o->via.array.ptr[1] = msgpack::object(a1, z);
2246         o->via.array.ptr[2] = msgpack::object(a2, z);
2247         o->via.array.ptr[3] = msgpack::object(a3, z);
2248         o->via.array.ptr[4] = msgpack::object(a4, z);
2249         o->via.array.ptr[5] = msgpack::object(a5, z);
2250         o->via.array.ptr[6] = msgpack::object(a6, z);
2251         o->via.array.ptr[7] = msgpack::object(a7, z);
2252         o->via.array.ptr[8] = msgpack::object(a8, z);
2253         o->via.array.ptr[9] = msgpack::object(a9, z);
2254         o->via.array.ptr[10] = msgpack::object(a10, z);
2255         o->via.array.ptr[11] = msgpack::object(a11, z);
2256         o->via.array.ptr[12] = msgpack::object(a12, z);
2257         o->via.array.ptr[13] = msgpack::object(a13, z);
2258         o->via.array.ptr[14] = msgpack::object(a14, z);
2259         o->via.array.ptr[15] = msgpack::object(a15, z);
2260         o->via.array.ptr[16] = msgpack::object(a16, z);
2261         o->via.array.ptr[17] = msgpack::object(a17, z);
2262         o->via.array.ptr[18] = msgpack::object(a18, z);
2263         o->via.array.ptr[19] = msgpack::object(a19, z);
2264         o->via.array.ptr[20] = msgpack::object(a20, z);
2265         o->via.array.ptr[21] = msgpack::object(a21, z);
2266     }
2267 
2268     A0& a0;
2269     A1& a1;
2270     A2& a2;
2271     A3& a3;
2272     A4& a4;
2273     A5& a5;
2274     A6& a6;
2275     A7& a7;
2276     A8& a8;
2277     A9& a9;
2278     A10& a10;
2279     A11& a11;
2280     A12& a12;
2281     A13& a13;
2282     A14& a14;
2283     A15& a15;
2284     A16& a16;
2285     A17& a17;
2286     A18& a18;
2287     A19& a19;
2288     A20& a20;
2289     A21& a21;
2290 };
2291 
2292 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>
2293 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> {
2294     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;
2295     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;
2296     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) :
2297         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) {}
2298     template <typename Packer>
2299     void msgpack_pack(Packer& pk) const
2300     {
2301         pk.pack_array(23);
2302 
2303         pk.pack(a0);
2304         pk.pack(a1);
2305         pk.pack(a2);
2306         pk.pack(a3);
2307         pk.pack(a4);
2308         pk.pack(a5);
2309         pk.pack(a6);
2310         pk.pack(a7);
2311         pk.pack(a8);
2312         pk.pack(a9);
2313         pk.pack(a10);
2314         pk.pack(a11);
2315         pk.pack(a12);
2316         pk.pack(a13);
2317         pk.pack(a14);
2318         pk.pack(a15);
2319         pk.pack(a16);
2320         pk.pack(a17);
2321         pk.pack(a18);
2322         pk.pack(a19);
2323         pk.pack(a20);
2324         pk.pack(a21);
2325         pk.pack(a22);
2326     }
2327     void msgpack_unpack(msgpack::object const& o)
2328     {
2329         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
2330         const size_t size = o.via.array.size;
2331         if(size > 0) {
2332             msgpack::object *ptr = o.via.array.ptr;
2333             switch(size) {
2334             default:
2335             case 23: ptr[22].convert(a22);
2336             // fallthrough
2337 
2338             case 22: ptr[21].convert(a21);
2339             // fallthrough
2340 
2341             case 21: ptr[20].convert(a20);
2342             // fallthrough
2343 
2344             case 20: ptr[19].convert(a19);
2345             // fallthrough
2346 
2347             case 19: ptr[18].convert(a18);
2348             // fallthrough
2349 
2350             case 18: ptr[17].convert(a17);
2351             // fallthrough
2352 
2353             case 17: ptr[16].convert(a16);
2354             // fallthrough
2355 
2356             case 16: ptr[15].convert(a15);
2357             // fallthrough
2358 
2359             case 15: ptr[14].convert(a14);
2360             // fallthrough
2361 
2362             case 14: ptr[13].convert(a13);
2363             // fallthrough
2364 
2365             case 13: ptr[12].convert(a12);
2366             // fallthrough
2367 
2368             case 12: ptr[11].convert(a11);
2369             // fallthrough
2370 
2371             case 11: ptr[10].convert(a10);
2372             // fallthrough
2373 
2374             case 10: ptr[9].convert(a9);
2375             // fallthrough
2376 
2377             case 9: ptr[8].convert(a8);
2378             // fallthrough
2379 
2380             case 8: ptr[7].convert(a7);
2381             // fallthrough
2382 
2383             case 7: ptr[6].convert(a6);
2384             // fallthrough
2385 
2386             case 6: ptr[5].convert(a5);
2387             // fallthrough
2388 
2389             case 5: ptr[4].convert(a4);
2390             // fallthrough
2391 
2392             case 4: ptr[3].convert(a3);
2393             // fallthrough
2394 
2395             case 3: ptr[2].convert(a2);
2396             // fallthrough
2397 
2398             case 2: ptr[1].convert(a1);
2399             // fallthrough
2400 
2401             case 1: ptr[0].convert(a0);
2402             // fallthrough
2403 
2404             }
2405         }
2406     }
2407     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
2408     {
2409         o->type = msgpack::type::ARRAY;
2410         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*23, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
2411         o->via.array.size = 23;
2412 
2413         o->via.array.ptr[0] = msgpack::object(a0, z);
2414         o->via.array.ptr[1] = msgpack::object(a1, z);
2415         o->via.array.ptr[2] = msgpack::object(a2, z);
2416         o->via.array.ptr[3] = msgpack::object(a3, z);
2417         o->via.array.ptr[4] = msgpack::object(a4, z);
2418         o->via.array.ptr[5] = msgpack::object(a5, z);
2419         o->via.array.ptr[6] = msgpack::object(a6, z);
2420         o->via.array.ptr[7] = msgpack::object(a7, z);
2421         o->via.array.ptr[8] = msgpack::object(a8, z);
2422         o->via.array.ptr[9] = msgpack::object(a9, z);
2423         o->via.array.ptr[10] = msgpack::object(a10, z);
2424         o->via.array.ptr[11] = msgpack::object(a11, z);
2425         o->via.array.ptr[12] = msgpack::object(a12, z);
2426         o->via.array.ptr[13] = msgpack::object(a13, z);
2427         o->via.array.ptr[14] = msgpack::object(a14, z);
2428         o->via.array.ptr[15] = msgpack::object(a15, z);
2429         o->via.array.ptr[16] = msgpack::object(a16, z);
2430         o->via.array.ptr[17] = msgpack::object(a17, z);
2431         o->via.array.ptr[18] = msgpack::object(a18, z);
2432         o->via.array.ptr[19] = msgpack::object(a19, z);
2433         o->via.array.ptr[20] = msgpack::object(a20, z);
2434         o->via.array.ptr[21] = msgpack::object(a21, z);
2435         o->via.array.ptr[22] = msgpack::object(a22, z);
2436     }
2437 
2438     A0& a0;
2439     A1& a1;
2440     A2& a2;
2441     A3& a3;
2442     A4& a4;
2443     A5& a5;
2444     A6& a6;
2445     A7& a7;
2446     A8& a8;
2447     A9& a9;
2448     A10& a10;
2449     A11& a11;
2450     A12& a12;
2451     A13& a13;
2452     A14& a14;
2453     A15& a15;
2454     A16& a16;
2455     A17& a17;
2456     A18& a18;
2457     A19& a19;
2458     A20& a20;
2459     A21& a21;
2460     A22& a22;
2461 };
2462 
2463 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>
2464 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> {
2465     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;
2466     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;
2467     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) :
2468         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) {}
2469     template <typename Packer>
2470     void msgpack_pack(Packer& pk) const
2471     {
2472         pk.pack_array(24);
2473 
2474         pk.pack(a0);
2475         pk.pack(a1);
2476         pk.pack(a2);
2477         pk.pack(a3);
2478         pk.pack(a4);
2479         pk.pack(a5);
2480         pk.pack(a6);
2481         pk.pack(a7);
2482         pk.pack(a8);
2483         pk.pack(a9);
2484         pk.pack(a10);
2485         pk.pack(a11);
2486         pk.pack(a12);
2487         pk.pack(a13);
2488         pk.pack(a14);
2489         pk.pack(a15);
2490         pk.pack(a16);
2491         pk.pack(a17);
2492         pk.pack(a18);
2493         pk.pack(a19);
2494         pk.pack(a20);
2495         pk.pack(a21);
2496         pk.pack(a22);
2497         pk.pack(a23);
2498     }
2499     void msgpack_unpack(msgpack::object const& o)
2500     {
2501         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
2502         const size_t size = o.via.array.size;
2503         if(size > 0) {
2504             msgpack::object *ptr = o.via.array.ptr;
2505             switch(size) {
2506             default:
2507             case 24: ptr[23].convert(a23);
2508             // fallthrough
2509 
2510             case 23: ptr[22].convert(a22);
2511             // fallthrough
2512 
2513             case 22: ptr[21].convert(a21);
2514             // fallthrough
2515 
2516             case 21: ptr[20].convert(a20);
2517             // fallthrough
2518 
2519             case 20: ptr[19].convert(a19);
2520             // fallthrough
2521 
2522             case 19: ptr[18].convert(a18);
2523             // fallthrough
2524 
2525             case 18: ptr[17].convert(a17);
2526             // fallthrough
2527 
2528             case 17: ptr[16].convert(a16);
2529             // fallthrough
2530 
2531             case 16: ptr[15].convert(a15);
2532             // fallthrough
2533 
2534             case 15: ptr[14].convert(a14);
2535             // fallthrough
2536 
2537             case 14: ptr[13].convert(a13);
2538             // fallthrough
2539 
2540             case 13: ptr[12].convert(a12);
2541             // fallthrough
2542 
2543             case 12: ptr[11].convert(a11);
2544             // fallthrough
2545 
2546             case 11: ptr[10].convert(a10);
2547             // fallthrough
2548 
2549             case 10: ptr[9].convert(a9);
2550             // fallthrough
2551 
2552             case 9: ptr[8].convert(a8);
2553             // fallthrough
2554 
2555             case 8: ptr[7].convert(a7);
2556             // fallthrough
2557 
2558             case 7: ptr[6].convert(a6);
2559             // fallthrough
2560 
2561             case 6: ptr[5].convert(a5);
2562             // fallthrough
2563 
2564             case 5: ptr[4].convert(a4);
2565             // fallthrough
2566 
2567             case 4: ptr[3].convert(a3);
2568             // fallthrough
2569 
2570             case 3: ptr[2].convert(a2);
2571             // fallthrough
2572 
2573             case 2: ptr[1].convert(a1);
2574             // fallthrough
2575 
2576             case 1: ptr[0].convert(a0);
2577             // fallthrough
2578 
2579             }
2580         }
2581     }
2582     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
2583     {
2584         o->type = msgpack::type::ARRAY;
2585         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*24, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
2586         o->via.array.size = 24;
2587 
2588         o->via.array.ptr[0] = msgpack::object(a0, z);
2589         o->via.array.ptr[1] = msgpack::object(a1, z);
2590         o->via.array.ptr[2] = msgpack::object(a2, z);
2591         o->via.array.ptr[3] = msgpack::object(a3, z);
2592         o->via.array.ptr[4] = msgpack::object(a4, z);
2593         o->via.array.ptr[5] = msgpack::object(a5, z);
2594         o->via.array.ptr[6] = msgpack::object(a6, z);
2595         o->via.array.ptr[7] = msgpack::object(a7, z);
2596         o->via.array.ptr[8] = msgpack::object(a8, z);
2597         o->via.array.ptr[9] = msgpack::object(a9, z);
2598         o->via.array.ptr[10] = msgpack::object(a10, z);
2599         o->via.array.ptr[11] = msgpack::object(a11, z);
2600         o->via.array.ptr[12] = msgpack::object(a12, z);
2601         o->via.array.ptr[13] = msgpack::object(a13, z);
2602         o->via.array.ptr[14] = msgpack::object(a14, z);
2603         o->via.array.ptr[15] = msgpack::object(a15, z);
2604         o->via.array.ptr[16] = msgpack::object(a16, z);
2605         o->via.array.ptr[17] = msgpack::object(a17, z);
2606         o->via.array.ptr[18] = msgpack::object(a18, z);
2607         o->via.array.ptr[19] = msgpack::object(a19, z);
2608         o->via.array.ptr[20] = msgpack::object(a20, z);
2609         o->via.array.ptr[21] = msgpack::object(a21, z);
2610         o->via.array.ptr[22] = msgpack::object(a22, z);
2611         o->via.array.ptr[23] = msgpack::object(a23, z);
2612     }
2613 
2614     A0& a0;
2615     A1& a1;
2616     A2& a2;
2617     A3& a3;
2618     A4& a4;
2619     A5& a5;
2620     A6& a6;
2621     A7& a7;
2622     A8& a8;
2623     A9& a9;
2624     A10& a10;
2625     A11& a11;
2626     A12& a12;
2627     A13& a13;
2628     A14& a14;
2629     A15& a15;
2630     A16& a16;
2631     A17& a17;
2632     A18& a18;
2633     A19& a19;
2634     A20& a20;
2635     A21& a21;
2636     A22& a22;
2637     A23& a23;
2638 };
2639 
2640 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>
2641 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> {
2642     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;
2643     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;
2644     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) :
2645         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) {}
2646     template <typename Packer>
2647     void msgpack_pack(Packer& pk) const
2648     {
2649         pk.pack_array(25);
2650 
2651         pk.pack(a0);
2652         pk.pack(a1);
2653         pk.pack(a2);
2654         pk.pack(a3);
2655         pk.pack(a4);
2656         pk.pack(a5);
2657         pk.pack(a6);
2658         pk.pack(a7);
2659         pk.pack(a8);
2660         pk.pack(a9);
2661         pk.pack(a10);
2662         pk.pack(a11);
2663         pk.pack(a12);
2664         pk.pack(a13);
2665         pk.pack(a14);
2666         pk.pack(a15);
2667         pk.pack(a16);
2668         pk.pack(a17);
2669         pk.pack(a18);
2670         pk.pack(a19);
2671         pk.pack(a20);
2672         pk.pack(a21);
2673         pk.pack(a22);
2674         pk.pack(a23);
2675         pk.pack(a24);
2676     }
2677     void msgpack_unpack(msgpack::object const& o)
2678     {
2679         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
2680         const size_t size = o.via.array.size;
2681         if(size > 0) {
2682             msgpack::object *ptr = o.via.array.ptr;
2683             switch(size) {
2684             default:
2685             case 25: ptr[24].convert(a24);
2686             // fallthrough
2687 
2688             case 24: ptr[23].convert(a23);
2689             // fallthrough
2690 
2691             case 23: ptr[22].convert(a22);
2692             // fallthrough
2693 
2694             case 22: ptr[21].convert(a21);
2695             // fallthrough
2696 
2697             case 21: ptr[20].convert(a20);
2698             // fallthrough
2699 
2700             case 20: ptr[19].convert(a19);
2701             // fallthrough
2702 
2703             case 19: ptr[18].convert(a18);
2704             // fallthrough
2705 
2706             case 18: ptr[17].convert(a17);
2707             // fallthrough
2708 
2709             case 17: ptr[16].convert(a16);
2710             // fallthrough
2711 
2712             case 16: ptr[15].convert(a15);
2713             // fallthrough
2714 
2715             case 15: ptr[14].convert(a14);
2716             // fallthrough
2717 
2718             case 14: ptr[13].convert(a13);
2719             // fallthrough
2720 
2721             case 13: ptr[12].convert(a12);
2722             // fallthrough
2723 
2724             case 12: ptr[11].convert(a11);
2725             // fallthrough
2726 
2727             case 11: ptr[10].convert(a10);
2728             // fallthrough
2729 
2730             case 10: ptr[9].convert(a9);
2731             // fallthrough
2732 
2733             case 9: ptr[8].convert(a8);
2734             // fallthrough
2735 
2736             case 8: ptr[7].convert(a7);
2737             // fallthrough
2738 
2739             case 7: ptr[6].convert(a6);
2740             // fallthrough
2741 
2742             case 6: ptr[5].convert(a5);
2743             // fallthrough
2744 
2745             case 5: ptr[4].convert(a4);
2746             // fallthrough
2747 
2748             case 4: ptr[3].convert(a3);
2749             // fallthrough
2750 
2751             case 3: ptr[2].convert(a2);
2752             // fallthrough
2753 
2754             case 2: ptr[1].convert(a1);
2755             // fallthrough
2756 
2757             case 1: ptr[0].convert(a0);
2758             // fallthrough
2759 
2760             }
2761         }
2762     }
2763     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
2764     {
2765         o->type = msgpack::type::ARRAY;
2766         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*25, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
2767         o->via.array.size = 25;
2768 
2769         o->via.array.ptr[0] = msgpack::object(a0, z);
2770         o->via.array.ptr[1] = msgpack::object(a1, z);
2771         o->via.array.ptr[2] = msgpack::object(a2, z);
2772         o->via.array.ptr[3] = msgpack::object(a3, z);
2773         o->via.array.ptr[4] = msgpack::object(a4, z);
2774         o->via.array.ptr[5] = msgpack::object(a5, z);
2775         o->via.array.ptr[6] = msgpack::object(a6, z);
2776         o->via.array.ptr[7] = msgpack::object(a7, z);
2777         o->via.array.ptr[8] = msgpack::object(a8, z);
2778         o->via.array.ptr[9] = msgpack::object(a9, z);
2779         o->via.array.ptr[10] = msgpack::object(a10, z);
2780         o->via.array.ptr[11] = msgpack::object(a11, z);
2781         o->via.array.ptr[12] = msgpack::object(a12, z);
2782         o->via.array.ptr[13] = msgpack::object(a13, z);
2783         o->via.array.ptr[14] = msgpack::object(a14, z);
2784         o->via.array.ptr[15] = msgpack::object(a15, z);
2785         o->via.array.ptr[16] = msgpack::object(a16, z);
2786         o->via.array.ptr[17] = msgpack::object(a17, z);
2787         o->via.array.ptr[18] = msgpack::object(a18, z);
2788         o->via.array.ptr[19] = msgpack::object(a19, z);
2789         o->via.array.ptr[20] = msgpack::object(a20, z);
2790         o->via.array.ptr[21] = msgpack::object(a21, z);
2791         o->via.array.ptr[22] = msgpack::object(a22, z);
2792         o->via.array.ptr[23] = msgpack::object(a23, z);
2793         o->via.array.ptr[24] = msgpack::object(a24, z);
2794     }
2795 
2796     A0& a0;
2797     A1& a1;
2798     A2& a2;
2799     A3& a3;
2800     A4& a4;
2801     A5& a5;
2802     A6& a6;
2803     A7& a7;
2804     A8& a8;
2805     A9& a9;
2806     A10& a10;
2807     A11& a11;
2808     A12& a12;
2809     A13& a13;
2810     A14& a14;
2811     A15& a15;
2812     A16& a16;
2813     A17& a17;
2814     A18& a18;
2815     A19& a19;
2816     A20& a20;
2817     A21& a21;
2818     A22& a22;
2819     A23& a23;
2820     A24& a24;
2821 };
2822 
2823 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>
2824 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> {
2825     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;
2826     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;
2827     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) :
2828         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) {}
2829     template <typename Packer>
2830     void msgpack_pack(Packer& pk) const
2831     {
2832         pk.pack_array(26);
2833 
2834         pk.pack(a0);
2835         pk.pack(a1);
2836         pk.pack(a2);
2837         pk.pack(a3);
2838         pk.pack(a4);
2839         pk.pack(a5);
2840         pk.pack(a6);
2841         pk.pack(a7);
2842         pk.pack(a8);
2843         pk.pack(a9);
2844         pk.pack(a10);
2845         pk.pack(a11);
2846         pk.pack(a12);
2847         pk.pack(a13);
2848         pk.pack(a14);
2849         pk.pack(a15);
2850         pk.pack(a16);
2851         pk.pack(a17);
2852         pk.pack(a18);
2853         pk.pack(a19);
2854         pk.pack(a20);
2855         pk.pack(a21);
2856         pk.pack(a22);
2857         pk.pack(a23);
2858         pk.pack(a24);
2859         pk.pack(a25);
2860     }
2861     void msgpack_unpack(msgpack::object const& o)
2862     {
2863         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
2864         const size_t size = o.via.array.size;
2865         if(size > 0) {
2866             msgpack::object *ptr = o.via.array.ptr;
2867             switch(size) {
2868             default:
2869             case 26: ptr[25].convert(a25);
2870             // fallthrough
2871 
2872             case 25: ptr[24].convert(a24);
2873             // fallthrough
2874 
2875             case 24: ptr[23].convert(a23);
2876             // fallthrough
2877 
2878             case 23: ptr[22].convert(a22);
2879             // fallthrough
2880 
2881             case 22: ptr[21].convert(a21);
2882             // fallthrough
2883 
2884             case 21: ptr[20].convert(a20);
2885             // fallthrough
2886 
2887             case 20: ptr[19].convert(a19);
2888             // fallthrough
2889 
2890             case 19: ptr[18].convert(a18);
2891             // fallthrough
2892 
2893             case 18: ptr[17].convert(a17);
2894             // fallthrough
2895 
2896             case 17: ptr[16].convert(a16);
2897             // fallthrough
2898 
2899             case 16: ptr[15].convert(a15);
2900             // fallthrough
2901 
2902             case 15: ptr[14].convert(a14);
2903             // fallthrough
2904 
2905             case 14: ptr[13].convert(a13);
2906             // fallthrough
2907 
2908             case 13: ptr[12].convert(a12);
2909             // fallthrough
2910 
2911             case 12: ptr[11].convert(a11);
2912             // fallthrough
2913 
2914             case 11: ptr[10].convert(a10);
2915             // fallthrough
2916 
2917             case 10: ptr[9].convert(a9);
2918             // fallthrough
2919 
2920             case 9: ptr[8].convert(a8);
2921             // fallthrough
2922 
2923             case 8: ptr[7].convert(a7);
2924             // fallthrough
2925 
2926             case 7: ptr[6].convert(a6);
2927             // fallthrough
2928 
2929             case 6: ptr[5].convert(a5);
2930             // fallthrough
2931 
2932             case 5: ptr[4].convert(a4);
2933             // fallthrough
2934 
2935             case 4: ptr[3].convert(a3);
2936             // fallthrough
2937 
2938             case 3: ptr[2].convert(a2);
2939             // fallthrough
2940 
2941             case 2: ptr[1].convert(a1);
2942             // fallthrough
2943 
2944             case 1: ptr[0].convert(a0);
2945             // fallthrough
2946 
2947             }
2948         }
2949     }
2950     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
2951     {
2952         o->type = msgpack::type::ARRAY;
2953         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*26, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
2954         o->via.array.size = 26;
2955 
2956         o->via.array.ptr[0] = msgpack::object(a0, z);
2957         o->via.array.ptr[1] = msgpack::object(a1, z);
2958         o->via.array.ptr[2] = msgpack::object(a2, z);
2959         o->via.array.ptr[3] = msgpack::object(a3, z);
2960         o->via.array.ptr[4] = msgpack::object(a4, z);
2961         o->via.array.ptr[5] = msgpack::object(a5, z);
2962         o->via.array.ptr[6] = msgpack::object(a6, z);
2963         o->via.array.ptr[7] = msgpack::object(a7, z);
2964         o->via.array.ptr[8] = msgpack::object(a8, z);
2965         o->via.array.ptr[9] = msgpack::object(a9, z);
2966         o->via.array.ptr[10] = msgpack::object(a10, z);
2967         o->via.array.ptr[11] = msgpack::object(a11, z);
2968         o->via.array.ptr[12] = msgpack::object(a12, z);
2969         o->via.array.ptr[13] = msgpack::object(a13, z);
2970         o->via.array.ptr[14] = msgpack::object(a14, z);
2971         o->via.array.ptr[15] = msgpack::object(a15, z);
2972         o->via.array.ptr[16] = msgpack::object(a16, z);
2973         o->via.array.ptr[17] = msgpack::object(a17, z);
2974         o->via.array.ptr[18] = msgpack::object(a18, z);
2975         o->via.array.ptr[19] = msgpack::object(a19, z);
2976         o->via.array.ptr[20] = msgpack::object(a20, z);
2977         o->via.array.ptr[21] = msgpack::object(a21, z);
2978         o->via.array.ptr[22] = msgpack::object(a22, z);
2979         o->via.array.ptr[23] = msgpack::object(a23, z);
2980         o->via.array.ptr[24] = msgpack::object(a24, z);
2981         o->via.array.ptr[25] = msgpack::object(a25, z);
2982     }
2983 
2984     A0& a0;
2985     A1& a1;
2986     A2& a2;
2987     A3& a3;
2988     A4& a4;
2989     A5& a5;
2990     A6& a6;
2991     A7& a7;
2992     A8& a8;
2993     A9& a9;
2994     A10& a10;
2995     A11& a11;
2996     A12& a12;
2997     A13& a13;
2998     A14& a14;
2999     A15& a15;
3000     A16& a16;
3001     A17& a17;
3002     A18& a18;
3003     A19& a19;
3004     A20& a20;
3005     A21& a21;
3006     A22& a22;
3007     A23& a23;
3008     A24& a24;
3009     A25& a25;
3010 };
3011 
3012 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>
3013 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> {
3014     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;
3015     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;
3016     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) :
3017         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) {}
3018     template <typename Packer>
3019     void msgpack_pack(Packer& pk) const
3020     {
3021         pk.pack_array(27);
3022 
3023         pk.pack(a0);
3024         pk.pack(a1);
3025         pk.pack(a2);
3026         pk.pack(a3);
3027         pk.pack(a4);
3028         pk.pack(a5);
3029         pk.pack(a6);
3030         pk.pack(a7);
3031         pk.pack(a8);
3032         pk.pack(a9);
3033         pk.pack(a10);
3034         pk.pack(a11);
3035         pk.pack(a12);
3036         pk.pack(a13);
3037         pk.pack(a14);
3038         pk.pack(a15);
3039         pk.pack(a16);
3040         pk.pack(a17);
3041         pk.pack(a18);
3042         pk.pack(a19);
3043         pk.pack(a20);
3044         pk.pack(a21);
3045         pk.pack(a22);
3046         pk.pack(a23);
3047         pk.pack(a24);
3048         pk.pack(a25);
3049         pk.pack(a26);
3050     }
3051     void msgpack_unpack(msgpack::object const& o)
3052     {
3053         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
3054         const size_t size = o.via.array.size;
3055         if(size > 0) {
3056             msgpack::object *ptr = o.via.array.ptr;
3057             switch(size) {
3058             default:
3059             case 27: ptr[26].convert(a26);
3060             // fallthrough
3061 
3062             case 26: ptr[25].convert(a25);
3063             // fallthrough
3064 
3065             case 25: ptr[24].convert(a24);
3066             // fallthrough
3067 
3068             case 24: ptr[23].convert(a23);
3069             // fallthrough
3070 
3071             case 23: ptr[22].convert(a22);
3072             // fallthrough
3073 
3074             case 22: ptr[21].convert(a21);
3075             // fallthrough
3076 
3077             case 21: ptr[20].convert(a20);
3078             // fallthrough
3079 
3080             case 20: ptr[19].convert(a19);
3081             // fallthrough
3082 
3083             case 19: ptr[18].convert(a18);
3084             // fallthrough
3085 
3086             case 18: ptr[17].convert(a17);
3087             // fallthrough
3088 
3089             case 17: ptr[16].convert(a16);
3090             // fallthrough
3091 
3092             case 16: ptr[15].convert(a15);
3093             // fallthrough
3094 
3095             case 15: ptr[14].convert(a14);
3096             // fallthrough
3097 
3098             case 14: ptr[13].convert(a13);
3099             // fallthrough
3100 
3101             case 13: ptr[12].convert(a12);
3102             // fallthrough
3103 
3104             case 12: ptr[11].convert(a11);
3105             // fallthrough
3106 
3107             case 11: ptr[10].convert(a10);
3108             // fallthrough
3109 
3110             case 10: ptr[9].convert(a9);
3111             // fallthrough
3112 
3113             case 9: ptr[8].convert(a8);
3114             // fallthrough
3115 
3116             case 8: ptr[7].convert(a7);
3117             // fallthrough
3118 
3119             case 7: ptr[6].convert(a6);
3120             // fallthrough
3121 
3122             case 6: ptr[5].convert(a5);
3123             // fallthrough
3124 
3125             case 5: ptr[4].convert(a4);
3126             // fallthrough
3127 
3128             case 4: ptr[3].convert(a3);
3129             // fallthrough
3130 
3131             case 3: ptr[2].convert(a2);
3132             // fallthrough
3133 
3134             case 2: ptr[1].convert(a1);
3135             // fallthrough
3136 
3137             case 1: ptr[0].convert(a0);
3138             // fallthrough
3139 
3140             }
3141         }
3142     }
3143     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
3144     {
3145         o->type = msgpack::type::ARRAY;
3146         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*27, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
3147         o->via.array.size = 27;
3148 
3149         o->via.array.ptr[0] = msgpack::object(a0, z);
3150         o->via.array.ptr[1] = msgpack::object(a1, z);
3151         o->via.array.ptr[2] = msgpack::object(a2, z);
3152         o->via.array.ptr[3] = msgpack::object(a3, z);
3153         o->via.array.ptr[4] = msgpack::object(a4, z);
3154         o->via.array.ptr[5] = msgpack::object(a5, z);
3155         o->via.array.ptr[6] = msgpack::object(a6, z);
3156         o->via.array.ptr[7] = msgpack::object(a7, z);
3157         o->via.array.ptr[8] = msgpack::object(a8, z);
3158         o->via.array.ptr[9] = msgpack::object(a9, z);
3159         o->via.array.ptr[10] = msgpack::object(a10, z);
3160         o->via.array.ptr[11] = msgpack::object(a11, z);
3161         o->via.array.ptr[12] = msgpack::object(a12, z);
3162         o->via.array.ptr[13] = msgpack::object(a13, z);
3163         o->via.array.ptr[14] = msgpack::object(a14, z);
3164         o->via.array.ptr[15] = msgpack::object(a15, z);
3165         o->via.array.ptr[16] = msgpack::object(a16, z);
3166         o->via.array.ptr[17] = msgpack::object(a17, z);
3167         o->via.array.ptr[18] = msgpack::object(a18, z);
3168         o->via.array.ptr[19] = msgpack::object(a19, z);
3169         o->via.array.ptr[20] = msgpack::object(a20, z);
3170         o->via.array.ptr[21] = msgpack::object(a21, z);
3171         o->via.array.ptr[22] = msgpack::object(a22, z);
3172         o->via.array.ptr[23] = msgpack::object(a23, z);
3173         o->via.array.ptr[24] = msgpack::object(a24, z);
3174         o->via.array.ptr[25] = msgpack::object(a25, z);
3175         o->via.array.ptr[26] = msgpack::object(a26, z);
3176     }
3177 
3178     A0& a0;
3179     A1& a1;
3180     A2& a2;
3181     A3& a3;
3182     A4& a4;
3183     A5& a5;
3184     A6& a6;
3185     A7& a7;
3186     A8& a8;
3187     A9& a9;
3188     A10& a10;
3189     A11& a11;
3190     A12& a12;
3191     A13& a13;
3192     A14& a14;
3193     A15& a15;
3194     A16& a16;
3195     A17& a17;
3196     A18& a18;
3197     A19& a19;
3198     A20& a20;
3199     A21& a21;
3200     A22& a22;
3201     A23& a23;
3202     A24& a24;
3203     A25& a25;
3204     A26& a26;
3205 };
3206 
3207 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>
3208 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> {
3209     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;
3210     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;
3211     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) :
3212         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) {}
3213     template <typename Packer>
3214     void msgpack_pack(Packer& pk) const
3215     {
3216         pk.pack_array(28);
3217 
3218         pk.pack(a0);
3219         pk.pack(a1);
3220         pk.pack(a2);
3221         pk.pack(a3);
3222         pk.pack(a4);
3223         pk.pack(a5);
3224         pk.pack(a6);
3225         pk.pack(a7);
3226         pk.pack(a8);
3227         pk.pack(a9);
3228         pk.pack(a10);
3229         pk.pack(a11);
3230         pk.pack(a12);
3231         pk.pack(a13);
3232         pk.pack(a14);
3233         pk.pack(a15);
3234         pk.pack(a16);
3235         pk.pack(a17);
3236         pk.pack(a18);
3237         pk.pack(a19);
3238         pk.pack(a20);
3239         pk.pack(a21);
3240         pk.pack(a22);
3241         pk.pack(a23);
3242         pk.pack(a24);
3243         pk.pack(a25);
3244         pk.pack(a26);
3245         pk.pack(a27);
3246     }
3247     void msgpack_unpack(msgpack::object const& o)
3248     {
3249         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
3250         const size_t size = o.via.array.size;
3251         if(size > 0) {
3252             msgpack::object *ptr = o.via.array.ptr;
3253             switch(size) {
3254             default:
3255             case 28: ptr[27].convert(a27);
3256             // fallthrough
3257 
3258             case 27: ptr[26].convert(a26);
3259             // fallthrough
3260 
3261             case 26: ptr[25].convert(a25);
3262             // fallthrough
3263 
3264             case 25: ptr[24].convert(a24);
3265             // fallthrough
3266 
3267             case 24: ptr[23].convert(a23);
3268             // fallthrough
3269 
3270             case 23: ptr[22].convert(a22);
3271             // fallthrough
3272 
3273             case 22: ptr[21].convert(a21);
3274             // fallthrough
3275 
3276             case 21: ptr[20].convert(a20);
3277             // fallthrough
3278 
3279             case 20: ptr[19].convert(a19);
3280             // fallthrough
3281 
3282             case 19: ptr[18].convert(a18);
3283             // fallthrough
3284 
3285             case 18: ptr[17].convert(a17);
3286             // fallthrough
3287 
3288             case 17: ptr[16].convert(a16);
3289             // fallthrough
3290 
3291             case 16: ptr[15].convert(a15);
3292             // fallthrough
3293 
3294             case 15: ptr[14].convert(a14);
3295             // fallthrough
3296 
3297             case 14: ptr[13].convert(a13);
3298             // fallthrough
3299 
3300             case 13: ptr[12].convert(a12);
3301             // fallthrough
3302 
3303             case 12: ptr[11].convert(a11);
3304             // fallthrough
3305 
3306             case 11: ptr[10].convert(a10);
3307             // fallthrough
3308 
3309             case 10: ptr[9].convert(a9);
3310             // fallthrough
3311 
3312             case 9: ptr[8].convert(a8);
3313             // fallthrough
3314 
3315             case 8: ptr[7].convert(a7);
3316             // fallthrough
3317 
3318             case 7: ptr[6].convert(a6);
3319             // fallthrough
3320 
3321             case 6: ptr[5].convert(a5);
3322             // fallthrough
3323 
3324             case 5: ptr[4].convert(a4);
3325             // fallthrough
3326 
3327             case 4: ptr[3].convert(a3);
3328             // fallthrough
3329 
3330             case 3: ptr[2].convert(a2);
3331             // fallthrough
3332 
3333             case 2: ptr[1].convert(a1);
3334             // fallthrough
3335 
3336             case 1: ptr[0].convert(a0);
3337             // fallthrough
3338 
3339             }
3340         }
3341     }
3342     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
3343     {
3344         o->type = msgpack::type::ARRAY;
3345         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*28, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
3346         o->via.array.size = 28;
3347 
3348         o->via.array.ptr[0] = msgpack::object(a0, z);
3349         o->via.array.ptr[1] = msgpack::object(a1, z);
3350         o->via.array.ptr[2] = msgpack::object(a2, z);
3351         o->via.array.ptr[3] = msgpack::object(a3, z);
3352         o->via.array.ptr[4] = msgpack::object(a4, z);
3353         o->via.array.ptr[5] = msgpack::object(a5, z);
3354         o->via.array.ptr[6] = msgpack::object(a6, z);
3355         o->via.array.ptr[7] = msgpack::object(a7, z);
3356         o->via.array.ptr[8] = msgpack::object(a8, z);
3357         o->via.array.ptr[9] = msgpack::object(a9, z);
3358         o->via.array.ptr[10] = msgpack::object(a10, z);
3359         o->via.array.ptr[11] = msgpack::object(a11, z);
3360         o->via.array.ptr[12] = msgpack::object(a12, z);
3361         o->via.array.ptr[13] = msgpack::object(a13, z);
3362         o->via.array.ptr[14] = msgpack::object(a14, z);
3363         o->via.array.ptr[15] = msgpack::object(a15, z);
3364         o->via.array.ptr[16] = msgpack::object(a16, z);
3365         o->via.array.ptr[17] = msgpack::object(a17, z);
3366         o->via.array.ptr[18] = msgpack::object(a18, z);
3367         o->via.array.ptr[19] = msgpack::object(a19, z);
3368         o->via.array.ptr[20] = msgpack::object(a20, z);
3369         o->via.array.ptr[21] = msgpack::object(a21, z);
3370         o->via.array.ptr[22] = msgpack::object(a22, z);
3371         o->via.array.ptr[23] = msgpack::object(a23, z);
3372         o->via.array.ptr[24] = msgpack::object(a24, z);
3373         o->via.array.ptr[25] = msgpack::object(a25, z);
3374         o->via.array.ptr[26] = msgpack::object(a26, z);
3375         o->via.array.ptr[27] = msgpack::object(a27, z);
3376     }
3377 
3378     A0& a0;
3379     A1& a1;
3380     A2& a2;
3381     A3& a3;
3382     A4& a4;
3383     A5& a5;
3384     A6& a6;
3385     A7& a7;
3386     A8& a8;
3387     A9& a9;
3388     A10& a10;
3389     A11& a11;
3390     A12& a12;
3391     A13& a13;
3392     A14& a14;
3393     A15& a15;
3394     A16& a16;
3395     A17& a17;
3396     A18& a18;
3397     A19& a19;
3398     A20& a20;
3399     A21& a21;
3400     A22& a22;
3401     A23& a23;
3402     A24& a24;
3403     A25& a25;
3404     A26& a26;
3405     A27& a27;
3406 };
3407 
3408 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>
3409 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> {
3410     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;
3411     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;
3412     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) :
3413         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) {}
3414     template <typename Packer>
3415     void msgpack_pack(Packer& pk) const
3416     {
3417         pk.pack_array(29);
3418 
3419         pk.pack(a0);
3420         pk.pack(a1);
3421         pk.pack(a2);
3422         pk.pack(a3);
3423         pk.pack(a4);
3424         pk.pack(a5);
3425         pk.pack(a6);
3426         pk.pack(a7);
3427         pk.pack(a8);
3428         pk.pack(a9);
3429         pk.pack(a10);
3430         pk.pack(a11);
3431         pk.pack(a12);
3432         pk.pack(a13);
3433         pk.pack(a14);
3434         pk.pack(a15);
3435         pk.pack(a16);
3436         pk.pack(a17);
3437         pk.pack(a18);
3438         pk.pack(a19);
3439         pk.pack(a20);
3440         pk.pack(a21);
3441         pk.pack(a22);
3442         pk.pack(a23);
3443         pk.pack(a24);
3444         pk.pack(a25);
3445         pk.pack(a26);
3446         pk.pack(a27);
3447         pk.pack(a28);
3448     }
3449     void msgpack_unpack(msgpack::object const& o)
3450     {
3451         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
3452         const size_t size = o.via.array.size;
3453         if(size > 0) {
3454             msgpack::object *ptr = o.via.array.ptr;
3455             switch(size) {
3456             default:
3457             case 29: ptr[28].convert(a28);
3458             // fallthrough
3459 
3460             case 28: ptr[27].convert(a27);
3461             // fallthrough
3462 
3463             case 27: ptr[26].convert(a26);
3464             // fallthrough
3465 
3466             case 26: ptr[25].convert(a25);
3467             // fallthrough
3468 
3469             case 25: ptr[24].convert(a24);
3470             // fallthrough
3471 
3472             case 24: ptr[23].convert(a23);
3473             // fallthrough
3474 
3475             case 23: ptr[22].convert(a22);
3476             // fallthrough
3477 
3478             case 22: ptr[21].convert(a21);
3479             // fallthrough
3480 
3481             case 21: ptr[20].convert(a20);
3482             // fallthrough
3483 
3484             case 20: ptr[19].convert(a19);
3485             // fallthrough
3486 
3487             case 19: ptr[18].convert(a18);
3488             // fallthrough
3489 
3490             case 18: ptr[17].convert(a17);
3491             // fallthrough
3492 
3493             case 17: ptr[16].convert(a16);
3494             // fallthrough
3495 
3496             case 16: ptr[15].convert(a15);
3497             // fallthrough
3498 
3499             case 15: ptr[14].convert(a14);
3500             // fallthrough
3501 
3502             case 14: ptr[13].convert(a13);
3503             // fallthrough
3504 
3505             case 13: ptr[12].convert(a12);
3506             // fallthrough
3507 
3508             case 12: ptr[11].convert(a11);
3509             // fallthrough
3510 
3511             case 11: ptr[10].convert(a10);
3512             // fallthrough
3513 
3514             case 10: ptr[9].convert(a9);
3515             // fallthrough
3516 
3517             case 9: ptr[8].convert(a8);
3518             // fallthrough
3519 
3520             case 8: ptr[7].convert(a7);
3521             // fallthrough
3522 
3523             case 7: ptr[6].convert(a6);
3524             // fallthrough
3525 
3526             case 6: ptr[5].convert(a5);
3527             // fallthrough
3528 
3529             case 5: ptr[4].convert(a4);
3530             // fallthrough
3531 
3532             case 4: ptr[3].convert(a3);
3533             // fallthrough
3534 
3535             case 3: ptr[2].convert(a2);
3536             // fallthrough
3537 
3538             case 2: ptr[1].convert(a1);
3539             // fallthrough
3540 
3541             case 1: ptr[0].convert(a0);
3542             // fallthrough
3543 
3544             }
3545         }
3546     }
3547     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
3548     {
3549         o->type = msgpack::type::ARRAY;
3550         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*29, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
3551         o->via.array.size = 29;
3552 
3553         o->via.array.ptr[0] = msgpack::object(a0, z);
3554         o->via.array.ptr[1] = msgpack::object(a1, z);
3555         o->via.array.ptr[2] = msgpack::object(a2, z);
3556         o->via.array.ptr[3] = msgpack::object(a3, z);
3557         o->via.array.ptr[4] = msgpack::object(a4, z);
3558         o->via.array.ptr[5] = msgpack::object(a5, z);
3559         o->via.array.ptr[6] = msgpack::object(a6, z);
3560         o->via.array.ptr[7] = msgpack::object(a7, z);
3561         o->via.array.ptr[8] = msgpack::object(a8, z);
3562         o->via.array.ptr[9] = msgpack::object(a9, z);
3563         o->via.array.ptr[10] = msgpack::object(a10, z);
3564         o->via.array.ptr[11] = msgpack::object(a11, z);
3565         o->via.array.ptr[12] = msgpack::object(a12, z);
3566         o->via.array.ptr[13] = msgpack::object(a13, z);
3567         o->via.array.ptr[14] = msgpack::object(a14, z);
3568         o->via.array.ptr[15] = msgpack::object(a15, z);
3569         o->via.array.ptr[16] = msgpack::object(a16, z);
3570         o->via.array.ptr[17] = msgpack::object(a17, z);
3571         o->via.array.ptr[18] = msgpack::object(a18, z);
3572         o->via.array.ptr[19] = msgpack::object(a19, z);
3573         o->via.array.ptr[20] = msgpack::object(a20, z);
3574         o->via.array.ptr[21] = msgpack::object(a21, z);
3575         o->via.array.ptr[22] = msgpack::object(a22, z);
3576         o->via.array.ptr[23] = msgpack::object(a23, z);
3577         o->via.array.ptr[24] = msgpack::object(a24, z);
3578         o->via.array.ptr[25] = msgpack::object(a25, z);
3579         o->via.array.ptr[26] = msgpack::object(a26, z);
3580         o->via.array.ptr[27] = msgpack::object(a27, z);
3581         o->via.array.ptr[28] = msgpack::object(a28, z);
3582     }
3583 
3584     A0& a0;
3585     A1& a1;
3586     A2& a2;
3587     A3& a3;
3588     A4& a4;
3589     A5& a5;
3590     A6& a6;
3591     A7& a7;
3592     A8& a8;
3593     A9& a9;
3594     A10& a10;
3595     A11& a11;
3596     A12& a12;
3597     A13& a13;
3598     A14& a14;
3599     A15& a15;
3600     A16& a16;
3601     A17& a17;
3602     A18& a18;
3603     A19& a19;
3604     A20& a20;
3605     A21& a21;
3606     A22& a22;
3607     A23& a23;
3608     A24& a24;
3609     A25& a25;
3610     A26& a26;
3611     A27& a27;
3612     A28& a28;
3613 };
3614 
3615 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>
3616 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> {
3617     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;
3618     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;
3619     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) :
3620         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) {}
3621     template <typename Packer>
3622     void msgpack_pack(Packer& pk) const
3623     {
3624         pk.pack_array(30);
3625 
3626         pk.pack(a0);
3627         pk.pack(a1);
3628         pk.pack(a2);
3629         pk.pack(a3);
3630         pk.pack(a4);
3631         pk.pack(a5);
3632         pk.pack(a6);
3633         pk.pack(a7);
3634         pk.pack(a8);
3635         pk.pack(a9);
3636         pk.pack(a10);
3637         pk.pack(a11);
3638         pk.pack(a12);
3639         pk.pack(a13);
3640         pk.pack(a14);
3641         pk.pack(a15);
3642         pk.pack(a16);
3643         pk.pack(a17);
3644         pk.pack(a18);
3645         pk.pack(a19);
3646         pk.pack(a20);
3647         pk.pack(a21);
3648         pk.pack(a22);
3649         pk.pack(a23);
3650         pk.pack(a24);
3651         pk.pack(a25);
3652         pk.pack(a26);
3653         pk.pack(a27);
3654         pk.pack(a28);
3655         pk.pack(a29);
3656     }
3657     void msgpack_unpack(msgpack::object const& o)
3658     {
3659         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
3660         const size_t size = o.via.array.size;
3661         if(size > 0) {
3662             msgpack::object *ptr = o.via.array.ptr;
3663             switch(size) {
3664             default:
3665             case 30: ptr[29].convert(a29);
3666             // fallthrough
3667 
3668             case 29: ptr[28].convert(a28);
3669             // fallthrough
3670 
3671             case 28: ptr[27].convert(a27);
3672             // fallthrough
3673 
3674             case 27: ptr[26].convert(a26);
3675             // fallthrough
3676 
3677             case 26: ptr[25].convert(a25);
3678             // fallthrough
3679 
3680             case 25: ptr[24].convert(a24);
3681             // fallthrough
3682 
3683             case 24: ptr[23].convert(a23);
3684             // fallthrough
3685 
3686             case 23: ptr[22].convert(a22);
3687             // fallthrough
3688 
3689             case 22: ptr[21].convert(a21);
3690             // fallthrough
3691 
3692             case 21: ptr[20].convert(a20);
3693             // fallthrough
3694 
3695             case 20: ptr[19].convert(a19);
3696             // fallthrough
3697 
3698             case 19: ptr[18].convert(a18);
3699             // fallthrough
3700 
3701             case 18: ptr[17].convert(a17);
3702             // fallthrough
3703 
3704             case 17: ptr[16].convert(a16);
3705             // fallthrough
3706 
3707             case 16: ptr[15].convert(a15);
3708             // fallthrough
3709 
3710             case 15: ptr[14].convert(a14);
3711             // fallthrough
3712 
3713             case 14: ptr[13].convert(a13);
3714             // fallthrough
3715 
3716             case 13: ptr[12].convert(a12);
3717             // fallthrough
3718 
3719             case 12: ptr[11].convert(a11);
3720             // fallthrough
3721 
3722             case 11: ptr[10].convert(a10);
3723             // fallthrough
3724 
3725             case 10: ptr[9].convert(a9);
3726             // fallthrough
3727 
3728             case 9: ptr[8].convert(a8);
3729             // fallthrough
3730 
3731             case 8: ptr[7].convert(a7);
3732             // fallthrough
3733 
3734             case 7: ptr[6].convert(a6);
3735             // fallthrough
3736 
3737             case 6: ptr[5].convert(a5);
3738             // fallthrough
3739 
3740             case 5: ptr[4].convert(a4);
3741             // fallthrough
3742 
3743             case 4: ptr[3].convert(a3);
3744             // fallthrough
3745 
3746             case 3: ptr[2].convert(a2);
3747             // fallthrough
3748 
3749             case 2: ptr[1].convert(a1);
3750             // fallthrough
3751 
3752             case 1: ptr[0].convert(a0);
3753             // fallthrough
3754 
3755             }
3756         }
3757     }
3758     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
3759     {
3760         o->type = msgpack::type::ARRAY;
3761         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*30, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
3762         o->via.array.size = 30;
3763 
3764         o->via.array.ptr[0] = msgpack::object(a0, z);
3765         o->via.array.ptr[1] = msgpack::object(a1, z);
3766         o->via.array.ptr[2] = msgpack::object(a2, z);
3767         o->via.array.ptr[3] = msgpack::object(a3, z);
3768         o->via.array.ptr[4] = msgpack::object(a4, z);
3769         o->via.array.ptr[5] = msgpack::object(a5, z);
3770         o->via.array.ptr[6] = msgpack::object(a6, z);
3771         o->via.array.ptr[7] = msgpack::object(a7, z);
3772         o->via.array.ptr[8] = msgpack::object(a8, z);
3773         o->via.array.ptr[9] = msgpack::object(a9, z);
3774         o->via.array.ptr[10] = msgpack::object(a10, z);
3775         o->via.array.ptr[11] = msgpack::object(a11, z);
3776         o->via.array.ptr[12] = msgpack::object(a12, z);
3777         o->via.array.ptr[13] = msgpack::object(a13, z);
3778         o->via.array.ptr[14] = msgpack::object(a14, z);
3779         o->via.array.ptr[15] = msgpack::object(a15, z);
3780         o->via.array.ptr[16] = msgpack::object(a16, z);
3781         o->via.array.ptr[17] = msgpack::object(a17, z);
3782         o->via.array.ptr[18] = msgpack::object(a18, z);
3783         o->via.array.ptr[19] = msgpack::object(a19, z);
3784         o->via.array.ptr[20] = msgpack::object(a20, z);
3785         o->via.array.ptr[21] = msgpack::object(a21, z);
3786         o->via.array.ptr[22] = msgpack::object(a22, z);
3787         o->via.array.ptr[23] = msgpack::object(a23, z);
3788         o->via.array.ptr[24] = msgpack::object(a24, z);
3789         o->via.array.ptr[25] = msgpack::object(a25, z);
3790         o->via.array.ptr[26] = msgpack::object(a26, z);
3791         o->via.array.ptr[27] = msgpack::object(a27, z);
3792         o->via.array.ptr[28] = msgpack::object(a28, z);
3793         o->via.array.ptr[29] = msgpack::object(a29, z);
3794     }
3795 
3796     A0& a0;
3797     A1& a1;
3798     A2& a2;
3799     A3& a3;
3800     A4& a4;
3801     A5& a5;
3802     A6& a6;
3803     A7& a7;
3804     A8& a8;
3805     A9& a9;
3806     A10& a10;
3807     A11& a11;
3808     A12& a12;
3809     A13& a13;
3810     A14& a14;
3811     A15& a15;
3812     A16& a16;
3813     A17& a17;
3814     A18& a18;
3815     A19& a19;
3816     A20& a20;
3817     A21& a21;
3818     A22& a22;
3819     A23& a23;
3820     A24& a24;
3821     A25& a25;
3822     A26& a26;
3823     A27& a27;
3824     A28& a28;
3825     A29& a29;
3826 };
3827 
3828 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>
3829 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> {
3830     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;
3831     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;
3832     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) :
3833         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) {}
3834     template <typename Packer>
3835     void msgpack_pack(Packer& pk) const
3836     {
3837         pk.pack_array(31);
3838 
3839         pk.pack(a0);
3840         pk.pack(a1);
3841         pk.pack(a2);
3842         pk.pack(a3);
3843         pk.pack(a4);
3844         pk.pack(a5);
3845         pk.pack(a6);
3846         pk.pack(a7);
3847         pk.pack(a8);
3848         pk.pack(a9);
3849         pk.pack(a10);
3850         pk.pack(a11);
3851         pk.pack(a12);
3852         pk.pack(a13);
3853         pk.pack(a14);
3854         pk.pack(a15);
3855         pk.pack(a16);
3856         pk.pack(a17);
3857         pk.pack(a18);
3858         pk.pack(a19);
3859         pk.pack(a20);
3860         pk.pack(a21);
3861         pk.pack(a22);
3862         pk.pack(a23);
3863         pk.pack(a24);
3864         pk.pack(a25);
3865         pk.pack(a26);
3866         pk.pack(a27);
3867         pk.pack(a28);
3868         pk.pack(a29);
3869         pk.pack(a30);
3870     }
3871     void msgpack_unpack(msgpack::object const& o)
3872     {
3873         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
3874         const size_t size = o.via.array.size;
3875         if(size > 0) {
3876             msgpack::object *ptr = o.via.array.ptr;
3877             switch(size) {
3878             default:
3879             case 31: ptr[30].convert(a30);
3880             // fallthrough
3881 
3882             case 30: ptr[29].convert(a29);
3883             // fallthrough
3884 
3885             case 29: ptr[28].convert(a28);
3886             // fallthrough
3887 
3888             case 28: ptr[27].convert(a27);
3889             // fallthrough
3890 
3891             case 27: ptr[26].convert(a26);
3892             // fallthrough
3893 
3894             case 26: ptr[25].convert(a25);
3895             // fallthrough
3896 
3897             case 25: ptr[24].convert(a24);
3898             // fallthrough
3899 
3900             case 24: ptr[23].convert(a23);
3901             // fallthrough
3902 
3903             case 23: ptr[22].convert(a22);
3904             // fallthrough
3905 
3906             case 22: ptr[21].convert(a21);
3907             // fallthrough
3908 
3909             case 21: ptr[20].convert(a20);
3910             // fallthrough
3911 
3912             case 20: ptr[19].convert(a19);
3913             // fallthrough
3914 
3915             case 19: ptr[18].convert(a18);
3916             // fallthrough
3917 
3918             case 18: ptr[17].convert(a17);
3919             // fallthrough
3920 
3921             case 17: ptr[16].convert(a16);
3922             // fallthrough
3923 
3924             case 16: ptr[15].convert(a15);
3925             // fallthrough
3926 
3927             case 15: ptr[14].convert(a14);
3928             // fallthrough
3929 
3930             case 14: ptr[13].convert(a13);
3931             // fallthrough
3932 
3933             case 13: ptr[12].convert(a12);
3934             // fallthrough
3935 
3936             case 12: ptr[11].convert(a11);
3937             // fallthrough
3938 
3939             case 11: ptr[10].convert(a10);
3940             // fallthrough
3941 
3942             case 10: ptr[9].convert(a9);
3943             // fallthrough
3944 
3945             case 9: ptr[8].convert(a8);
3946             // fallthrough
3947 
3948             case 8: ptr[7].convert(a7);
3949             // fallthrough
3950 
3951             case 7: ptr[6].convert(a6);
3952             // fallthrough
3953 
3954             case 6: ptr[5].convert(a5);
3955             // fallthrough
3956 
3957             case 5: ptr[4].convert(a4);
3958             // fallthrough
3959 
3960             case 4: ptr[3].convert(a3);
3961             // fallthrough
3962 
3963             case 3: ptr[2].convert(a2);
3964             // fallthrough
3965 
3966             case 2: ptr[1].convert(a1);
3967             // fallthrough
3968 
3969             case 1: ptr[0].convert(a0);
3970             // fallthrough
3971 
3972             }
3973         }
3974     }
3975     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
3976     {
3977         o->type = msgpack::type::ARRAY;
3978         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*31, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
3979         o->via.array.size = 31;
3980 
3981         o->via.array.ptr[0] = msgpack::object(a0, z);
3982         o->via.array.ptr[1] = msgpack::object(a1, z);
3983         o->via.array.ptr[2] = msgpack::object(a2, z);
3984         o->via.array.ptr[3] = msgpack::object(a3, z);
3985         o->via.array.ptr[4] = msgpack::object(a4, z);
3986         o->via.array.ptr[5] = msgpack::object(a5, z);
3987         o->via.array.ptr[6] = msgpack::object(a6, z);
3988         o->via.array.ptr[7] = msgpack::object(a7, z);
3989         o->via.array.ptr[8] = msgpack::object(a8, z);
3990         o->via.array.ptr[9] = msgpack::object(a9, z);
3991         o->via.array.ptr[10] = msgpack::object(a10, z);
3992         o->via.array.ptr[11] = msgpack::object(a11, z);
3993         o->via.array.ptr[12] = msgpack::object(a12, z);
3994         o->via.array.ptr[13] = msgpack::object(a13, z);
3995         o->via.array.ptr[14] = msgpack::object(a14, z);
3996         o->via.array.ptr[15] = msgpack::object(a15, z);
3997         o->via.array.ptr[16] = msgpack::object(a16, z);
3998         o->via.array.ptr[17] = msgpack::object(a17, z);
3999         o->via.array.ptr[18] = msgpack::object(a18, z);
4000         o->via.array.ptr[19] = msgpack::object(a19, z);
4001         o->via.array.ptr[20] = msgpack::object(a20, z);
4002         o->via.array.ptr[21] = msgpack::object(a21, z);
4003         o->via.array.ptr[22] = msgpack::object(a22, z);
4004         o->via.array.ptr[23] = msgpack::object(a23, z);
4005         o->via.array.ptr[24] = msgpack::object(a24, z);
4006         o->via.array.ptr[25] = msgpack::object(a25, z);
4007         o->via.array.ptr[26] = msgpack::object(a26, z);
4008         o->via.array.ptr[27] = msgpack::object(a27, z);
4009         o->via.array.ptr[28] = msgpack::object(a28, z);
4010         o->via.array.ptr[29] = msgpack::object(a29, z);
4011         o->via.array.ptr[30] = msgpack::object(a30, z);
4012     }
4013 
4014     A0& a0;
4015     A1& a1;
4016     A2& a2;
4017     A3& a3;
4018     A4& a4;
4019     A5& a5;
4020     A6& a6;
4021     A7& a7;
4022     A8& a8;
4023     A9& a9;
4024     A10& a10;
4025     A11& a11;
4026     A12& a12;
4027     A13& a13;
4028     A14& a14;
4029     A15& a15;
4030     A16& a16;
4031     A17& a17;
4032     A18& a18;
4033     A19& a19;
4034     A20& a20;
4035     A21& a21;
4036     A22& a22;
4037     A23& a23;
4038     A24& a24;
4039     A25& a25;
4040     A26& a26;
4041     A27& a27;
4042     A28& a28;
4043     A29& a29;
4044     A30& a30;
4045 };
4046 
4047 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>
4048 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> {
4049     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;
4050     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;
4051     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) :
4052         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) {}
4053     template <typename Packer>
4054     void msgpack_pack(Packer& pk) const
4055     {
4056         pk.pack_array(32);
4057 
4058         pk.pack(a0);
4059         pk.pack(a1);
4060         pk.pack(a2);
4061         pk.pack(a3);
4062         pk.pack(a4);
4063         pk.pack(a5);
4064         pk.pack(a6);
4065         pk.pack(a7);
4066         pk.pack(a8);
4067         pk.pack(a9);
4068         pk.pack(a10);
4069         pk.pack(a11);
4070         pk.pack(a12);
4071         pk.pack(a13);
4072         pk.pack(a14);
4073         pk.pack(a15);
4074         pk.pack(a16);
4075         pk.pack(a17);
4076         pk.pack(a18);
4077         pk.pack(a19);
4078         pk.pack(a20);
4079         pk.pack(a21);
4080         pk.pack(a22);
4081         pk.pack(a23);
4082         pk.pack(a24);
4083         pk.pack(a25);
4084         pk.pack(a26);
4085         pk.pack(a27);
4086         pk.pack(a28);
4087         pk.pack(a29);
4088         pk.pack(a30);
4089         pk.pack(a31);
4090     }
4091     void msgpack_unpack(msgpack::object const& o)
4092     {
4093         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
4094         const size_t size = o.via.array.size;
4095         if(size > 0) {
4096             msgpack::object *ptr = o.via.array.ptr;
4097             switch(size) {
4098             default:
4099             case 32: ptr[31].convert(a31);
4100             // fallthrough
4101 
4102             case 31: ptr[30].convert(a30);
4103             // fallthrough
4104 
4105             case 30: ptr[29].convert(a29);
4106             // fallthrough
4107 
4108             case 29: ptr[28].convert(a28);
4109             // fallthrough
4110 
4111             case 28: ptr[27].convert(a27);
4112             // fallthrough
4113 
4114             case 27: ptr[26].convert(a26);
4115             // fallthrough
4116 
4117             case 26: ptr[25].convert(a25);
4118             // fallthrough
4119 
4120             case 25: ptr[24].convert(a24);
4121             // fallthrough
4122 
4123             case 24: ptr[23].convert(a23);
4124             // fallthrough
4125 
4126             case 23: ptr[22].convert(a22);
4127             // fallthrough
4128 
4129             case 22: ptr[21].convert(a21);
4130             // fallthrough
4131 
4132             case 21: ptr[20].convert(a20);
4133             // fallthrough
4134 
4135             case 20: ptr[19].convert(a19);
4136             // fallthrough
4137 
4138             case 19: ptr[18].convert(a18);
4139             // fallthrough
4140 
4141             case 18: ptr[17].convert(a17);
4142             // fallthrough
4143 
4144             case 17: ptr[16].convert(a16);
4145             // fallthrough
4146 
4147             case 16: ptr[15].convert(a15);
4148             // fallthrough
4149 
4150             case 15: ptr[14].convert(a14);
4151             // fallthrough
4152 
4153             case 14: ptr[13].convert(a13);
4154             // fallthrough
4155 
4156             case 13: ptr[12].convert(a12);
4157             // fallthrough
4158 
4159             case 12: ptr[11].convert(a11);
4160             // fallthrough
4161 
4162             case 11: ptr[10].convert(a10);
4163             // fallthrough
4164 
4165             case 10: ptr[9].convert(a9);
4166             // fallthrough
4167 
4168             case 9: ptr[8].convert(a8);
4169             // fallthrough
4170 
4171             case 8: ptr[7].convert(a7);
4172             // fallthrough
4173 
4174             case 7: ptr[6].convert(a6);
4175             // fallthrough
4176 
4177             case 6: ptr[5].convert(a5);
4178             // fallthrough
4179 
4180             case 5: ptr[4].convert(a4);
4181             // fallthrough
4182 
4183             case 4: ptr[3].convert(a3);
4184             // fallthrough
4185 
4186             case 3: ptr[2].convert(a2);
4187             // fallthrough
4188 
4189             case 2: ptr[1].convert(a1);
4190             // fallthrough
4191 
4192             case 1: ptr[0].convert(a0);
4193             // fallthrough
4194 
4195             }
4196         }
4197     }
4198     void msgpack_object(msgpack::object* o, msgpack::zone& z) const
4199     {
4200         o->type = msgpack::type::ARRAY;
4201         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*32, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
4202         o->via.array.size = 32;
4203 
4204         o->via.array.ptr[0] = msgpack::object(a0, z);
4205         o->via.array.ptr[1] = msgpack::object(a1, z);
4206         o->via.array.ptr[2] = msgpack::object(a2, z);
4207         o->via.array.ptr[3] = msgpack::object(a3, z);
4208         o->via.array.ptr[4] = msgpack::object(a4, z);
4209         o->via.array.ptr[5] = msgpack::object(a5, z);
4210         o->via.array.ptr[6] = msgpack::object(a6, z);
4211         o->via.array.ptr[7] = msgpack::object(a7, z);
4212         o->via.array.ptr[8] = msgpack::object(a8, z);
4213         o->via.array.ptr[9] = msgpack::object(a9, z);
4214         o->via.array.ptr[10] = msgpack::object(a10, z);
4215         o->via.array.ptr[11] = msgpack::object(a11, z);
4216         o->via.array.ptr[12] = msgpack::object(a12, z);
4217         o->via.array.ptr[13] = msgpack::object(a13, z);
4218         o->via.array.ptr[14] = msgpack::object(a14, z);
4219         o->via.array.ptr[15] = msgpack::object(a15, z);
4220         o->via.array.ptr[16] = msgpack::object(a16, z);
4221         o->via.array.ptr[17] = msgpack::object(a17, z);
4222         o->via.array.ptr[18] = msgpack::object(a18, z);
4223         o->via.array.ptr[19] = msgpack::object(a19, z);
4224         o->via.array.ptr[20] = msgpack::object(a20, z);
4225         o->via.array.ptr[21] = msgpack::object(a21, z);
4226         o->via.array.ptr[22] = msgpack::object(a22, z);
4227         o->via.array.ptr[23] = msgpack::object(a23, z);
4228         o->via.array.ptr[24] = msgpack::object(a24, z);
4229         o->via.array.ptr[25] = msgpack::object(a25, z);
4230         o->via.array.ptr[26] = msgpack::object(a26, z);
4231         o->via.array.ptr[27] = msgpack::object(a27, z);
4232         o->via.array.ptr[28] = msgpack::object(a28, z);
4233         o->via.array.ptr[29] = msgpack::object(a29, z);
4234         o->via.array.ptr[30] = msgpack::object(a30, z);
4235         o->via.array.ptr[31] = msgpack::object(a31, z);
4236     }
4237 
4238     A0& a0;
4239     A1& a1;
4240     A2& a2;
4241     A3& a3;
4242     A4& a4;
4243     A5& a5;
4244     A6& a6;
4245     A7& a7;
4246     A8& a8;
4247     A9& a9;
4248     A10& a10;
4249     A11& a11;
4250     A12& a12;
4251     A13& a13;
4252     A14& a14;
4253     A15& a15;
4254     A16& a16;
4255     A17& a17;
4256     A18& a18;
4257     A19& a19;
4258     A20& a20;
4259     A21& a21;
4260     A22& a22;
4261     A23& a23;
4262     A24& a24;
4263     A25& a25;
4264     A26& a26;
4265     A27& a27;
4266     A28& a28;
4267     A29& a29;
4268     A30& a30;
4269     A31& a31;
4270 };
4271 
4272 /// @endcond
4273 
4274 inline define_array<> make_define_array()
4275 {
4276     return define_array<>();
4277 }
4278 
4279 /// @cond
4280 
4281 template <typename A0>
4282 inline define_array<A0> make_define_array(A0& a0)
4283 {
4284     return define_array<A0>(a0);
4285 }
4286 
4287 template <typename A0, typename A1>
4288 inline define_array<A0, A1> make_define_array(A0& a0, A1& a1)
4289 {
4290     return define_array<A0, A1>(a0, a1);
4291 }
4292 
4293 template <typename A0, typename A1, typename A2>
4294 inline define_array<A0, A1, A2> make_define_array(A0& a0, A1& a1, A2& a2)
4295 {
4296     return define_array<A0, A1, A2>(a0, a1, a2);
4297 }
4298 
4299 template <typename A0, typename A1, typename A2, typename A3>
4300 inline define_array<A0, A1, A2, A3> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3)
4301 {
4302     return define_array<A0, A1, A2, A3>(a0, a1, a2, a3);
4303 }
4304 
4305 template <typename A0, typename A1, typename A2, typename A3, typename A4>
4306 inline define_array<A0, A1, A2, A3, A4> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4)
4307 {
4308     return define_array<A0, A1, A2, A3, A4>(a0, a1, a2, a3, a4);
4309 }
4310 
4311 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
4312 inline define_array<A0, A1, A2, A3, A4, A5> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5)
4313 {
4314     return define_array<A0, A1, A2, A3, A4, A5>(a0, a1, a2, a3, a4, a5);
4315 }
4316 
4317 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
4318 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)
4319 {
4320     return define_array<A0, A1, A2, A3, A4, A5, A6>(a0, a1, a2, a3, a4, a5, a6);
4321 }
4322 
4323 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
4324 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)
4325 {
4326     return define_array<A0, A1, A2, A3, A4, A5, A6, A7>(a0, a1, a2, a3, a4, a5, a6, a7);
4327 }
4328 
4329 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
4330 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)
4331 {
4332     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8>(a0, a1, a2, a3, a4, a5, a6, a7, a8);
4333 }
4334 
4335 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
4336 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)
4337 {
4338     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
4339 }
4340 
4341 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
4342 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)
4343 {
4344     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);
4345 }
4346 
4347 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>
4348 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)
4349 {
4350     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);
4351 }
4352 
4353 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>
4354 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)
4355 {
4356     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);
4357 }
4358 
4359 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>
4360 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)
4361 {
4362     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);
4363 }
4364 
4365 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>
4366 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)
4367 {
4368     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);
4369 }
4370 
4371 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>
4372 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)
4373 {
4374     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);
4375 }
4376 
4377 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>
4378 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)
4379 {
4380     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);
4381 }
4382 
4383 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>
4384 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)
4385 {
4386     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);
4387 }
4388 
4389 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>
4390 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)
4391 {
4392     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);
4393 }
4394 
4395 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>
4396 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)
4397 {
4398     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);
4399 }
4400 
4401 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>
4402 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)
4403 {
4404     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);
4405 }
4406 
4407 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>
4408 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)
4409 {
4410     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);
4411 }
4412 
4413 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>
4414 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)
4415 {
4416     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);
4417 }
4418 
4419 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>
4420 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)
4421 {
4422     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);
4423 }
4424 
4425 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>
4426 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)
4427 {
4428     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);
4429 }
4430 
4431 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>
4432 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)
4433 {
4434     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);
4435 }
4436 
4437 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>
4438 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)
4439 {
4440     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);
4441 }
4442 
4443 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>
4444 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)
4445 {
4446     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);
4447 }
4448 
4449 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>
4450 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)
4451 {
4452     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);
4453 }
4454 
4455 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>
4456 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)
4457 {
4458     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);
4459 }
4460 
4461 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>
4462 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)
4463 {
4464     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);
4465 }
4466 
4467 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>
4468 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)
4469 {
4470     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);
4471 }
4472 
4473 /// @endcond
4474 
4475 }  // namespace type
4476 /// @cond
4477 }  // MSGPACK_API_VERSION_NAMESPACE(v1)
4478 /// @endcond
4479 }  // namespace msgpack
4480 
4481 #endif // MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP
4482