1 //
2 // MessagePack for C++ static resolution routine
3 //
4 // Copyright (C) 2008-2009 FURUHASHI Sadayuki
5 //
6 //    Licensed under the Apache License, Version 2.0 (the "License");
7 //    you may not use this file except in compliance with the License.
8 //    You may obtain a copy of the License at
9 //
10 //        http://www.apache.org/licenses/LICENSE-2.0
11 //
12 //    Unless required by applicable law or agreed to in writing, software
13 //    distributed under the License is distributed on an "AS IS" BASIS,
14 //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 //    See the License for the specific language governing permissions and
16 //    limitations under the License.
17 //
18 #ifndef MSGPACK_CPP03_DEFINE_ARRAY_HPP
19 #define MSGPACK_CPP03_DEFINE_ARRAY_HPP
20 
21 #include "rpc/msgpack/versioning.hpp"
22 #include "rpc/msgpack/adaptor/msgpack_tuple.hpp"
23 #include "rpc/msgpack/adaptor/adaptor_base.hpp"
24 #include "rpc/msgpack/object_fwd.hpp"
25 
26 #define MSGPACK_DEFINE_ARRAY(...) \
27     template <typename Packer> \
28     void msgpack_pack(Packer& pk) const \
29     { \
30         clmdep_msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \
31     } \
32     void msgpack_unpack(clmdep_msgpack::object const& o) \
33     { \
34         clmdep_msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \
35     }\
36     template <typename MSGPACK_OBJECT> \
37     void msgpack_object(MSGPACK_OBJECT* o, clmdep_msgpack::zone& z) const \
38     { \
39         clmdep_msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(o, z); \
40     }
41 
42 #define MSGPACK_BASE_ARRAY(base) (*const_cast<base *>(static_cast<base const*>(this)))
43 
44 // MSGPACK_ADD_ENUM must be used in the global namespace.
45 #define MSGPACK_ADD_ENUM(enum_name) \
46   namespace clmdep_msgpack { \
47   /** @cond */ \
48   MSGPACK_API_VERSION_NAMESPACE(v1) { \
49   /** @endcond */ \
50   namespace adaptor { \
51     template<> \
52     struct convert<enum_name> { \
53       clmdep_msgpack::object const& operator()(clmdep_msgpack::object const& o, enum_name& v) const {\
54         int tmp; \
55         o >> tmp; \
56         v = static_cast<enum_name>(tmp); \
57         return o; \
58       } \
59     }; \
60     template<> \
61     struct object<enum_name> { \
62       void operator()(clmdep_msgpack::object& o, const enum_name& v) const {\
63         o << static_cast<int>(v); \
64       } \
65     }; \
66     template<> \
67     struct object_with_zone<enum_name> { \
68       void operator()(clmdep_msgpack::object::with_zone& o, const enum_name& v) const { \
69         o << static_cast<int>(v); \
70       } \
71     }; \
72     template<> \
73     struct pack<enum_name> { \
74       template <typename Stream> \
75       clmdep_msgpack::packer<Stream>& operator()(clmdep_msgpack::packer<Stream>& o, const enum_name& v) const { \
76         return o << static_cast<int>(v); \
77       } \
78     }; \
79   } \
80   /** @cond */ \
81   } \
82   /** @endcond */ \
83   }
84 
85 namespace clmdep_msgpack {
86 /// @cond
MSGPACK_API_VERSION_NAMESPACE(v1)87 MSGPACK_API_VERSION_NAMESPACE(v1) {
88 /// @endcond
89 namespace type {
90 
91 /// @cond
92 
93 template <typename A0 = void, typename A1 = void, typename A2 = void, typename A3 = void, typename A4 = void, typename A5 = void, typename A6 = void, typename A7 = void, typename A8 = void, typename A9 = void, typename A10 = void, typename A11 = void, typename A12 = void, typename A13 = void, typename A14 = void, typename A15 = void, typename A16 = void, typename A17 = void, typename A18 = void, typename A19 = void, typename A20 = void, typename A21 = void, typename A22 = void, typename A23 = void, typename A24 = void, typename A25 = void, typename A26 = void, typename A27 = void, typename A28 = void, typename A29 = void, typename A30 = void, typename A31 = void, typename A32 = void>
94 struct define_array;
95 /// @endcond
96 
97 template <>
98 struct define_array<> {
99     typedef define_array<> value_type;
100     typedef tuple<> tuple_type;
101     template <typename Packer>
102     void msgpack_pack(Packer& pk) const
103     {
104         pk.pack_array(0);
105     }
106     void msgpack_unpack(clmdep_msgpack::object const& o)
107     {
108         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
109     }
110     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone&) const
111     {
112         o->type = clmdep_msgpack::type::ARRAY;
113         o->via.array.ptr = nullptr;
114         o->via.array.size = 0;
115     }
116 };
117 
118 /// @cond
119 
120 template <typename A0>
121 struct define_array<A0> {
122     typedef define_array<A0> value_type;
123     typedef tuple<A0> tuple_type;
124     define_array(A0& _a0) :
125         a0(_a0) {}
126     template <typename Packer>
127     void msgpack_pack(Packer& pk) const
128     {
129         pk.pack_array(1);
130 
131         pk.pack(a0);
132     }
133     void msgpack_unpack(clmdep_msgpack::object const& o)
134     {
135         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
136         const size_t size = o.via.array.size;
137         if(size > 0) {
138             clmdep_msgpack::object *ptr = o.via.array.ptr;
139             switch(size) {
140             default:
141             case 1: ptr[0].convert(a0);
142             }
143         }
144     }
145     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
146     {
147         o->type = clmdep_msgpack::type::ARRAY;
148         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*1));
149         o->via.array.size = 1;
150 
151         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
152     }
153 
154     A0& a0;
155 };
156 
157 template <typename A0, typename A1>
158 struct define_array<A0, A1> {
159     typedef define_array<A0, A1> value_type;
160     typedef tuple<A0, A1> tuple_type;
161     define_array(A0& _a0, A1& _a1) :
162         a0(_a0), a1(_a1) {}
163     template <typename Packer>
164     void msgpack_pack(Packer& pk) const
165     {
166         pk.pack_array(2);
167 
168         pk.pack(a0);
169         pk.pack(a1);
170     }
171     void msgpack_unpack(clmdep_msgpack::object const& o)
172     {
173         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
174         const size_t size = o.via.array.size;
175         if(size > 0) {
176             clmdep_msgpack::object *ptr = o.via.array.ptr;
177             switch(size) {
178             default:
179             case 2: ptr[1].convert(a1);
180             case 1: ptr[0].convert(a0);
181             }
182         }
183     }
184     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
185     {
186         o->type = clmdep_msgpack::type::ARRAY;
187         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*2));
188         o->via.array.size = 2;
189 
190         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
191         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
192     }
193 
194     A0& a0;
195     A1& a1;
196 };
197 
198 template <typename A0, typename A1, typename A2>
199 struct define_array<A0, A1, A2> {
200     typedef define_array<A0, A1, A2> value_type;
201     typedef tuple<A0, A1, A2> tuple_type;
202     define_array(A0& _a0, A1& _a1, A2& _a2) :
203         a0(_a0), a1(_a1), a2(_a2) {}
204     template <typename Packer>
205     void msgpack_pack(Packer& pk) const
206     {
207         pk.pack_array(3);
208 
209         pk.pack(a0);
210         pk.pack(a1);
211         pk.pack(a2);
212     }
213     void msgpack_unpack(clmdep_msgpack::object const& o)
214     {
215         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
216         const size_t size = o.via.array.size;
217         if(size > 0) {
218             clmdep_msgpack::object *ptr = o.via.array.ptr;
219             switch(size) {
220             default:
221             case 3: ptr[2].convert(a2);
222             case 2: ptr[1].convert(a1);
223             case 1: ptr[0].convert(a0);
224             }
225         }
226     }
227     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
228     {
229         o->type = clmdep_msgpack::type::ARRAY;
230         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*3));
231         o->via.array.size = 3;
232 
233         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
234         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
235         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
236     }
237 
238     A0& a0;
239     A1& a1;
240     A2& a2;
241 };
242 
243 template <typename A0, typename A1, typename A2, typename A3>
244 struct define_array<A0, A1, A2, A3> {
245     typedef define_array<A0, A1, A2, A3> value_type;
246     typedef tuple<A0, A1, A2, A3> tuple_type;
247     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3) :
248         a0(_a0), a1(_a1), a2(_a2), a3(_a3) {}
249     template <typename Packer>
250     void msgpack_pack(Packer& pk) const
251     {
252         pk.pack_array(4);
253 
254         pk.pack(a0);
255         pk.pack(a1);
256         pk.pack(a2);
257         pk.pack(a3);
258     }
259     void msgpack_unpack(clmdep_msgpack::object const& o)
260     {
261         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
262         const size_t size = o.via.array.size;
263         if(size > 0) {
264             clmdep_msgpack::object *ptr = o.via.array.ptr;
265             switch(size) {
266             default:
267             case 4: ptr[3].convert(a3);
268             case 3: ptr[2].convert(a2);
269             case 2: ptr[1].convert(a1);
270             case 1: ptr[0].convert(a0);
271             }
272         }
273     }
274     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
275     {
276         o->type = clmdep_msgpack::type::ARRAY;
277         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*4));
278         o->via.array.size = 4;
279 
280         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
281         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
282         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
283         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
284     }
285 
286     A0& a0;
287     A1& a1;
288     A2& a2;
289     A3& a3;
290 };
291 
292 template <typename A0, typename A1, typename A2, typename A3, typename A4>
293 struct define_array<A0, A1, A2, A3, A4> {
294     typedef define_array<A0, A1, A2, A3, A4> value_type;
295     typedef tuple<A0, A1, A2, A3, A4> tuple_type;
296     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4) :
297         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4) {}
298     template <typename Packer>
299     void msgpack_pack(Packer& pk) const
300     {
301         pk.pack_array(5);
302 
303         pk.pack(a0);
304         pk.pack(a1);
305         pk.pack(a2);
306         pk.pack(a3);
307         pk.pack(a4);
308     }
309     void msgpack_unpack(clmdep_msgpack::object const& o)
310     {
311         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
312         const size_t size = o.via.array.size;
313         if(size > 0) {
314             clmdep_msgpack::object *ptr = o.via.array.ptr;
315             switch(size) {
316             default:
317             case 5: ptr[4].convert(a4);
318             case 4: ptr[3].convert(a3);
319             case 3: ptr[2].convert(a2);
320             case 2: ptr[1].convert(a1);
321             case 1: ptr[0].convert(a0);
322             }
323         }
324     }
325     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
326     {
327         o->type = clmdep_msgpack::type::ARRAY;
328         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*5));
329         o->via.array.size = 5;
330 
331         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
332         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
333         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
334         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
335         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
336     }
337 
338     A0& a0;
339     A1& a1;
340     A2& a2;
341     A3& a3;
342     A4& a4;
343 };
344 
345 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
346 struct define_array<A0, A1, A2, A3, A4, A5> {
347     typedef define_array<A0, A1, A2, A3, A4, A5> value_type;
348     typedef tuple<A0, A1, A2, A3, A4, A5> tuple_type;
349     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5) :
350         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5) {}
351     template <typename Packer>
352     void msgpack_pack(Packer& pk) const
353     {
354         pk.pack_array(6);
355 
356         pk.pack(a0);
357         pk.pack(a1);
358         pk.pack(a2);
359         pk.pack(a3);
360         pk.pack(a4);
361         pk.pack(a5);
362     }
363     void msgpack_unpack(clmdep_msgpack::object const& o)
364     {
365         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
366         const size_t size = o.via.array.size;
367         if(size > 0) {
368             clmdep_msgpack::object *ptr = o.via.array.ptr;
369             switch(size) {
370             default:
371             case 6: ptr[5].convert(a5);
372             case 5: ptr[4].convert(a4);
373             case 4: ptr[3].convert(a3);
374             case 3: ptr[2].convert(a2);
375             case 2: ptr[1].convert(a1);
376             case 1: ptr[0].convert(a0);
377             }
378         }
379     }
380     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
381     {
382         o->type = clmdep_msgpack::type::ARRAY;
383         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*6));
384         o->via.array.size = 6;
385 
386         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
387         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
388         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
389         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
390         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
391         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
392     }
393 
394     A0& a0;
395     A1& a1;
396     A2& a2;
397     A3& a3;
398     A4& a4;
399     A5& a5;
400 };
401 
402 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
403 struct define_array<A0, A1, A2, A3, A4, A5, A6> {
404     typedef define_array<A0, A1, A2, A3, A4, A5, A6> value_type;
405     typedef tuple<A0, A1, A2, A3, A4, A5, A6> tuple_type;
406     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6) :
407         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6) {}
408     template <typename Packer>
409     void msgpack_pack(Packer& pk) const
410     {
411         pk.pack_array(7);
412 
413         pk.pack(a0);
414         pk.pack(a1);
415         pk.pack(a2);
416         pk.pack(a3);
417         pk.pack(a4);
418         pk.pack(a5);
419         pk.pack(a6);
420     }
421     void msgpack_unpack(clmdep_msgpack::object const& o)
422     {
423         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
424         const size_t size = o.via.array.size;
425         if(size > 0) {
426             clmdep_msgpack::object *ptr = o.via.array.ptr;
427             switch(size) {
428             default:
429             case 7: ptr[6].convert(a6);
430             case 6: ptr[5].convert(a5);
431             case 5: ptr[4].convert(a4);
432             case 4: ptr[3].convert(a3);
433             case 3: ptr[2].convert(a2);
434             case 2: ptr[1].convert(a1);
435             case 1: ptr[0].convert(a0);
436             }
437         }
438     }
439     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
440     {
441         o->type = clmdep_msgpack::type::ARRAY;
442         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*7));
443         o->via.array.size = 7;
444 
445         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
446         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
447         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
448         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
449         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
450         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
451         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
452     }
453 
454     A0& a0;
455     A1& a1;
456     A2& a2;
457     A3& a3;
458     A4& a4;
459     A5& a5;
460     A6& a6;
461 };
462 
463 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
464 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7> {
465     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7> value_type;
466     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7> tuple_type;
467     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7) :
468         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7) {}
469     template <typename Packer>
470     void msgpack_pack(Packer& pk) const
471     {
472         pk.pack_array(8);
473 
474         pk.pack(a0);
475         pk.pack(a1);
476         pk.pack(a2);
477         pk.pack(a3);
478         pk.pack(a4);
479         pk.pack(a5);
480         pk.pack(a6);
481         pk.pack(a7);
482     }
483     void msgpack_unpack(clmdep_msgpack::object const& o)
484     {
485         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
486         const size_t size = o.via.array.size;
487         if(size > 0) {
488             clmdep_msgpack::object *ptr = o.via.array.ptr;
489             switch(size) {
490             default:
491             case 8: ptr[7].convert(a7);
492             case 7: ptr[6].convert(a6);
493             case 6: ptr[5].convert(a5);
494             case 5: ptr[4].convert(a4);
495             case 4: ptr[3].convert(a3);
496             case 3: ptr[2].convert(a2);
497             case 2: ptr[1].convert(a1);
498             case 1: ptr[0].convert(a0);
499             }
500         }
501     }
502     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
503     {
504         o->type = clmdep_msgpack::type::ARRAY;
505         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*8));
506         o->via.array.size = 8;
507 
508         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
509         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
510         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
511         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
512         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
513         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
514         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
515         o->via.array.ptr[7] = clmdep_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(clmdep_msgpack::object const& o)
550     {
551         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
552         const size_t size = o.via.array.size;
553         if(size > 0) {
554             clmdep_msgpack::object *ptr = o.via.array.ptr;
555             switch(size) {
556             default:
557             case 9: ptr[8].convert(a8);
558             case 8: ptr[7].convert(a7);
559             case 7: ptr[6].convert(a6);
560             case 6: ptr[5].convert(a5);
561             case 5: ptr[4].convert(a4);
562             case 4: ptr[3].convert(a3);
563             case 3: ptr[2].convert(a2);
564             case 2: ptr[1].convert(a1);
565             case 1: ptr[0].convert(a0);
566             }
567         }
568     }
569     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
570     {
571         o->type = clmdep_msgpack::type::ARRAY;
572         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*9));
573         o->via.array.size = 9;
574 
575         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
576         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
577         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
578         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
579         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
580         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
581         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
582         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
583         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
584     }
585 
586     A0& a0;
587     A1& a1;
588     A2& a2;
589     A3& a3;
590     A4& a4;
591     A5& a5;
592     A6& a6;
593     A7& a7;
594     A8& a8;
595 };
596 
597 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
598 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> {
599     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> value_type;
600     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> tuple_type;
601     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9) :
602         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9) {}
603     template <typename Packer>
604     void msgpack_pack(Packer& pk) const
605     {
606         pk.pack_array(10);
607 
608         pk.pack(a0);
609         pk.pack(a1);
610         pk.pack(a2);
611         pk.pack(a3);
612         pk.pack(a4);
613         pk.pack(a5);
614         pk.pack(a6);
615         pk.pack(a7);
616         pk.pack(a8);
617         pk.pack(a9);
618     }
619     void msgpack_unpack(clmdep_msgpack::object const& o)
620     {
621         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
622         const size_t size = o.via.array.size;
623         if(size > 0) {
624             clmdep_msgpack::object *ptr = o.via.array.ptr;
625             switch(size) {
626             default:
627             case 10: ptr[9].convert(a9);
628             case 9: ptr[8].convert(a8);
629             case 8: ptr[7].convert(a7);
630             case 7: ptr[6].convert(a6);
631             case 6: ptr[5].convert(a5);
632             case 5: ptr[4].convert(a4);
633             case 4: ptr[3].convert(a3);
634             case 3: ptr[2].convert(a2);
635             case 2: ptr[1].convert(a1);
636             case 1: ptr[0].convert(a0);
637             }
638         }
639     }
640     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
641     {
642         o->type = clmdep_msgpack::type::ARRAY;
643         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*10));
644         o->via.array.size = 10;
645 
646         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
647         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
648         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
649         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
650         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
651         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
652         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
653         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
654         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
655         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
656     }
657 
658     A0& a0;
659     A1& a1;
660     A2& a2;
661     A3& a3;
662     A4& a4;
663     A5& a5;
664     A6& a6;
665     A7& a7;
666     A8& a8;
667     A9& a9;
668 };
669 
670 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
671 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> {
672     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> value_type;
673     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> tuple_type;
674     define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10) :
675         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10) {}
676     template <typename Packer>
677     void msgpack_pack(Packer& pk) const
678     {
679         pk.pack_array(11);
680 
681         pk.pack(a0);
682         pk.pack(a1);
683         pk.pack(a2);
684         pk.pack(a3);
685         pk.pack(a4);
686         pk.pack(a5);
687         pk.pack(a6);
688         pk.pack(a7);
689         pk.pack(a8);
690         pk.pack(a9);
691         pk.pack(a10);
692     }
693     void msgpack_unpack(clmdep_msgpack::object const& o)
694     {
695         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
696         const size_t size = o.via.array.size;
697         if(size > 0) {
698             clmdep_msgpack::object *ptr = o.via.array.ptr;
699             switch(size) {
700             default:
701             case 11: ptr[10].convert(a10);
702             case 10: ptr[9].convert(a9);
703             case 9: ptr[8].convert(a8);
704             case 8: ptr[7].convert(a7);
705             case 7: ptr[6].convert(a6);
706             case 6: ptr[5].convert(a5);
707             case 5: ptr[4].convert(a4);
708             case 4: ptr[3].convert(a3);
709             case 3: ptr[2].convert(a2);
710             case 2: ptr[1].convert(a1);
711             case 1: ptr[0].convert(a0);
712             }
713         }
714     }
715     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
716     {
717         o->type = clmdep_msgpack::type::ARRAY;
718         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*11));
719         o->via.array.size = 11;
720 
721         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
722         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
723         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
724         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
725         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
726         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
727         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
728         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
729         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
730         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
731         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
732     }
733 
734     A0& a0;
735     A1& a1;
736     A2& a2;
737     A3& a3;
738     A4& a4;
739     A5& a5;
740     A6& a6;
741     A7& a7;
742     A8& a8;
743     A9& a9;
744     A10& a10;
745 };
746 
747 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>
748 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> {
749     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> value_type;
750     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> tuple_type;
751     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) :
752         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11) {}
753     template <typename Packer>
754     void msgpack_pack(Packer& pk) const
755     {
756         pk.pack_array(12);
757 
758         pk.pack(a0);
759         pk.pack(a1);
760         pk.pack(a2);
761         pk.pack(a3);
762         pk.pack(a4);
763         pk.pack(a5);
764         pk.pack(a6);
765         pk.pack(a7);
766         pk.pack(a8);
767         pk.pack(a9);
768         pk.pack(a10);
769         pk.pack(a11);
770     }
771     void msgpack_unpack(clmdep_msgpack::object const& o)
772     {
773         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
774         const size_t size = o.via.array.size;
775         if(size > 0) {
776             clmdep_msgpack::object *ptr = o.via.array.ptr;
777             switch(size) {
778             default:
779             case 12: ptr[11].convert(a11);
780             case 11: ptr[10].convert(a10);
781             case 10: ptr[9].convert(a9);
782             case 9: ptr[8].convert(a8);
783             case 8: ptr[7].convert(a7);
784             case 7: ptr[6].convert(a6);
785             case 6: ptr[5].convert(a5);
786             case 5: ptr[4].convert(a4);
787             case 4: ptr[3].convert(a3);
788             case 3: ptr[2].convert(a2);
789             case 2: ptr[1].convert(a1);
790             case 1: ptr[0].convert(a0);
791             }
792         }
793     }
794     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
795     {
796         o->type = clmdep_msgpack::type::ARRAY;
797         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*12));
798         o->via.array.size = 12;
799 
800         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
801         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
802         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
803         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
804         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
805         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
806         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
807         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
808         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
809         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
810         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
811         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
812     }
813 
814     A0& a0;
815     A1& a1;
816     A2& a2;
817     A3& a3;
818     A4& a4;
819     A5& a5;
820     A6& a6;
821     A7& a7;
822     A8& a8;
823     A9& a9;
824     A10& a10;
825     A11& a11;
826 };
827 
828 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>
829 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> {
830     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> value_type;
831     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> tuple_type;
832     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) :
833         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12) {}
834     template <typename Packer>
835     void msgpack_pack(Packer& pk) const
836     {
837         pk.pack_array(13);
838 
839         pk.pack(a0);
840         pk.pack(a1);
841         pk.pack(a2);
842         pk.pack(a3);
843         pk.pack(a4);
844         pk.pack(a5);
845         pk.pack(a6);
846         pk.pack(a7);
847         pk.pack(a8);
848         pk.pack(a9);
849         pk.pack(a10);
850         pk.pack(a11);
851         pk.pack(a12);
852     }
853     void msgpack_unpack(clmdep_msgpack::object const& o)
854     {
855         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
856         const size_t size = o.via.array.size;
857         if(size > 0) {
858             clmdep_msgpack::object *ptr = o.via.array.ptr;
859             switch(size) {
860             default:
861             case 13: ptr[12].convert(a12);
862             case 12: ptr[11].convert(a11);
863             case 11: ptr[10].convert(a10);
864             case 10: ptr[9].convert(a9);
865             case 9: ptr[8].convert(a8);
866             case 8: ptr[7].convert(a7);
867             case 7: ptr[6].convert(a6);
868             case 6: ptr[5].convert(a5);
869             case 5: ptr[4].convert(a4);
870             case 4: ptr[3].convert(a3);
871             case 3: ptr[2].convert(a2);
872             case 2: ptr[1].convert(a1);
873             case 1: ptr[0].convert(a0);
874             }
875         }
876     }
877     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
878     {
879         o->type = clmdep_msgpack::type::ARRAY;
880         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*13));
881         o->via.array.size = 13;
882 
883         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
884         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
885         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
886         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
887         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
888         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
889         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
890         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
891         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
892         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
893         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
894         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
895         o->via.array.ptr[12] = clmdep_msgpack::object(a12, 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     A12& a12;
911 };
912 
913 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>
914 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> {
915     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> value_type;
916     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> tuple_type;
917     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) :
918         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13) {}
919     template <typename Packer>
920     void msgpack_pack(Packer& pk) const
921     {
922         pk.pack_array(14);
923 
924         pk.pack(a0);
925         pk.pack(a1);
926         pk.pack(a2);
927         pk.pack(a3);
928         pk.pack(a4);
929         pk.pack(a5);
930         pk.pack(a6);
931         pk.pack(a7);
932         pk.pack(a8);
933         pk.pack(a9);
934         pk.pack(a10);
935         pk.pack(a11);
936         pk.pack(a12);
937         pk.pack(a13);
938     }
939     void msgpack_unpack(clmdep_msgpack::object const& o)
940     {
941         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
942         const size_t size = o.via.array.size;
943         if(size > 0) {
944             clmdep_msgpack::object *ptr = o.via.array.ptr;
945             switch(size) {
946             default:
947             case 14: ptr[13].convert(a13);
948             case 13: ptr[12].convert(a12);
949             case 12: ptr[11].convert(a11);
950             case 11: ptr[10].convert(a10);
951             case 10: ptr[9].convert(a9);
952             case 9: ptr[8].convert(a8);
953             case 8: ptr[7].convert(a7);
954             case 7: ptr[6].convert(a6);
955             case 6: ptr[5].convert(a5);
956             case 5: ptr[4].convert(a4);
957             case 4: ptr[3].convert(a3);
958             case 3: ptr[2].convert(a2);
959             case 2: ptr[1].convert(a1);
960             case 1: ptr[0].convert(a0);
961             }
962         }
963     }
964     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
965     {
966         o->type = clmdep_msgpack::type::ARRAY;
967         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*14));
968         o->via.array.size = 14;
969 
970         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
971         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
972         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
973         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
974         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
975         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
976         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
977         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
978         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
979         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
980         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
981         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
982         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
983         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
984     }
985 
986     A0& a0;
987     A1& a1;
988     A2& a2;
989     A3& a3;
990     A4& a4;
991     A5& a5;
992     A6& a6;
993     A7& a7;
994     A8& a8;
995     A9& a9;
996     A10& a10;
997     A11& a11;
998     A12& a12;
999     A13& a13;
1000 };
1001 
1002 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>
1003 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> {
1004     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> value_type;
1005     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> tuple_type;
1006     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) :
1007         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14) {}
1008     template <typename Packer>
1009     void msgpack_pack(Packer& pk) const
1010     {
1011         pk.pack_array(15);
1012 
1013         pk.pack(a0);
1014         pk.pack(a1);
1015         pk.pack(a2);
1016         pk.pack(a3);
1017         pk.pack(a4);
1018         pk.pack(a5);
1019         pk.pack(a6);
1020         pk.pack(a7);
1021         pk.pack(a8);
1022         pk.pack(a9);
1023         pk.pack(a10);
1024         pk.pack(a11);
1025         pk.pack(a12);
1026         pk.pack(a13);
1027         pk.pack(a14);
1028     }
1029     void msgpack_unpack(clmdep_msgpack::object const& o)
1030     {
1031         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
1032         const size_t size = o.via.array.size;
1033         if(size > 0) {
1034             clmdep_msgpack::object *ptr = o.via.array.ptr;
1035             switch(size) {
1036             default:
1037             case 15: ptr[14].convert(a14);
1038             case 14: ptr[13].convert(a13);
1039             case 13: ptr[12].convert(a12);
1040             case 12: ptr[11].convert(a11);
1041             case 11: ptr[10].convert(a10);
1042             case 10: ptr[9].convert(a9);
1043             case 9: ptr[8].convert(a8);
1044             case 8: ptr[7].convert(a7);
1045             case 7: ptr[6].convert(a6);
1046             case 6: ptr[5].convert(a5);
1047             case 5: ptr[4].convert(a4);
1048             case 4: ptr[3].convert(a3);
1049             case 3: ptr[2].convert(a2);
1050             case 2: ptr[1].convert(a1);
1051             case 1: ptr[0].convert(a0);
1052             }
1053         }
1054     }
1055     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
1056     {
1057         o->type = clmdep_msgpack::type::ARRAY;
1058         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*15));
1059         o->via.array.size = 15;
1060 
1061         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
1062         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
1063         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
1064         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
1065         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
1066         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
1067         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
1068         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
1069         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
1070         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
1071         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
1072         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
1073         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
1074         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
1075         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
1076     }
1077 
1078     A0& a0;
1079     A1& a1;
1080     A2& a2;
1081     A3& a3;
1082     A4& a4;
1083     A5& a5;
1084     A6& a6;
1085     A7& a7;
1086     A8& a8;
1087     A9& a9;
1088     A10& a10;
1089     A11& a11;
1090     A12& a12;
1091     A13& a13;
1092     A14& a14;
1093 };
1094 
1095 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>
1096 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> {
1097     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> value_type;
1098     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> tuple_type;
1099     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) :
1100         a0(_a0), a1(_a1), a2(_a2), 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) {}
1101     template <typename Packer>
1102     void msgpack_pack(Packer& pk) const
1103     {
1104         pk.pack_array(16);
1105 
1106         pk.pack(a0);
1107         pk.pack(a1);
1108         pk.pack(a2);
1109         pk.pack(a3);
1110         pk.pack(a4);
1111         pk.pack(a5);
1112         pk.pack(a6);
1113         pk.pack(a7);
1114         pk.pack(a8);
1115         pk.pack(a9);
1116         pk.pack(a10);
1117         pk.pack(a11);
1118         pk.pack(a12);
1119         pk.pack(a13);
1120         pk.pack(a14);
1121         pk.pack(a15);
1122     }
1123     void msgpack_unpack(clmdep_msgpack::object const& o)
1124     {
1125         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
1126         const size_t size = o.via.array.size;
1127         if(size > 0) {
1128             clmdep_msgpack::object *ptr = o.via.array.ptr;
1129             switch(size) {
1130             default:
1131             case 16: ptr[15].convert(a15);
1132             case 15: ptr[14].convert(a14);
1133             case 14: ptr[13].convert(a13);
1134             case 13: ptr[12].convert(a12);
1135             case 12: ptr[11].convert(a11);
1136             case 11: ptr[10].convert(a10);
1137             case 10: ptr[9].convert(a9);
1138             case 9: ptr[8].convert(a8);
1139             case 8: ptr[7].convert(a7);
1140             case 7: ptr[6].convert(a6);
1141             case 6: ptr[5].convert(a5);
1142             case 5: ptr[4].convert(a4);
1143             case 4: ptr[3].convert(a3);
1144             case 3: ptr[2].convert(a2);
1145             case 2: ptr[1].convert(a1);
1146             case 1: ptr[0].convert(a0);
1147             }
1148         }
1149     }
1150     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
1151     {
1152         o->type = clmdep_msgpack::type::ARRAY;
1153         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*16));
1154         o->via.array.size = 16;
1155 
1156         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
1157         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
1158         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
1159         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
1160         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
1161         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
1162         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
1163         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
1164         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
1165         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
1166         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
1167         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
1168         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
1169         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
1170         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
1171         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
1172     }
1173 
1174     A0& a0;
1175     A1& a1;
1176     A2& a2;
1177     A3& a3;
1178     A4& a4;
1179     A5& a5;
1180     A6& a6;
1181     A7& a7;
1182     A8& a8;
1183     A9& a9;
1184     A10& a10;
1185     A11& a11;
1186     A12& a12;
1187     A13& a13;
1188     A14& a14;
1189     A15& a15;
1190 };
1191 
1192 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>
1193 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> {
1194     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> value_type;
1195     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> tuple_type;
1196     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) :
1197         a0(_a0), a1(_a1), a2(_a2), 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) {}
1198     template <typename Packer>
1199     void msgpack_pack(Packer& pk) const
1200     {
1201         pk.pack_array(17);
1202 
1203         pk.pack(a0);
1204         pk.pack(a1);
1205         pk.pack(a2);
1206         pk.pack(a3);
1207         pk.pack(a4);
1208         pk.pack(a5);
1209         pk.pack(a6);
1210         pk.pack(a7);
1211         pk.pack(a8);
1212         pk.pack(a9);
1213         pk.pack(a10);
1214         pk.pack(a11);
1215         pk.pack(a12);
1216         pk.pack(a13);
1217         pk.pack(a14);
1218         pk.pack(a15);
1219         pk.pack(a16);
1220     }
1221     void msgpack_unpack(clmdep_msgpack::object const& o)
1222     {
1223         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
1224         const size_t size = o.via.array.size;
1225         if(size > 0) {
1226             clmdep_msgpack::object *ptr = o.via.array.ptr;
1227             switch(size) {
1228             default:
1229             case 17: ptr[16].convert(a16);
1230             case 16: ptr[15].convert(a15);
1231             case 15: ptr[14].convert(a14);
1232             case 14: ptr[13].convert(a13);
1233             case 13: ptr[12].convert(a12);
1234             case 12: ptr[11].convert(a11);
1235             case 11: ptr[10].convert(a10);
1236             case 10: ptr[9].convert(a9);
1237             case 9: ptr[8].convert(a8);
1238             case 8: ptr[7].convert(a7);
1239             case 7: ptr[6].convert(a6);
1240             case 6: ptr[5].convert(a5);
1241             case 5: ptr[4].convert(a4);
1242             case 4: ptr[3].convert(a3);
1243             case 3: ptr[2].convert(a2);
1244             case 2: ptr[1].convert(a1);
1245             case 1: ptr[0].convert(a0);
1246             }
1247         }
1248     }
1249     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
1250     {
1251         o->type = clmdep_msgpack::type::ARRAY;
1252         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*17));
1253         o->via.array.size = 17;
1254 
1255         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
1256         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
1257         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
1258         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
1259         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
1260         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
1261         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
1262         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
1263         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
1264         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
1265         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
1266         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
1267         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
1268         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
1269         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
1270         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
1271         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
1272     }
1273 
1274     A0& a0;
1275     A1& a1;
1276     A2& a2;
1277     A3& a3;
1278     A4& a4;
1279     A5& a5;
1280     A6& a6;
1281     A7& a7;
1282     A8& a8;
1283     A9& a9;
1284     A10& a10;
1285     A11& a11;
1286     A12& a12;
1287     A13& a13;
1288     A14& a14;
1289     A15& a15;
1290     A16& a16;
1291 };
1292 
1293 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>
1294 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> {
1295     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> value_type;
1296     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> tuple_type;
1297     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) :
1298         a0(_a0), a1(_a1), a2(_a2), 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) {}
1299     template <typename Packer>
1300     void msgpack_pack(Packer& pk) const
1301     {
1302         pk.pack_array(18);
1303 
1304         pk.pack(a0);
1305         pk.pack(a1);
1306         pk.pack(a2);
1307         pk.pack(a3);
1308         pk.pack(a4);
1309         pk.pack(a5);
1310         pk.pack(a6);
1311         pk.pack(a7);
1312         pk.pack(a8);
1313         pk.pack(a9);
1314         pk.pack(a10);
1315         pk.pack(a11);
1316         pk.pack(a12);
1317         pk.pack(a13);
1318         pk.pack(a14);
1319         pk.pack(a15);
1320         pk.pack(a16);
1321         pk.pack(a17);
1322     }
1323     void msgpack_unpack(clmdep_msgpack::object const& o)
1324     {
1325         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
1326         const size_t size = o.via.array.size;
1327         if(size > 0) {
1328             clmdep_msgpack::object *ptr = o.via.array.ptr;
1329             switch(size) {
1330             default:
1331             case 18: ptr[17].convert(a17);
1332             case 17: ptr[16].convert(a16);
1333             case 16: ptr[15].convert(a15);
1334             case 15: ptr[14].convert(a14);
1335             case 14: ptr[13].convert(a13);
1336             case 13: ptr[12].convert(a12);
1337             case 12: ptr[11].convert(a11);
1338             case 11: ptr[10].convert(a10);
1339             case 10: ptr[9].convert(a9);
1340             case 9: ptr[8].convert(a8);
1341             case 8: ptr[7].convert(a7);
1342             case 7: ptr[6].convert(a6);
1343             case 6: ptr[5].convert(a5);
1344             case 5: ptr[4].convert(a4);
1345             case 4: ptr[3].convert(a3);
1346             case 3: ptr[2].convert(a2);
1347             case 2: ptr[1].convert(a1);
1348             case 1: ptr[0].convert(a0);
1349             }
1350         }
1351     }
1352     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
1353     {
1354         o->type = clmdep_msgpack::type::ARRAY;
1355         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*18));
1356         o->via.array.size = 18;
1357 
1358         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
1359         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
1360         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
1361         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
1362         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
1363         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
1364         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
1365         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
1366         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
1367         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
1368         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
1369         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
1370         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
1371         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
1372         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
1373         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
1374         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
1375         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
1376     }
1377 
1378     A0& a0;
1379     A1& a1;
1380     A2& a2;
1381     A3& a3;
1382     A4& a4;
1383     A5& a5;
1384     A6& a6;
1385     A7& a7;
1386     A8& a8;
1387     A9& a9;
1388     A10& a10;
1389     A11& a11;
1390     A12& a12;
1391     A13& a13;
1392     A14& a14;
1393     A15& a15;
1394     A16& a16;
1395     A17& a17;
1396 };
1397 
1398 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>
1399 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> {
1400     typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> value_type;
1401     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> tuple_type;
1402     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) :
1403         a0(_a0), a1(_a1), a2(_a2), 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) {}
1404     template <typename Packer>
1405     void msgpack_pack(Packer& pk) const
1406     {
1407         pk.pack_array(19);
1408 
1409         pk.pack(a0);
1410         pk.pack(a1);
1411         pk.pack(a2);
1412         pk.pack(a3);
1413         pk.pack(a4);
1414         pk.pack(a5);
1415         pk.pack(a6);
1416         pk.pack(a7);
1417         pk.pack(a8);
1418         pk.pack(a9);
1419         pk.pack(a10);
1420         pk.pack(a11);
1421         pk.pack(a12);
1422         pk.pack(a13);
1423         pk.pack(a14);
1424         pk.pack(a15);
1425         pk.pack(a16);
1426         pk.pack(a17);
1427         pk.pack(a18);
1428     }
1429     void msgpack_unpack(clmdep_msgpack::object const& o)
1430     {
1431         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
1432         const size_t size = o.via.array.size;
1433         if(size > 0) {
1434             clmdep_msgpack::object *ptr = o.via.array.ptr;
1435             switch(size) {
1436             default:
1437             case 19: ptr[18].convert(a18);
1438             case 18: ptr[17].convert(a17);
1439             case 17: ptr[16].convert(a16);
1440             case 16: ptr[15].convert(a15);
1441             case 15: ptr[14].convert(a14);
1442             case 14: ptr[13].convert(a13);
1443             case 13: ptr[12].convert(a12);
1444             case 12: ptr[11].convert(a11);
1445             case 11: ptr[10].convert(a10);
1446             case 10: ptr[9].convert(a9);
1447             case 9: ptr[8].convert(a8);
1448             case 8: ptr[7].convert(a7);
1449             case 7: ptr[6].convert(a6);
1450             case 6: ptr[5].convert(a5);
1451             case 5: ptr[4].convert(a4);
1452             case 4: ptr[3].convert(a3);
1453             case 3: ptr[2].convert(a2);
1454             case 2: ptr[1].convert(a1);
1455             case 1: ptr[0].convert(a0);
1456             }
1457         }
1458     }
1459     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
1460     {
1461         o->type = clmdep_msgpack::type::ARRAY;
1462         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*19));
1463         o->via.array.size = 19;
1464 
1465         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
1466         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
1467         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
1468         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
1469         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
1470         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
1471         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
1472         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
1473         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
1474         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
1475         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
1476         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
1477         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
1478         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
1479         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
1480         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
1481         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
1482         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
1483         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
1484     }
1485 
1486     A0& a0;
1487     A1& a1;
1488     A2& a2;
1489     A3& a3;
1490     A4& a4;
1491     A5& a5;
1492     A6& a6;
1493     A7& a7;
1494     A8& a8;
1495     A9& a9;
1496     A10& a10;
1497     A11& a11;
1498     A12& a12;
1499     A13& a13;
1500     A14& a14;
1501     A15& a15;
1502     A16& a16;
1503     A17& a17;
1504     A18& a18;
1505 };
1506 
1507 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>
1508 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> {
1509     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;
1510     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> tuple_type;
1511     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) :
1512         a0(_a0), a1(_a1), a2(_a2), 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) {}
1513     template <typename Packer>
1514     void msgpack_pack(Packer& pk) const
1515     {
1516         pk.pack_array(20);
1517 
1518         pk.pack(a0);
1519         pk.pack(a1);
1520         pk.pack(a2);
1521         pk.pack(a3);
1522         pk.pack(a4);
1523         pk.pack(a5);
1524         pk.pack(a6);
1525         pk.pack(a7);
1526         pk.pack(a8);
1527         pk.pack(a9);
1528         pk.pack(a10);
1529         pk.pack(a11);
1530         pk.pack(a12);
1531         pk.pack(a13);
1532         pk.pack(a14);
1533         pk.pack(a15);
1534         pk.pack(a16);
1535         pk.pack(a17);
1536         pk.pack(a18);
1537         pk.pack(a19);
1538     }
1539     void msgpack_unpack(clmdep_msgpack::object const& o)
1540     {
1541         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
1542         const size_t size = o.via.array.size;
1543         if(size > 0) {
1544             clmdep_msgpack::object *ptr = o.via.array.ptr;
1545             switch(size) {
1546             default:
1547             case 20: ptr[19].convert(a19);
1548             case 19: ptr[18].convert(a18);
1549             case 18: ptr[17].convert(a17);
1550             case 17: ptr[16].convert(a16);
1551             case 16: ptr[15].convert(a15);
1552             case 15: ptr[14].convert(a14);
1553             case 14: ptr[13].convert(a13);
1554             case 13: ptr[12].convert(a12);
1555             case 12: ptr[11].convert(a11);
1556             case 11: ptr[10].convert(a10);
1557             case 10: ptr[9].convert(a9);
1558             case 9: ptr[8].convert(a8);
1559             case 8: ptr[7].convert(a7);
1560             case 7: ptr[6].convert(a6);
1561             case 6: ptr[5].convert(a5);
1562             case 5: ptr[4].convert(a4);
1563             case 4: ptr[3].convert(a3);
1564             case 3: ptr[2].convert(a2);
1565             case 2: ptr[1].convert(a1);
1566             case 1: ptr[0].convert(a0);
1567             }
1568         }
1569     }
1570     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
1571     {
1572         o->type = clmdep_msgpack::type::ARRAY;
1573         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*20));
1574         o->via.array.size = 20;
1575 
1576         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
1577         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
1578         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
1579         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
1580         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
1581         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
1582         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
1583         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
1584         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
1585         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
1586         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
1587         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
1588         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
1589         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
1590         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
1591         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
1592         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
1593         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
1594         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
1595         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
1596     }
1597 
1598     A0& a0;
1599     A1& a1;
1600     A2& a2;
1601     A3& a3;
1602     A4& a4;
1603     A5& a5;
1604     A6& a6;
1605     A7& a7;
1606     A8& a8;
1607     A9& a9;
1608     A10& a10;
1609     A11& a11;
1610     A12& a12;
1611     A13& a13;
1612     A14& a14;
1613     A15& a15;
1614     A16& a16;
1615     A17& a17;
1616     A18& a18;
1617     A19& a19;
1618 };
1619 
1620 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>
1621 struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> {
1622     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;
1623     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;
1624     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) :
1625         a0(_a0), a1(_a1), a2(_a2), 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) {}
1626     template <typename Packer>
1627     void msgpack_pack(Packer& pk) const
1628     {
1629         pk.pack_array(21);
1630 
1631         pk.pack(a0);
1632         pk.pack(a1);
1633         pk.pack(a2);
1634         pk.pack(a3);
1635         pk.pack(a4);
1636         pk.pack(a5);
1637         pk.pack(a6);
1638         pk.pack(a7);
1639         pk.pack(a8);
1640         pk.pack(a9);
1641         pk.pack(a10);
1642         pk.pack(a11);
1643         pk.pack(a12);
1644         pk.pack(a13);
1645         pk.pack(a14);
1646         pk.pack(a15);
1647         pk.pack(a16);
1648         pk.pack(a17);
1649         pk.pack(a18);
1650         pk.pack(a19);
1651         pk.pack(a20);
1652     }
1653     void msgpack_unpack(clmdep_msgpack::object const& o)
1654     {
1655         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
1656         const size_t size = o.via.array.size;
1657         if(size > 0) {
1658             clmdep_msgpack::object *ptr = o.via.array.ptr;
1659             switch(size) {
1660             default:
1661             case 21: ptr[20].convert(a20);
1662             case 20: ptr[19].convert(a19);
1663             case 19: ptr[18].convert(a18);
1664             case 18: ptr[17].convert(a17);
1665             case 17: ptr[16].convert(a16);
1666             case 16: ptr[15].convert(a15);
1667             case 15: ptr[14].convert(a14);
1668             case 14: ptr[13].convert(a13);
1669             case 13: ptr[12].convert(a12);
1670             case 12: ptr[11].convert(a11);
1671             case 11: ptr[10].convert(a10);
1672             case 10: ptr[9].convert(a9);
1673             case 9: ptr[8].convert(a8);
1674             case 8: ptr[7].convert(a7);
1675             case 7: ptr[6].convert(a6);
1676             case 6: ptr[5].convert(a5);
1677             case 5: ptr[4].convert(a4);
1678             case 4: ptr[3].convert(a3);
1679             case 3: ptr[2].convert(a2);
1680             case 2: ptr[1].convert(a1);
1681             case 1: ptr[0].convert(a0);
1682             }
1683         }
1684     }
1685     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
1686     {
1687         o->type = clmdep_msgpack::type::ARRAY;
1688         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*21));
1689         o->via.array.size = 21;
1690 
1691         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
1692         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
1693         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
1694         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
1695         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
1696         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
1697         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
1698         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
1699         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
1700         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
1701         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
1702         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
1703         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
1704         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
1705         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
1706         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
1707         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
1708         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
1709         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
1710         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
1711         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
1712     }
1713 
1714     A0& a0;
1715     A1& a1;
1716     A2& a2;
1717     A3& a3;
1718     A4& a4;
1719     A5& a5;
1720     A6& a6;
1721     A7& a7;
1722     A8& a8;
1723     A9& a9;
1724     A10& a10;
1725     A11& a11;
1726     A12& a12;
1727     A13& a13;
1728     A14& a14;
1729     A15& a15;
1730     A16& a16;
1731     A17& a17;
1732     A18& a18;
1733     A19& a19;
1734     A20& a20;
1735 };
1736 
1737 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>
1738 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> {
1739     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;
1740     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;
1741     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) :
1742         a0(_a0), a1(_a1), a2(_a2), 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) {}
1743     template <typename Packer>
1744     void msgpack_pack(Packer& pk) const
1745     {
1746         pk.pack_array(22);
1747 
1748         pk.pack(a0);
1749         pk.pack(a1);
1750         pk.pack(a2);
1751         pk.pack(a3);
1752         pk.pack(a4);
1753         pk.pack(a5);
1754         pk.pack(a6);
1755         pk.pack(a7);
1756         pk.pack(a8);
1757         pk.pack(a9);
1758         pk.pack(a10);
1759         pk.pack(a11);
1760         pk.pack(a12);
1761         pk.pack(a13);
1762         pk.pack(a14);
1763         pk.pack(a15);
1764         pk.pack(a16);
1765         pk.pack(a17);
1766         pk.pack(a18);
1767         pk.pack(a19);
1768         pk.pack(a20);
1769         pk.pack(a21);
1770     }
1771     void msgpack_unpack(clmdep_msgpack::object const& o)
1772     {
1773         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
1774         const size_t size = o.via.array.size;
1775         if(size > 0) {
1776             clmdep_msgpack::object *ptr = o.via.array.ptr;
1777             switch(size) {
1778             default:
1779             case 22: ptr[21].convert(a21);
1780             case 21: ptr[20].convert(a20);
1781             case 20: ptr[19].convert(a19);
1782             case 19: ptr[18].convert(a18);
1783             case 18: ptr[17].convert(a17);
1784             case 17: ptr[16].convert(a16);
1785             case 16: ptr[15].convert(a15);
1786             case 15: ptr[14].convert(a14);
1787             case 14: ptr[13].convert(a13);
1788             case 13: ptr[12].convert(a12);
1789             case 12: ptr[11].convert(a11);
1790             case 11: ptr[10].convert(a10);
1791             case 10: ptr[9].convert(a9);
1792             case 9: ptr[8].convert(a8);
1793             case 8: ptr[7].convert(a7);
1794             case 7: ptr[6].convert(a6);
1795             case 6: ptr[5].convert(a5);
1796             case 5: ptr[4].convert(a4);
1797             case 4: ptr[3].convert(a3);
1798             case 3: ptr[2].convert(a2);
1799             case 2: ptr[1].convert(a1);
1800             case 1: ptr[0].convert(a0);
1801             }
1802         }
1803     }
1804     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
1805     {
1806         o->type = clmdep_msgpack::type::ARRAY;
1807         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*22));
1808         o->via.array.size = 22;
1809 
1810         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
1811         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
1812         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
1813         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
1814         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
1815         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
1816         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
1817         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
1818         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
1819         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
1820         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
1821         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
1822         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
1823         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
1824         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
1825         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
1826         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
1827         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
1828         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
1829         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
1830         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
1831         o->via.array.ptr[21] = clmdep_msgpack::object(a21, z);
1832     }
1833 
1834     A0& a0;
1835     A1& a1;
1836     A2& a2;
1837     A3& a3;
1838     A4& a4;
1839     A5& a5;
1840     A6& a6;
1841     A7& a7;
1842     A8& a8;
1843     A9& a9;
1844     A10& a10;
1845     A11& a11;
1846     A12& a12;
1847     A13& a13;
1848     A14& a14;
1849     A15& a15;
1850     A16& a16;
1851     A17& a17;
1852     A18& a18;
1853     A19& a19;
1854     A20& a20;
1855     A21& a21;
1856 };
1857 
1858 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>
1859 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> {
1860     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;
1861     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;
1862     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) :
1863         a0(_a0), a1(_a1), a2(_a2), 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) {}
1864     template <typename Packer>
1865     void msgpack_pack(Packer& pk) const
1866     {
1867         pk.pack_array(23);
1868 
1869         pk.pack(a0);
1870         pk.pack(a1);
1871         pk.pack(a2);
1872         pk.pack(a3);
1873         pk.pack(a4);
1874         pk.pack(a5);
1875         pk.pack(a6);
1876         pk.pack(a7);
1877         pk.pack(a8);
1878         pk.pack(a9);
1879         pk.pack(a10);
1880         pk.pack(a11);
1881         pk.pack(a12);
1882         pk.pack(a13);
1883         pk.pack(a14);
1884         pk.pack(a15);
1885         pk.pack(a16);
1886         pk.pack(a17);
1887         pk.pack(a18);
1888         pk.pack(a19);
1889         pk.pack(a20);
1890         pk.pack(a21);
1891         pk.pack(a22);
1892     }
1893     void msgpack_unpack(clmdep_msgpack::object const& o)
1894     {
1895         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
1896         const size_t size = o.via.array.size;
1897         if(size > 0) {
1898             clmdep_msgpack::object *ptr = o.via.array.ptr;
1899             switch(size) {
1900             default:
1901             case 23: ptr[22].convert(a22);
1902             case 22: ptr[21].convert(a21);
1903             case 21: ptr[20].convert(a20);
1904             case 20: ptr[19].convert(a19);
1905             case 19: ptr[18].convert(a18);
1906             case 18: ptr[17].convert(a17);
1907             case 17: ptr[16].convert(a16);
1908             case 16: ptr[15].convert(a15);
1909             case 15: ptr[14].convert(a14);
1910             case 14: ptr[13].convert(a13);
1911             case 13: ptr[12].convert(a12);
1912             case 12: ptr[11].convert(a11);
1913             case 11: ptr[10].convert(a10);
1914             case 10: ptr[9].convert(a9);
1915             case 9: ptr[8].convert(a8);
1916             case 8: ptr[7].convert(a7);
1917             case 7: ptr[6].convert(a6);
1918             case 6: ptr[5].convert(a5);
1919             case 5: ptr[4].convert(a4);
1920             case 4: ptr[3].convert(a3);
1921             case 3: ptr[2].convert(a2);
1922             case 2: ptr[1].convert(a1);
1923             case 1: ptr[0].convert(a0);
1924             }
1925         }
1926     }
1927     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
1928     {
1929         o->type = clmdep_msgpack::type::ARRAY;
1930         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*23));
1931         o->via.array.size = 23;
1932 
1933         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
1934         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
1935         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
1936         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
1937         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
1938         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
1939         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
1940         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
1941         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
1942         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
1943         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
1944         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
1945         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
1946         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
1947         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
1948         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
1949         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
1950         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
1951         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
1952         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
1953         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
1954         o->via.array.ptr[21] = clmdep_msgpack::object(a21, z);
1955         o->via.array.ptr[22] = clmdep_msgpack::object(a22, z);
1956     }
1957 
1958     A0& a0;
1959     A1& a1;
1960     A2& a2;
1961     A3& a3;
1962     A4& a4;
1963     A5& a5;
1964     A6& a6;
1965     A7& a7;
1966     A8& a8;
1967     A9& a9;
1968     A10& a10;
1969     A11& a11;
1970     A12& a12;
1971     A13& a13;
1972     A14& a14;
1973     A15& a15;
1974     A16& a16;
1975     A17& a17;
1976     A18& a18;
1977     A19& a19;
1978     A20& a20;
1979     A21& a21;
1980     A22& a22;
1981 };
1982 
1983 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>
1984 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> {
1985     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;
1986     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;
1987     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) :
1988         a0(_a0), a1(_a1), a2(_a2), 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) {}
1989     template <typename Packer>
1990     void msgpack_pack(Packer& pk) const
1991     {
1992         pk.pack_array(24);
1993 
1994         pk.pack(a0);
1995         pk.pack(a1);
1996         pk.pack(a2);
1997         pk.pack(a3);
1998         pk.pack(a4);
1999         pk.pack(a5);
2000         pk.pack(a6);
2001         pk.pack(a7);
2002         pk.pack(a8);
2003         pk.pack(a9);
2004         pk.pack(a10);
2005         pk.pack(a11);
2006         pk.pack(a12);
2007         pk.pack(a13);
2008         pk.pack(a14);
2009         pk.pack(a15);
2010         pk.pack(a16);
2011         pk.pack(a17);
2012         pk.pack(a18);
2013         pk.pack(a19);
2014         pk.pack(a20);
2015         pk.pack(a21);
2016         pk.pack(a22);
2017         pk.pack(a23);
2018     }
2019     void msgpack_unpack(clmdep_msgpack::object const& o)
2020     {
2021         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
2022         const size_t size = o.via.array.size;
2023         if(size > 0) {
2024             clmdep_msgpack::object *ptr = o.via.array.ptr;
2025             switch(size) {
2026             default:
2027             case 24: ptr[23].convert(a23);
2028             case 23: ptr[22].convert(a22);
2029             case 22: ptr[21].convert(a21);
2030             case 21: ptr[20].convert(a20);
2031             case 20: ptr[19].convert(a19);
2032             case 19: ptr[18].convert(a18);
2033             case 18: ptr[17].convert(a17);
2034             case 17: ptr[16].convert(a16);
2035             case 16: ptr[15].convert(a15);
2036             case 15: ptr[14].convert(a14);
2037             case 14: ptr[13].convert(a13);
2038             case 13: ptr[12].convert(a12);
2039             case 12: ptr[11].convert(a11);
2040             case 11: ptr[10].convert(a10);
2041             case 10: ptr[9].convert(a9);
2042             case 9: ptr[8].convert(a8);
2043             case 8: ptr[7].convert(a7);
2044             case 7: ptr[6].convert(a6);
2045             case 6: ptr[5].convert(a5);
2046             case 5: ptr[4].convert(a4);
2047             case 4: ptr[3].convert(a3);
2048             case 3: ptr[2].convert(a2);
2049             case 2: ptr[1].convert(a1);
2050             case 1: ptr[0].convert(a0);
2051             }
2052         }
2053     }
2054     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
2055     {
2056         o->type = clmdep_msgpack::type::ARRAY;
2057         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*24));
2058         o->via.array.size = 24;
2059 
2060         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
2061         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
2062         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
2063         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
2064         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
2065         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
2066         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
2067         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
2068         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
2069         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
2070         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
2071         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
2072         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
2073         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
2074         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
2075         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
2076         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
2077         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
2078         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
2079         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
2080         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
2081         o->via.array.ptr[21] = clmdep_msgpack::object(a21, z);
2082         o->via.array.ptr[22] = clmdep_msgpack::object(a22, z);
2083         o->via.array.ptr[23] = clmdep_msgpack::object(a23, z);
2084     }
2085 
2086     A0& a0;
2087     A1& a1;
2088     A2& a2;
2089     A3& a3;
2090     A4& a4;
2091     A5& a5;
2092     A6& a6;
2093     A7& a7;
2094     A8& a8;
2095     A9& a9;
2096     A10& a10;
2097     A11& a11;
2098     A12& a12;
2099     A13& a13;
2100     A14& a14;
2101     A15& a15;
2102     A16& a16;
2103     A17& a17;
2104     A18& a18;
2105     A19& a19;
2106     A20& a20;
2107     A21& a21;
2108     A22& a22;
2109     A23& a23;
2110 };
2111 
2112 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>
2113 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> {
2114     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;
2115     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;
2116     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) :
2117         a0(_a0), a1(_a1), a2(_a2), 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) {}
2118     template <typename Packer>
2119     void msgpack_pack(Packer& pk) const
2120     {
2121         pk.pack_array(25);
2122 
2123         pk.pack(a0);
2124         pk.pack(a1);
2125         pk.pack(a2);
2126         pk.pack(a3);
2127         pk.pack(a4);
2128         pk.pack(a5);
2129         pk.pack(a6);
2130         pk.pack(a7);
2131         pk.pack(a8);
2132         pk.pack(a9);
2133         pk.pack(a10);
2134         pk.pack(a11);
2135         pk.pack(a12);
2136         pk.pack(a13);
2137         pk.pack(a14);
2138         pk.pack(a15);
2139         pk.pack(a16);
2140         pk.pack(a17);
2141         pk.pack(a18);
2142         pk.pack(a19);
2143         pk.pack(a20);
2144         pk.pack(a21);
2145         pk.pack(a22);
2146         pk.pack(a23);
2147         pk.pack(a24);
2148     }
2149     void msgpack_unpack(clmdep_msgpack::object const& o)
2150     {
2151         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
2152         const size_t size = o.via.array.size;
2153         if(size > 0) {
2154             clmdep_msgpack::object *ptr = o.via.array.ptr;
2155             switch(size) {
2156             default:
2157             case 25: ptr[24].convert(a24);
2158             case 24: ptr[23].convert(a23);
2159             case 23: ptr[22].convert(a22);
2160             case 22: ptr[21].convert(a21);
2161             case 21: ptr[20].convert(a20);
2162             case 20: ptr[19].convert(a19);
2163             case 19: ptr[18].convert(a18);
2164             case 18: ptr[17].convert(a17);
2165             case 17: ptr[16].convert(a16);
2166             case 16: ptr[15].convert(a15);
2167             case 15: ptr[14].convert(a14);
2168             case 14: ptr[13].convert(a13);
2169             case 13: ptr[12].convert(a12);
2170             case 12: ptr[11].convert(a11);
2171             case 11: ptr[10].convert(a10);
2172             case 10: ptr[9].convert(a9);
2173             case 9: ptr[8].convert(a8);
2174             case 8: ptr[7].convert(a7);
2175             case 7: ptr[6].convert(a6);
2176             case 6: ptr[5].convert(a5);
2177             case 5: ptr[4].convert(a4);
2178             case 4: ptr[3].convert(a3);
2179             case 3: ptr[2].convert(a2);
2180             case 2: ptr[1].convert(a1);
2181             case 1: ptr[0].convert(a0);
2182             }
2183         }
2184     }
2185     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
2186     {
2187         o->type = clmdep_msgpack::type::ARRAY;
2188         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*25));
2189         o->via.array.size = 25;
2190 
2191         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
2192         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
2193         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
2194         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
2195         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
2196         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
2197         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
2198         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
2199         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
2200         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
2201         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
2202         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
2203         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
2204         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
2205         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
2206         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
2207         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
2208         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
2209         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
2210         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
2211         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
2212         o->via.array.ptr[21] = clmdep_msgpack::object(a21, z);
2213         o->via.array.ptr[22] = clmdep_msgpack::object(a22, z);
2214         o->via.array.ptr[23] = clmdep_msgpack::object(a23, z);
2215         o->via.array.ptr[24] = clmdep_msgpack::object(a24, z);
2216     }
2217 
2218     A0& a0;
2219     A1& a1;
2220     A2& a2;
2221     A3& a3;
2222     A4& a4;
2223     A5& a5;
2224     A6& a6;
2225     A7& a7;
2226     A8& a8;
2227     A9& a9;
2228     A10& a10;
2229     A11& a11;
2230     A12& a12;
2231     A13& a13;
2232     A14& a14;
2233     A15& a15;
2234     A16& a16;
2235     A17& a17;
2236     A18& a18;
2237     A19& a19;
2238     A20& a20;
2239     A21& a21;
2240     A22& a22;
2241     A23& a23;
2242     A24& a24;
2243 };
2244 
2245 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>
2246 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> {
2247     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;
2248     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;
2249     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) :
2250         a0(_a0), a1(_a1), a2(_a2), 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) {}
2251     template <typename Packer>
2252     void msgpack_pack(Packer& pk) const
2253     {
2254         pk.pack_array(26);
2255 
2256         pk.pack(a0);
2257         pk.pack(a1);
2258         pk.pack(a2);
2259         pk.pack(a3);
2260         pk.pack(a4);
2261         pk.pack(a5);
2262         pk.pack(a6);
2263         pk.pack(a7);
2264         pk.pack(a8);
2265         pk.pack(a9);
2266         pk.pack(a10);
2267         pk.pack(a11);
2268         pk.pack(a12);
2269         pk.pack(a13);
2270         pk.pack(a14);
2271         pk.pack(a15);
2272         pk.pack(a16);
2273         pk.pack(a17);
2274         pk.pack(a18);
2275         pk.pack(a19);
2276         pk.pack(a20);
2277         pk.pack(a21);
2278         pk.pack(a22);
2279         pk.pack(a23);
2280         pk.pack(a24);
2281         pk.pack(a25);
2282     }
2283     void msgpack_unpack(clmdep_msgpack::object const& o)
2284     {
2285         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
2286         const size_t size = o.via.array.size;
2287         if(size > 0) {
2288             clmdep_msgpack::object *ptr = o.via.array.ptr;
2289             switch(size) {
2290             default:
2291             case 26: ptr[25].convert(a25);
2292             case 25: ptr[24].convert(a24);
2293             case 24: ptr[23].convert(a23);
2294             case 23: ptr[22].convert(a22);
2295             case 22: ptr[21].convert(a21);
2296             case 21: ptr[20].convert(a20);
2297             case 20: ptr[19].convert(a19);
2298             case 19: ptr[18].convert(a18);
2299             case 18: ptr[17].convert(a17);
2300             case 17: ptr[16].convert(a16);
2301             case 16: ptr[15].convert(a15);
2302             case 15: ptr[14].convert(a14);
2303             case 14: ptr[13].convert(a13);
2304             case 13: ptr[12].convert(a12);
2305             case 12: ptr[11].convert(a11);
2306             case 11: ptr[10].convert(a10);
2307             case 10: ptr[9].convert(a9);
2308             case 9: ptr[8].convert(a8);
2309             case 8: ptr[7].convert(a7);
2310             case 7: ptr[6].convert(a6);
2311             case 6: ptr[5].convert(a5);
2312             case 5: ptr[4].convert(a4);
2313             case 4: ptr[3].convert(a3);
2314             case 3: ptr[2].convert(a2);
2315             case 2: ptr[1].convert(a1);
2316             case 1: ptr[0].convert(a0);
2317             }
2318         }
2319     }
2320     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
2321     {
2322         o->type = clmdep_msgpack::type::ARRAY;
2323         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*26));
2324         o->via.array.size = 26;
2325 
2326         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
2327         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
2328         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
2329         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
2330         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
2331         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
2332         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
2333         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
2334         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
2335         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
2336         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
2337         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
2338         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
2339         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
2340         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
2341         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
2342         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
2343         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
2344         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
2345         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
2346         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
2347         o->via.array.ptr[21] = clmdep_msgpack::object(a21, z);
2348         o->via.array.ptr[22] = clmdep_msgpack::object(a22, z);
2349         o->via.array.ptr[23] = clmdep_msgpack::object(a23, z);
2350         o->via.array.ptr[24] = clmdep_msgpack::object(a24, z);
2351         o->via.array.ptr[25] = clmdep_msgpack::object(a25, z);
2352     }
2353 
2354     A0& a0;
2355     A1& a1;
2356     A2& a2;
2357     A3& a3;
2358     A4& a4;
2359     A5& a5;
2360     A6& a6;
2361     A7& a7;
2362     A8& a8;
2363     A9& a9;
2364     A10& a10;
2365     A11& a11;
2366     A12& a12;
2367     A13& a13;
2368     A14& a14;
2369     A15& a15;
2370     A16& a16;
2371     A17& a17;
2372     A18& a18;
2373     A19& a19;
2374     A20& a20;
2375     A21& a21;
2376     A22& a22;
2377     A23& a23;
2378     A24& a24;
2379     A25& a25;
2380 };
2381 
2382 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>
2383 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> {
2384     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;
2385     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;
2386     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) :
2387         a0(_a0), a1(_a1), a2(_a2), 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) {}
2388     template <typename Packer>
2389     void msgpack_pack(Packer& pk) const
2390     {
2391         pk.pack_array(27);
2392 
2393         pk.pack(a0);
2394         pk.pack(a1);
2395         pk.pack(a2);
2396         pk.pack(a3);
2397         pk.pack(a4);
2398         pk.pack(a5);
2399         pk.pack(a6);
2400         pk.pack(a7);
2401         pk.pack(a8);
2402         pk.pack(a9);
2403         pk.pack(a10);
2404         pk.pack(a11);
2405         pk.pack(a12);
2406         pk.pack(a13);
2407         pk.pack(a14);
2408         pk.pack(a15);
2409         pk.pack(a16);
2410         pk.pack(a17);
2411         pk.pack(a18);
2412         pk.pack(a19);
2413         pk.pack(a20);
2414         pk.pack(a21);
2415         pk.pack(a22);
2416         pk.pack(a23);
2417         pk.pack(a24);
2418         pk.pack(a25);
2419         pk.pack(a26);
2420     }
2421     void msgpack_unpack(clmdep_msgpack::object const& o)
2422     {
2423         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
2424         const size_t size = o.via.array.size;
2425         if(size > 0) {
2426             clmdep_msgpack::object *ptr = o.via.array.ptr;
2427             switch(size) {
2428             default:
2429             case 27: ptr[26].convert(a26);
2430             case 26: ptr[25].convert(a25);
2431             case 25: ptr[24].convert(a24);
2432             case 24: ptr[23].convert(a23);
2433             case 23: ptr[22].convert(a22);
2434             case 22: ptr[21].convert(a21);
2435             case 21: ptr[20].convert(a20);
2436             case 20: ptr[19].convert(a19);
2437             case 19: ptr[18].convert(a18);
2438             case 18: ptr[17].convert(a17);
2439             case 17: ptr[16].convert(a16);
2440             case 16: ptr[15].convert(a15);
2441             case 15: ptr[14].convert(a14);
2442             case 14: ptr[13].convert(a13);
2443             case 13: ptr[12].convert(a12);
2444             case 12: ptr[11].convert(a11);
2445             case 11: ptr[10].convert(a10);
2446             case 10: ptr[9].convert(a9);
2447             case 9: ptr[8].convert(a8);
2448             case 8: ptr[7].convert(a7);
2449             case 7: ptr[6].convert(a6);
2450             case 6: ptr[5].convert(a5);
2451             case 5: ptr[4].convert(a4);
2452             case 4: ptr[3].convert(a3);
2453             case 3: ptr[2].convert(a2);
2454             case 2: ptr[1].convert(a1);
2455             case 1: ptr[0].convert(a0);
2456             }
2457         }
2458     }
2459     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
2460     {
2461         o->type = clmdep_msgpack::type::ARRAY;
2462         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*27));
2463         o->via.array.size = 27;
2464 
2465         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
2466         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
2467         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
2468         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
2469         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
2470         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
2471         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
2472         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
2473         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
2474         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
2475         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
2476         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
2477         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
2478         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
2479         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
2480         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
2481         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
2482         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
2483         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
2484         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
2485         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
2486         o->via.array.ptr[21] = clmdep_msgpack::object(a21, z);
2487         o->via.array.ptr[22] = clmdep_msgpack::object(a22, z);
2488         o->via.array.ptr[23] = clmdep_msgpack::object(a23, z);
2489         o->via.array.ptr[24] = clmdep_msgpack::object(a24, z);
2490         o->via.array.ptr[25] = clmdep_msgpack::object(a25, z);
2491         o->via.array.ptr[26] = clmdep_msgpack::object(a26, z);
2492     }
2493 
2494     A0& a0;
2495     A1& a1;
2496     A2& a2;
2497     A3& a3;
2498     A4& a4;
2499     A5& a5;
2500     A6& a6;
2501     A7& a7;
2502     A8& a8;
2503     A9& a9;
2504     A10& a10;
2505     A11& a11;
2506     A12& a12;
2507     A13& a13;
2508     A14& a14;
2509     A15& a15;
2510     A16& a16;
2511     A17& a17;
2512     A18& a18;
2513     A19& a19;
2514     A20& a20;
2515     A21& a21;
2516     A22& a22;
2517     A23& a23;
2518     A24& a24;
2519     A25& a25;
2520     A26& a26;
2521 };
2522 
2523 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>
2524 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> {
2525     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;
2526     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;
2527     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) :
2528         a0(_a0), a1(_a1), a2(_a2), 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) {}
2529     template <typename Packer>
2530     void msgpack_pack(Packer& pk) const
2531     {
2532         pk.pack_array(28);
2533 
2534         pk.pack(a0);
2535         pk.pack(a1);
2536         pk.pack(a2);
2537         pk.pack(a3);
2538         pk.pack(a4);
2539         pk.pack(a5);
2540         pk.pack(a6);
2541         pk.pack(a7);
2542         pk.pack(a8);
2543         pk.pack(a9);
2544         pk.pack(a10);
2545         pk.pack(a11);
2546         pk.pack(a12);
2547         pk.pack(a13);
2548         pk.pack(a14);
2549         pk.pack(a15);
2550         pk.pack(a16);
2551         pk.pack(a17);
2552         pk.pack(a18);
2553         pk.pack(a19);
2554         pk.pack(a20);
2555         pk.pack(a21);
2556         pk.pack(a22);
2557         pk.pack(a23);
2558         pk.pack(a24);
2559         pk.pack(a25);
2560         pk.pack(a26);
2561         pk.pack(a27);
2562     }
2563     void msgpack_unpack(clmdep_msgpack::object const& o)
2564     {
2565         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
2566         const size_t size = o.via.array.size;
2567         if(size > 0) {
2568             clmdep_msgpack::object *ptr = o.via.array.ptr;
2569             switch(size) {
2570             default:
2571             case 28: ptr[27].convert(a27);
2572             case 27: ptr[26].convert(a26);
2573             case 26: ptr[25].convert(a25);
2574             case 25: ptr[24].convert(a24);
2575             case 24: ptr[23].convert(a23);
2576             case 23: ptr[22].convert(a22);
2577             case 22: ptr[21].convert(a21);
2578             case 21: ptr[20].convert(a20);
2579             case 20: ptr[19].convert(a19);
2580             case 19: ptr[18].convert(a18);
2581             case 18: ptr[17].convert(a17);
2582             case 17: ptr[16].convert(a16);
2583             case 16: ptr[15].convert(a15);
2584             case 15: ptr[14].convert(a14);
2585             case 14: ptr[13].convert(a13);
2586             case 13: ptr[12].convert(a12);
2587             case 12: ptr[11].convert(a11);
2588             case 11: ptr[10].convert(a10);
2589             case 10: ptr[9].convert(a9);
2590             case 9: ptr[8].convert(a8);
2591             case 8: ptr[7].convert(a7);
2592             case 7: ptr[6].convert(a6);
2593             case 6: ptr[5].convert(a5);
2594             case 5: ptr[4].convert(a4);
2595             case 4: ptr[3].convert(a3);
2596             case 3: ptr[2].convert(a2);
2597             case 2: ptr[1].convert(a1);
2598             case 1: ptr[0].convert(a0);
2599             }
2600         }
2601     }
2602     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
2603     {
2604         o->type = clmdep_msgpack::type::ARRAY;
2605         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*28));
2606         o->via.array.size = 28;
2607 
2608         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
2609         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
2610         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
2611         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
2612         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
2613         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
2614         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
2615         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
2616         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
2617         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
2618         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
2619         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
2620         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
2621         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
2622         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
2623         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
2624         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
2625         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
2626         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
2627         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
2628         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
2629         o->via.array.ptr[21] = clmdep_msgpack::object(a21, z);
2630         o->via.array.ptr[22] = clmdep_msgpack::object(a22, z);
2631         o->via.array.ptr[23] = clmdep_msgpack::object(a23, z);
2632         o->via.array.ptr[24] = clmdep_msgpack::object(a24, z);
2633         o->via.array.ptr[25] = clmdep_msgpack::object(a25, z);
2634         o->via.array.ptr[26] = clmdep_msgpack::object(a26, z);
2635         o->via.array.ptr[27] = clmdep_msgpack::object(a27, z);
2636     }
2637 
2638     A0& a0;
2639     A1& a1;
2640     A2& a2;
2641     A3& a3;
2642     A4& a4;
2643     A5& a5;
2644     A6& a6;
2645     A7& a7;
2646     A8& a8;
2647     A9& a9;
2648     A10& a10;
2649     A11& a11;
2650     A12& a12;
2651     A13& a13;
2652     A14& a14;
2653     A15& a15;
2654     A16& a16;
2655     A17& a17;
2656     A18& a18;
2657     A19& a19;
2658     A20& a20;
2659     A21& a21;
2660     A22& a22;
2661     A23& a23;
2662     A24& a24;
2663     A25& a25;
2664     A26& a26;
2665     A27& a27;
2666 };
2667 
2668 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>
2669 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> {
2670     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;
2671     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;
2672     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) :
2673         a0(_a0), a1(_a1), a2(_a2), 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) {}
2674     template <typename Packer>
2675     void msgpack_pack(Packer& pk) const
2676     {
2677         pk.pack_array(29);
2678 
2679         pk.pack(a0);
2680         pk.pack(a1);
2681         pk.pack(a2);
2682         pk.pack(a3);
2683         pk.pack(a4);
2684         pk.pack(a5);
2685         pk.pack(a6);
2686         pk.pack(a7);
2687         pk.pack(a8);
2688         pk.pack(a9);
2689         pk.pack(a10);
2690         pk.pack(a11);
2691         pk.pack(a12);
2692         pk.pack(a13);
2693         pk.pack(a14);
2694         pk.pack(a15);
2695         pk.pack(a16);
2696         pk.pack(a17);
2697         pk.pack(a18);
2698         pk.pack(a19);
2699         pk.pack(a20);
2700         pk.pack(a21);
2701         pk.pack(a22);
2702         pk.pack(a23);
2703         pk.pack(a24);
2704         pk.pack(a25);
2705         pk.pack(a26);
2706         pk.pack(a27);
2707         pk.pack(a28);
2708     }
2709     void msgpack_unpack(clmdep_msgpack::object const& o)
2710     {
2711         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
2712         const size_t size = o.via.array.size;
2713         if(size > 0) {
2714             clmdep_msgpack::object *ptr = o.via.array.ptr;
2715             switch(size) {
2716             default:
2717             case 29: ptr[28].convert(a28);
2718             case 28: ptr[27].convert(a27);
2719             case 27: ptr[26].convert(a26);
2720             case 26: ptr[25].convert(a25);
2721             case 25: ptr[24].convert(a24);
2722             case 24: ptr[23].convert(a23);
2723             case 23: ptr[22].convert(a22);
2724             case 22: ptr[21].convert(a21);
2725             case 21: ptr[20].convert(a20);
2726             case 20: ptr[19].convert(a19);
2727             case 19: ptr[18].convert(a18);
2728             case 18: ptr[17].convert(a17);
2729             case 17: ptr[16].convert(a16);
2730             case 16: ptr[15].convert(a15);
2731             case 15: ptr[14].convert(a14);
2732             case 14: ptr[13].convert(a13);
2733             case 13: ptr[12].convert(a12);
2734             case 12: ptr[11].convert(a11);
2735             case 11: ptr[10].convert(a10);
2736             case 10: ptr[9].convert(a9);
2737             case 9: ptr[8].convert(a8);
2738             case 8: ptr[7].convert(a7);
2739             case 7: ptr[6].convert(a6);
2740             case 6: ptr[5].convert(a5);
2741             case 5: ptr[4].convert(a4);
2742             case 4: ptr[3].convert(a3);
2743             case 3: ptr[2].convert(a2);
2744             case 2: ptr[1].convert(a1);
2745             case 1: ptr[0].convert(a0);
2746             }
2747         }
2748     }
2749     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
2750     {
2751         o->type = clmdep_msgpack::type::ARRAY;
2752         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*29));
2753         o->via.array.size = 29;
2754 
2755         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
2756         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
2757         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
2758         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
2759         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
2760         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
2761         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
2762         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
2763         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
2764         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
2765         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
2766         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
2767         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
2768         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
2769         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
2770         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
2771         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
2772         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
2773         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
2774         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
2775         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
2776         o->via.array.ptr[21] = clmdep_msgpack::object(a21, z);
2777         o->via.array.ptr[22] = clmdep_msgpack::object(a22, z);
2778         o->via.array.ptr[23] = clmdep_msgpack::object(a23, z);
2779         o->via.array.ptr[24] = clmdep_msgpack::object(a24, z);
2780         o->via.array.ptr[25] = clmdep_msgpack::object(a25, z);
2781         o->via.array.ptr[26] = clmdep_msgpack::object(a26, z);
2782         o->via.array.ptr[27] = clmdep_msgpack::object(a27, z);
2783         o->via.array.ptr[28] = clmdep_msgpack::object(a28, z);
2784     }
2785 
2786     A0& a0;
2787     A1& a1;
2788     A2& a2;
2789     A3& a3;
2790     A4& a4;
2791     A5& a5;
2792     A6& a6;
2793     A7& a7;
2794     A8& a8;
2795     A9& a9;
2796     A10& a10;
2797     A11& a11;
2798     A12& a12;
2799     A13& a13;
2800     A14& a14;
2801     A15& a15;
2802     A16& a16;
2803     A17& a17;
2804     A18& a18;
2805     A19& a19;
2806     A20& a20;
2807     A21& a21;
2808     A22& a22;
2809     A23& a23;
2810     A24& a24;
2811     A25& a25;
2812     A26& a26;
2813     A27& a27;
2814     A28& a28;
2815 };
2816 
2817 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>
2818 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> {
2819     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;
2820     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;
2821     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) :
2822         a0(_a0), a1(_a1), a2(_a2), 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) {}
2823     template <typename Packer>
2824     void msgpack_pack(Packer& pk) const
2825     {
2826         pk.pack_array(30);
2827 
2828         pk.pack(a0);
2829         pk.pack(a1);
2830         pk.pack(a2);
2831         pk.pack(a3);
2832         pk.pack(a4);
2833         pk.pack(a5);
2834         pk.pack(a6);
2835         pk.pack(a7);
2836         pk.pack(a8);
2837         pk.pack(a9);
2838         pk.pack(a10);
2839         pk.pack(a11);
2840         pk.pack(a12);
2841         pk.pack(a13);
2842         pk.pack(a14);
2843         pk.pack(a15);
2844         pk.pack(a16);
2845         pk.pack(a17);
2846         pk.pack(a18);
2847         pk.pack(a19);
2848         pk.pack(a20);
2849         pk.pack(a21);
2850         pk.pack(a22);
2851         pk.pack(a23);
2852         pk.pack(a24);
2853         pk.pack(a25);
2854         pk.pack(a26);
2855         pk.pack(a27);
2856         pk.pack(a28);
2857         pk.pack(a29);
2858     }
2859     void msgpack_unpack(clmdep_msgpack::object const& o)
2860     {
2861         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
2862         const size_t size = o.via.array.size;
2863         if(size > 0) {
2864             clmdep_msgpack::object *ptr = o.via.array.ptr;
2865             switch(size) {
2866             default:
2867             case 30: ptr[29].convert(a29);
2868             case 29: ptr[28].convert(a28);
2869             case 28: ptr[27].convert(a27);
2870             case 27: ptr[26].convert(a26);
2871             case 26: ptr[25].convert(a25);
2872             case 25: ptr[24].convert(a24);
2873             case 24: ptr[23].convert(a23);
2874             case 23: ptr[22].convert(a22);
2875             case 22: ptr[21].convert(a21);
2876             case 21: ptr[20].convert(a20);
2877             case 20: ptr[19].convert(a19);
2878             case 19: ptr[18].convert(a18);
2879             case 18: ptr[17].convert(a17);
2880             case 17: ptr[16].convert(a16);
2881             case 16: ptr[15].convert(a15);
2882             case 15: ptr[14].convert(a14);
2883             case 14: ptr[13].convert(a13);
2884             case 13: ptr[12].convert(a12);
2885             case 12: ptr[11].convert(a11);
2886             case 11: ptr[10].convert(a10);
2887             case 10: ptr[9].convert(a9);
2888             case 9: ptr[8].convert(a8);
2889             case 8: ptr[7].convert(a7);
2890             case 7: ptr[6].convert(a6);
2891             case 6: ptr[5].convert(a5);
2892             case 5: ptr[4].convert(a4);
2893             case 4: ptr[3].convert(a3);
2894             case 3: ptr[2].convert(a2);
2895             case 2: ptr[1].convert(a1);
2896             case 1: ptr[0].convert(a0);
2897             }
2898         }
2899     }
2900     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
2901     {
2902         o->type = clmdep_msgpack::type::ARRAY;
2903         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*30));
2904         o->via.array.size = 30;
2905 
2906         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
2907         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
2908         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
2909         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
2910         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
2911         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
2912         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
2913         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
2914         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
2915         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
2916         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
2917         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
2918         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
2919         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
2920         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
2921         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
2922         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
2923         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
2924         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
2925         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
2926         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
2927         o->via.array.ptr[21] = clmdep_msgpack::object(a21, z);
2928         o->via.array.ptr[22] = clmdep_msgpack::object(a22, z);
2929         o->via.array.ptr[23] = clmdep_msgpack::object(a23, z);
2930         o->via.array.ptr[24] = clmdep_msgpack::object(a24, z);
2931         o->via.array.ptr[25] = clmdep_msgpack::object(a25, z);
2932         o->via.array.ptr[26] = clmdep_msgpack::object(a26, z);
2933         o->via.array.ptr[27] = clmdep_msgpack::object(a27, z);
2934         o->via.array.ptr[28] = clmdep_msgpack::object(a28, z);
2935         o->via.array.ptr[29] = clmdep_msgpack::object(a29, z);
2936     }
2937 
2938     A0& a0;
2939     A1& a1;
2940     A2& a2;
2941     A3& a3;
2942     A4& a4;
2943     A5& a5;
2944     A6& a6;
2945     A7& a7;
2946     A8& a8;
2947     A9& a9;
2948     A10& a10;
2949     A11& a11;
2950     A12& a12;
2951     A13& a13;
2952     A14& a14;
2953     A15& a15;
2954     A16& a16;
2955     A17& a17;
2956     A18& a18;
2957     A19& a19;
2958     A20& a20;
2959     A21& a21;
2960     A22& a22;
2961     A23& a23;
2962     A24& a24;
2963     A25& a25;
2964     A26& a26;
2965     A27& a27;
2966     A28& a28;
2967     A29& a29;
2968 };
2969 
2970 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>
2971 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> {
2972     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;
2973     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;
2974     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) :
2975         a0(_a0), a1(_a1), a2(_a2), 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) {}
2976     template <typename Packer>
2977     void msgpack_pack(Packer& pk) const
2978     {
2979         pk.pack_array(31);
2980 
2981         pk.pack(a0);
2982         pk.pack(a1);
2983         pk.pack(a2);
2984         pk.pack(a3);
2985         pk.pack(a4);
2986         pk.pack(a5);
2987         pk.pack(a6);
2988         pk.pack(a7);
2989         pk.pack(a8);
2990         pk.pack(a9);
2991         pk.pack(a10);
2992         pk.pack(a11);
2993         pk.pack(a12);
2994         pk.pack(a13);
2995         pk.pack(a14);
2996         pk.pack(a15);
2997         pk.pack(a16);
2998         pk.pack(a17);
2999         pk.pack(a18);
3000         pk.pack(a19);
3001         pk.pack(a20);
3002         pk.pack(a21);
3003         pk.pack(a22);
3004         pk.pack(a23);
3005         pk.pack(a24);
3006         pk.pack(a25);
3007         pk.pack(a26);
3008         pk.pack(a27);
3009         pk.pack(a28);
3010         pk.pack(a29);
3011         pk.pack(a30);
3012     }
3013     void msgpack_unpack(clmdep_msgpack::object const& o)
3014     {
3015         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
3016         const size_t size = o.via.array.size;
3017         if(size > 0) {
3018             clmdep_msgpack::object *ptr = o.via.array.ptr;
3019             switch(size) {
3020             default:
3021             case 31: ptr[30].convert(a30);
3022             case 30: ptr[29].convert(a29);
3023             case 29: ptr[28].convert(a28);
3024             case 28: ptr[27].convert(a27);
3025             case 27: ptr[26].convert(a26);
3026             case 26: ptr[25].convert(a25);
3027             case 25: ptr[24].convert(a24);
3028             case 24: ptr[23].convert(a23);
3029             case 23: ptr[22].convert(a22);
3030             case 22: ptr[21].convert(a21);
3031             case 21: ptr[20].convert(a20);
3032             case 20: ptr[19].convert(a19);
3033             case 19: ptr[18].convert(a18);
3034             case 18: ptr[17].convert(a17);
3035             case 17: ptr[16].convert(a16);
3036             case 16: ptr[15].convert(a15);
3037             case 15: ptr[14].convert(a14);
3038             case 14: ptr[13].convert(a13);
3039             case 13: ptr[12].convert(a12);
3040             case 12: ptr[11].convert(a11);
3041             case 11: ptr[10].convert(a10);
3042             case 10: ptr[9].convert(a9);
3043             case 9: ptr[8].convert(a8);
3044             case 8: ptr[7].convert(a7);
3045             case 7: ptr[6].convert(a6);
3046             case 6: ptr[5].convert(a5);
3047             case 5: ptr[4].convert(a4);
3048             case 4: ptr[3].convert(a3);
3049             case 3: ptr[2].convert(a2);
3050             case 2: ptr[1].convert(a1);
3051             case 1: ptr[0].convert(a0);
3052             }
3053         }
3054     }
3055     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
3056     {
3057         o->type = clmdep_msgpack::type::ARRAY;
3058         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*31));
3059         o->via.array.size = 31;
3060 
3061         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
3062         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
3063         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
3064         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
3065         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
3066         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
3067         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
3068         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
3069         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
3070         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
3071         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
3072         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
3073         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
3074         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
3075         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
3076         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
3077         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
3078         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
3079         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
3080         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
3081         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
3082         o->via.array.ptr[21] = clmdep_msgpack::object(a21, z);
3083         o->via.array.ptr[22] = clmdep_msgpack::object(a22, z);
3084         o->via.array.ptr[23] = clmdep_msgpack::object(a23, z);
3085         o->via.array.ptr[24] = clmdep_msgpack::object(a24, z);
3086         o->via.array.ptr[25] = clmdep_msgpack::object(a25, z);
3087         o->via.array.ptr[26] = clmdep_msgpack::object(a26, z);
3088         o->via.array.ptr[27] = clmdep_msgpack::object(a27, z);
3089         o->via.array.ptr[28] = clmdep_msgpack::object(a28, z);
3090         o->via.array.ptr[29] = clmdep_msgpack::object(a29, z);
3091         o->via.array.ptr[30] = clmdep_msgpack::object(a30, z);
3092     }
3093 
3094     A0& a0;
3095     A1& a1;
3096     A2& a2;
3097     A3& a3;
3098     A4& a4;
3099     A5& a5;
3100     A6& a6;
3101     A7& a7;
3102     A8& a8;
3103     A9& a9;
3104     A10& a10;
3105     A11& a11;
3106     A12& a12;
3107     A13& a13;
3108     A14& a14;
3109     A15& a15;
3110     A16& a16;
3111     A17& a17;
3112     A18& a18;
3113     A19& a19;
3114     A20& a20;
3115     A21& a21;
3116     A22& a22;
3117     A23& a23;
3118     A24& a24;
3119     A25& a25;
3120     A26& a26;
3121     A27& a27;
3122     A28& a28;
3123     A29& a29;
3124     A30& a30;
3125 };
3126 
3127 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>
3128 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> {
3129     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;
3130     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;
3131     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) :
3132         a0(_a0), a1(_a1), a2(_a2), 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) {}
3133     template <typename Packer>
3134     void msgpack_pack(Packer& pk) const
3135     {
3136         pk.pack_array(32);
3137 
3138         pk.pack(a0);
3139         pk.pack(a1);
3140         pk.pack(a2);
3141         pk.pack(a3);
3142         pk.pack(a4);
3143         pk.pack(a5);
3144         pk.pack(a6);
3145         pk.pack(a7);
3146         pk.pack(a8);
3147         pk.pack(a9);
3148         pk.pack(a10);
3149         pk.pack(a11);
3150         pk.pack(a12);
3151         pk.pack(a13);
3152         pk.pack(a14);
3153         pk.pack(a15);
3154         pk.pack(a16);
3155         pk.pack(a17);
3156         pk.pack(a18);
3157         pk.pack(a19);
3158         pk.pack(a20);
3159         pk.pack(a21);
3160         pk.pack(a22);
3161         pk.pack(a23);
3162         pk.pack(a24);
3163         pk.pack(a25);
3164         pk.pack(a26);
3165         pk.pack(a27);
3166         pk.pack(a28);
3167         pk.pack(a29);
3168         pk.pack(a30);
3169         pk.pack(a31);
3170     }
3171     void msgpack_unpack(clmdep_msgpack::object const& o)
3172     {
3173         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
3174         const size_t size = o.via.array.size;
3175         if(size > 0) {
3176             clmdep_msgpack::object *ptr = o.via.array.ptr;
3177             switch(size) {
3178             default:
3179             case 32: ptr[31].convert(a31);
3180             case 31: ptr[30].convert(a30);
3181             case 30: ptr[29].convert(a29);
3182             case 29: ptr[28].convert(a28);
3183             case 28: ptr[27].convert(a27);
3184             case 27: ptr[26].convert(a26);
3185             case 26: ptr[25].convert(a25);
3186             case 25: ptr[24].convert(a24);
3187             case 24: ptr[23].convert(a23);
3188             case 23: ptr[22].convert(a22);
3189             case 22: ptr[21].convert(a21);
3190             case 21: ptr[20].convert(a20);
3191             case 20: ptr[19].convert(a19);
3192             case 19: ptr[18].convert(a18);
3193             case 18: ptr[17].convert(a17);
3194             case 17: ptr[16].convert(a16);
3195             case 16: ptr[15].convert(a15);
3196             case 15: ptr[14].convert(a14);
3197             case 14: ptr[13].convert(a13);
3198             case 13: ptr[12].convert(a12);
3199             case 12: ptr[11].convert(a11);
3200             case 11: ptr[10].convert(a10);
3201             case 10: ptr[9].convert(a9);
3202             case 9: ptr[8].convert(a8);
3203             case 8: ptr[7].convert(a7);
3204             case 7: ptr[6].convert(a6);
3205             case 6: ptr[5].convert(a5);
3206             case 5: ptr[4].convert(a4);
3207             case 4: ptr[3].convert(a3);
3208             case 3: ptr[2].convert(a2);
3209             case 2: ptr[1].convert(a1);
3210             case 1: ptr[0].convert(a0);
3211             }
3212         }
3213     }
3214     void msgpack_object(clmdep_msgpack::object* o, clmdep_msgpack::zone& z) const
3215     {
3216         o->type = clmdep_msgpack::type::ARRAY;
3217         o->via.array.ptr = static_cast<clmdep_msgpack::object*>(z.allocate_align(sizeof(clmdep_msgpack::object)*32));
3218         o->via.array.size = 32;
3219 
3220         o->via.array.ptr[0] = clmdep_msgpack::object(a0, z);
3221         o->via.array.ptr[1] = clmdep_msgpack::object(a1, z);
3222         o->via.array.ptr[2] = clmdep_msgpack::object(a2, z);
3223         o->via.array.ptr[3] = clmdep_msgpack::object(a3, z);
3224         o->via.array.ptr[4] = clmdep_msgpack::object(a4, z);
3225         o->via.array.ptr[5] = clmdep_msgpack::object(a5, z);
3226         o->via.array.ptr[6] = clmdep_msgpack::object(a6, z);
3227         o->via.array.ptr[7] = clmdep_msgpack::object(a7, z);
3228         o->via.array.ptr[8] = clmdep_msgpack::object(a8, z);
3229         o->via.array.ptr[9] = clmdep_msgpack::object(a9, z);
3230         o->via.array.ptr[10] = clmdep_msgpack::object(a10, z);
3231         o->via.array.ptr[11] = clmdep_msgpack::object(a11, z);
3232         o->via.array.ptr[12] = clmdep_msgpack::object(a12, z);
3233         o->via.array.ptr[13] = clmdep_msgpack::object(a13, z);
3234         o->via.array.ptr[14] = clmdep_msgpack::object(a14, z);
3235         o->via.array.ptr[15] = clmdep_msgpack::object(a15, z);
3236         o->via.array.ptr[16] = clmdep_msgpack::object(a16, z);
3237         o->via.array.ptr[17] = clmdep_msgpack::object(a17, z);
3238         o->via.array.ptr[18] = clmdep_msgpack::object(a18, z);
3239         o->via.array.ptr[19] = clmdep_msgpack::object(a19, z);
3240         o->via.array.ptr[20] = clmdep_msgpack::object(a20, z);
3241         o->via.array.ptr[21] = clmdep_msgpack::object(a21, z);
3242         o->via.array.ptr[22] = clmdep_msgpack::object(a22, z);
3243         o->via.array.ptr[23] = clmdep_msgpack::object(a23, z);
3244         o->via.array.ptr[24] = clmdep_msgpack::object(a24, z);
3245         o->via.array.ptr[25] = clmdep_msgpack::object(a25, z);
3246         o->via.array.ptr[26] = clmdep_msgpack::object(a26, z);
3247         o->via.array.ptr[27] = clmdep_msgpack::object(a27, z);
3248         o->via.array.ptr[28] = clmdep_msgpack::object(a28, z);
3249         o->via.array.ptr[29] = clmdep_msgpack::object(a29, z);
3250         o->via.array.ptr[30] = clmdep_msgpack::object(a30, z);
3251         o->via.array.ptr[31] = clmdep_msgpack::object(a31, z);
3252     }
3253 
3254     A0& a0;
3255     A1& a1;
3256     A2& a2;
3257     A3& a3;
3258     A4& a4;
3259     A5& a5;
3260     A6& a6;
3261     A7& a7;
3262     A8& a8;
3263     A9& a9;
3264     A10& a10;
3265     A11& a11;
3266     A12& a12;
3267     A13& a13;
3268     A14& a14;
3269     A15& a15;
3270     A16& a16;
3271     A17& a17;
3272     A18& a18;
3273     A19& a19;
3274     A20& a20;
3275     A21& a21;
3276     A22& a22;
3277     A23& a23;
3278     A24& a24;
3279     A25& a25;
3280     A26& a26;
3281     A27& a27;
3282     A28& a28;
3283     A29& a29;
3284     A30& a30;
3285     A31& a31;
3286 };
3287 
3288 /// @endcond
3289 
3290 inline define_array<> make_define_array()
3291 {
3292     return define_array<>();
3293 }
3294 
3295 /// @cond
3296 
3297 template <typename A0>
3298 inline define_array<A0> make_define_array(A0& a0)
3299 {
3300     return define_array<A0>(a0);
3301 }
3302 
3303 template <typename A0, typename A1>
3304 inline define_array<A0, A1> make_define_array(A0& a0, A1& a1)
3305 {
3306     return define_array<A0, A1>(a0, a1);
3307 }
3308 
3309 template <typename A0, typename A1, typename A2>
3310 inline define_array<A0, A1, A2> make_define_array(A0& a0, A1& a1, A2& a2)
3311 {
3312     return define_array<A0, A1, A2>(a0, a1, a2);
3313 }
3314 
3315 template <typename A0, typename A1, typename A2, typename A3>
3316 inline define_array<A0, A1, A2, A3> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3)
3317 {
3318     return define_array<A0, A1, A2, A3>(a0, a1, a2, a3);
3319 }
3320 
3321 template <typename A0, typename A1, typename A2, typename A3, typename A4>
3322 inline define_array<A0, A1, A2, A3, A4> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4)
3323 {
3324     return define_array<A0, A1, A2, A3, A4>(a0, a1, a2, a3, a4);
3325 }
3326 
3327 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
3328 inline define_array<A0, A1, A2, A3, A4, A5> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5)
3329 {
3330     return define_array<A0, A1, A2, A3, A4, A5>(a0, a1, a2, a3, a4, a5);
3331 }
3332 
3333 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
3334 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)
3335 {
3336     return define_array<A0, A1, A2, A3, A4, A5, A6>(a0, a1, a2, a3, a4, a5, a6);
3337 }
3338 
3339 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
3340 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)
3341 {
3342     return define_array<A0, A1, A2, A3, A4, A5, A6, A7>(a0, a1, a2, a3, a4, a5, a6, a7);
3343 }
3344 
3345 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
3346 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)
3347 {
3348     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8>(a0, a1, a2, a3, a4, a5, a6, a7, a8);
3349 }
3350 
3351 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
3352 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)
3353 {
3354     return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
3355 }
3356 
3357 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
3358 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)
3359 {
3360     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);
3361 }
3362 
3363 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>
3364 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)
3365 {
3366     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);
3367 }
3368 
3369 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>
3370 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)
3371 {
3372     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);
3373 }
3374 
3375 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>
3376 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)
3377 {
3378     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);
3379 }
3380 
3381 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>
3382 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)
3383 {
3384     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);
3385 }
3386 
3387 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>
3388 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)
3389 {
3390     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);
3391 }
3392 
3393 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>
3394 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)
3395 {
3396     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);
3397 }
3398 
3399 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>
3400 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)
3401 {
3402     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);
3403 }
3404 
3405 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>
3406 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)
3407 {
3408     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);
3409 }
3410 
3411 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>
3412 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)
3413 {
3414     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);
3415 }
3416 
3417 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>
3418 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)
3419 {
3420     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);
3421 }
3422 
3423 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>
3424 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)
3425 {
3426     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);
3427 }
3428 
3429 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>
3430 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)
3431 {
3432     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);
3433 }
3434 
3435 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>
3436 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)
3437 {
3438     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);
3439 }
3440 
3441 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>
3442 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)
3443 {
3444     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);
3445 }
3446 
3447 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>
3448 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)
3449 {
3450     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);
3451 }
3452 
3453 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>
3454 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)
3455 {
3456     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);
3457 }
3458 
3459 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>
3460 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)
3461 {
3462     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);
3463 }
3464 
3465 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>
3466 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)
3467 {
3468     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);
3469 }
3470 
3471 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>
3472 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)
3473 {
3474     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);
3475 }
3476 
3477 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>
3478 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)
3479 {
3480     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);
3481 }
3482 
3483 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>
3484 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)
3485 {
3486     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);
3487 }
3488 
3489 /// @endcond
3490 
3491 }  // namespace type
3492 /// @cond
3493 }  // MSGPACK_API_VERSION_NAMESPACE(v1)
3494 /// @endcond
3495 }  // namespace clmdep_msgpack
3496 
3497 
3498 #endif // MSGPACK_CPP03_DEFINE_ARRAY_HPP
3499