1 /*==============================================================================
2     Copyright (c) 2005-2010 Joel de Guzman
3     Copyright (c) 2010 Thomas Heller
4 
5     Distributed under the Boost Software License, Version 1.0. (See accompanying
6     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 ==============================================================================*/
8 namespace boost { namespace phoenix
9 {
10     template <typename Dummy = void>
11     struct vector0
12     {
13         typedef mpl::int_<0> size_type;
14         static const int size_value = 0;
15     };
16     template <int> struct vector_chooser;
17     template <>
18     struct vector_chooser<0>
19     {
20         template <typename Dummy = void>
21         struct apply
22         {
23             typedef vector0<> type;
24         };
25     };
26 }}
27 
28 
29 
30 
31 
32 
33 
34 namespace boost { namespace phoenix
35 {
36     template <typename A0>
37     struct vector1
38     {
39         typedef A0 member_type0; A0 a0;
40 
41         typedef mpl::int_<1> size_type;
42         static const int size_value = 1;
43         typedef
44             vector0<>
45             args_type;
argsboost::phoenix::vector146         args_type args() const
47         {
48             args_type r = {};
49             return r;
50         }
51     };
52     template <>
53     struct vector_chooser<1>
54     {
55         template <typename A0>
56         struct apply
57         {
58             typedef vector1<A0> type;
59         };
60     };
61 }}
62 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
63     (A0)
64   , ( boost::phoenix::vector1 ) (A0)
65   , (A0, a0)
66 )
67 
68 
69 
70 
71 
72 
73 
74 namespace boost { namespace phoenix
75 {
76     template <typename A0 , typename A1>
77     struct vector2
78     {
79         typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1;
80 
81         typedef mpl::int_<2> size_type;
82         static const int size_value = 2;
83         typedef
84             vector1<A1>
85             args_type;
argsboost::phoenix::vector286         args_type args() const
87         {
88             args_type r = {a1};
89             return r;
90         }
91     };
92     template <>
93     struct vector_chooser<2>
94     {
95         template <typename A0 , typename A1>
96         struct apply
97         {
98             typedef vector2<A0 , A1> type;
99         };
100     };
101 }}
102 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
103     (A0) (A1)
104   , ( boost::phoenix::vector2 ) (A0) (A1)
105   , (A0, a0) (A1, a1)
106 )
107 
108 
109 
110 
111 
112 
113 
114 namespace boost { namespace phoenix
115 {
116     template <typename A0 , typename A1 , typename A2>
117     struct vector3
118     {
119         typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2;
120 
121         typedef mpl::int_<3> size_type;
122         static const int size_value = 3;
123         typedef
124             vector2<A1 , A2>
125             args_type;
argsboost::phoenix::vector3126         args_type args() const
127         {
128             args_type r = {a1 , a2};
129             return r;
130         }
131     };
132     template <>
133     struct vector_chooser<3>
134     {
135         template <typename A0 , typename A1 , typename A2>
136         struct apply
137         {
138             typedef vector3<A0 , A1 , A2> type;
139         };
140     };
141 }}
142 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
143     (A0) (A1) (A2)
144   , ( boost::phoenix::vector3 ) (A0) (A1) (A2)
145   , (A0, a0) (A1, a1) (A2, a2)
146 )
147 
148 
149 
150 
151 
152 
153 
154 namespace boost { namespace phoenix
155 {
156     template <typename A0 , typename A1 , typename A2 , typename A3>
157     struct vector4
158     {
159         typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3;
160 
161         typedef mpl::int_<4> size_type;
162         static const int size_value = 4;
163         typedef
164             vector3<A1 , A2 , A3>
165             args_type;
argsboost::phoenix::vector4166         args_type args() const
167         {
168             args_type r = {a1 , a2 , a3};
169             return r;
170         }
171     };
172     template <>
173     struct vector_chooser<4>
174     {
175         template <typename A0 , typename A1 , typename A2 , typename A3>
176         struct apply
177         {
178             typedef vector4<A0 , A1 , A2 , A3> type;
179         };
180     };
181 }}
182 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
183     (A0) (A1) (A2) (A3)
184   , ( boost::phoenix::vector4 ) (A0) (A1) (A2) (A3)
185   , (A0, a0) (A1, a1) (A2, a2) (A3, a3)
186 )
187 
188 
189 
190 
191 
192 
193 
194 namespace boost { namespace phoenix
195 {
196     template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
197     struct vector5
198     {
199         typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4;
200 
201         typedef mpl::int_<5> size_type;
202         static const int size_value = 5;
203         typedef
204             vector4<A1 , A2 , A3 , A4>
205             args_type;
argsboost::phoenix::vector5206         args_type args() const
207         {
208             args_type r = {a1 , a2 , a3 , a4};
209             return r;
210         }
211     };
212     template <>
213     struct vector_chooser<5>
214     {
215         template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
216         struct apply
217         {
218             typedef vector5<A0 , A1 , A2 , A3 , A4> type;
219         };
220     };
221 }}
222 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
223     (A0) (A1) (A2) (A3) (A4)
224   , ( boost::phoenix::vector5 ) (A0) (A1) (A2) (A3) (A4)
225   , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4)
226 )
227 
228 
229 
230 
231 
232 
233 
234 namespace boost { namespace phoenix
235 {
236     template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
237     struct vector6
238     {
239         typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5;
240 
241         typedef mpl::int_<6> size_type;
242         static const int size_value = 6;
243         typedef
244             vector5<A1 , A2 , A3 , A4 , A5>
245             args_type;
argsboost::phoenix::vector6246         args_type args() const
247         {
248             args_type r = {a1 , a2 , a3 , a4 , a5};
249             return r;
250         }
251     };
252     template <>
253     struct vector_chooser<6>
254     {
255         template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
256         struct apply
257         {
258             typedef vector6<A0 , A1 , A2 , A3 , A4 , A5> type;
259         };
260     };
261 }}
262 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
263     (A0) (A1) (A2) (A3) (A4) (A5)
264   , ( boost::phoenix::vector6 ) (A0) (A1) (A2) (A3) (A4) (A5)
265   , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5)
266 )
267 
268 
269 
270 
271 
272 
273 
274 namespace boost { namespace phoenix
275 {
276     template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
277     struct vector7
278     {
279         typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5; typedef A6 member_type6; A6 a6;
280 
281         typedef mpl::int_<7> size_type;
282         static const int size_value = 7;
283         typedef
284             vector6<A1 , A2 , A3 , A4 , A5 , A6>
285             args_type;
argsboost::phoenix::vector7286         args_type args() const
287         {
288             args_type r = {a1 , a2 , a3 , a4 , a5 , a6};
289             return r;
290         }
291     };
292     template <>
293     struct vector_chooser<7>
294     {
295         template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
296         struct apply
297         {
298             typedef vector7<A0 , A1 , A2 , A3 , A4 , A5 , A6> type;
299         };
300     };
301 }}
302 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
303     (A0) (A1) (A2) (A3) (A4) (A5) (A6)
304   , ( boost::phoenix::vector7 ) (A0) (A1) (A2) (A3) (A4) (A5) (A6)
305   , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5) (A6, a6)
306 )
307 
308 
309 
310 
311 
312 
313 
314 namespace boost { namespace phoenix
315 {
316     template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
317     struct vector8
318     {
319         typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5; typedef A6 member_type6; A6 a6; typedef A7 member_type7; A7 a7;
320 
321         typedef mpl::int_<8> size_type;
322         static const int size_value = 8;
323         typedef
324             vector7<A1 , A2 , A3 , A4 , A5 , A6 , A7>
325             args_type;
argsboost::phoenix::vector8326         args_type args() const
327         {
328             args_type r = {a1 , a2 , a3 , a4 , a5 , a6 , a7};
329             return r;
330         }
331     };
332     template <>
333     struct vector_chooser<8>
334     {
335         template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
336         struct apply
337         {
338             typedef vector8<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> type;
339         };
340     };
341 }}
342 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
343     (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7)
344   , ( boost::phoenix::vector8 ) (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7)
345   , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5) (A6, a6) (A7, a7)
346 )
347 
348 
349 
350 
351 
352 
353 
354 namespace boost { namespace phoenix
355 {
356     template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
357     struct vector9
358     {
359         typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5; typedef A6 member_type6; A6 a6; typedef A7 member_type7; A7 a7; typedef A8 member_type8; A8 a8;
360 
361         typedef mpl::int_<9> size_type;
362         static const int size_value = 9;
363         typedef
364             vector8<A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>
365             args_type;
argsboost::phoenix::vector9366         args_type args() const
367         {
368             args_type r = {a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8};
369             return r;
370         }
371     };
372     template <>
373     struct vector_chooser<9>
374     {
375         template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
376         struct apply
377         {
378             typedef vector9<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> type;
379         };
380     };
381 }}
382 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
383     (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8)
384   , ( boost::phoenix::vector9 ) (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8)
385   , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5) (A6, a6) (A7, a7) (A8, a8)
386 )
387 
388 
389 
390 
391 
392 
393 
394 namespace boost { namespace phoenix
395 {
396     template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
397     struct vector10
398     {
399         typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5; typedef A6 member_type6; A6 a6; typedef A7 member_type7; A7 a7; typedef A8 member_type8; A8 a8; typedef A9 member_type9; A9 a9;
400 
401         typedef mpl::int_<10> size_type;
402         static const int size_value = 10;
403         typedef
404             vector9<A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>
405             args_type;
argsboost::phoenix::vector10406         args_type args() const
407         {
408             args_type r = {a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9};
409             return r;
410         }
411     };
412     template <>
413     struct vector_chooser<10>
414     {
415         template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
416         struct apply
417         {
418             typedef vector10<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> type;
419         };
420     };
421 }}
422 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
423     (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8) (A9)
424   , ( boost::phoenix::vector10 ) (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8) (A9)
425   , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5) (A6, a6) (A7, a7) (A8, a8) (A9, a9)
426 )
427 
428 
429 
430 
431 
432 
433 
434 namespace boost { namespace phoenix
435 {
436     template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
437     struct vector11
438     {
439         typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5; typedef A6 member_type6; A6 a6; typedef A7 member_type7; A7 a7; typedef A8 member_type8; A8 a8; typedef A9 member_type9; A9 a9; typedef A10 member_type10; A10 a10;
440 
441         typedef mpl::int_<11> size_type;
442         static const int size_value = 11;
443         typedef
444             vector10<A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10>
445             args_type;
argsboost::phoenix::vector11446         args_type args() const
447         {
448             args_type r = {a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10};
449             return r;
450         }
451     };
452     template <>
453     struct vector_chooser<11>
454     {
455         template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
456         struct apply
457         {
458             typedef vector11<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> type;
459         };
460     };
461 }}
462 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
463     (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8) (A9) (A10)
464   , ( boost::phoenix::vector11 ) (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8) (A9) (A10)
465   , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5) (A6, a6) (A7, a7) (A8, a8) (A9, a9) (A10, a10)
466 )
467