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 
9 
10 
11 
12 
13 
14 
15 
16 
17         template <typename Fun, typename Expr, typename State, typename Data>
18         struct call_impl<Fun, Expr, State, Data, 1>
19             : proto::transform_impl<Expr, State, Data>
20         {
21             typedef
22                 typename boost::phoenix::result_of::context<State, Data>::type
23                 context_type;
24             typedef typename proto::result_of::child_c<Expr, 0>::type A0;
25             typedef
26                 typename boost::result_of<
27                     Fun(A0, context_type)
28                 >::type
29                 result_type;
operator ()call_impl30             result_type operator()(
31                 typename call_impl::expr_param e
32               , typename call_impl::state_param s
33               , typename call_impl::data_param d
34             ) const
35             {
36                 return
37                     Fun()(
38                         proto::child_c< 0>(e)
39                       , boost::phoenix::context(s, d)
40                     );
41             }
42         };
43 
44 
45 
46 
47 
48 
49 
50 
51         template <typename Fun, typename Expr, typename State, typename Data>
52         struct call_impl<Fun, Expr, State, Data, 2>
53             : proto::transform_impl<Expr, State, Data>
54         {
55             typedef
56                 typename boost::phoenix::result_of::context<State, Data>::type
57                 context_type;
58             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1;
59             typedef
60                 typename boost::result_of<
61                     Fun(A0 , A1, context_type)
62                 >::type
63                 result_type;
operator ()call_impl64             result_type operator()(
65                 typename call_impl::expr_param e
66               , typename call_impl::state_param s
67               , typename call_impl::data_param d
68             ) const
69             {
70                 return
71                     Fun()(
72                         proto::child_c< 0>(e) , proto::child_c< 1>(e)
73                       , boost::phoenix::context(s, d)
74                     );
75             }
76         };
77 
78 
79 
80 
81 
82 
83 
84 
85         template <typename Fun, typename Expr, typename State, typename Data>
86         struct call_impl<Fun, Expr, State, Data, 3>
87             : proto::transform_impl<Expr, State, Data>
88         {
89             typedef
90                 typename boost::phoenix::result_of::context<State, Data>::type
91                 context_type;
92             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2;
93             typedef
94                 typename boost::result_of<
95                     Fun(A0 , A1 , A2, context_type)
96                 >::type
97                 result_type;
operator ()call_impl98             result_type operator()(
99                 typename call_impl::expr_param e
100               , typename call_impl::state_param s
101               , typename call_impl::data_param d
102             ) const
103             {
104                 return
105                     Fun()(
106                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e)
107                       , boost::phoenix::context(s, d)
108                     );
109             }
110         };
111 
112 
113 
114 
115 
116 
117 
118 
119         template <typename Fun, typename Expr, typename State, typename Data>
120         struct call_impl<Fun, Expr, State, Data, 4>
121             : proto::transform_impl<Expr, State, Data>
122         {
123             typedef
124                 typename boost::phoenix::result_of::context<State, Data>::type
125                 context_type;
126             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3;
127             typedef
128                 typename boost::result_of<
129                     Fun(A0 , A1 , A2 , A3, context_type)
130                 >::type
131                 result_type;
operator ()call_impl132             result_type operator()(
133                 typename call_impl::expr_param e
134               , typename call_impl::state_param s
135               , typename call_impl::data_param d
136             ) const
137             {
138                 return
139                     Fun()(
140                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e)
141                       , boost::phoenix::context(s, d)
142                     );
143             }
144         };
145 
146 
147 
148 
149 
150 
151 
152 
153         template <typename Fun, typename Expr, typename State, typename Data>
154         struct call_impl<Fun, Expr, State, Data, 5>
155             : proto::transform_impl<Expr, State, Data>
156         {
157             typedef
158                 typename boost::phoenix::result_of::context<State, Data>::type
159                 context_type;
160             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4;
161             typedef
162                 typename boost::result_of<
163                     Fun(A0 , A1 , A2 , A3 , A4, context_type)
164                 >::type
165                 result_type;
operator ()call_impl166             result_type operator()(
167                 typename call_impl::expr_param e
168               , typename call_impl::state_param s
169               , typename call_impl::data_param d
170             ) const
171             {
172                 return
173                     Fun()(
174                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e)
175                       , boost::phoenix::context(s, d)
176                     );
177             }
178         };
179 
180 
181 
182 
183 
184 
185 
186 
187         template <typename Fun, typename Expr, typename State, typename Data>
188         struct call_impl<Fun, Expr, State, Data, 6>
189             : proto::transform_impl<Expr, State, Data>
190         {
191             typedef
192                 typename boost::phoenix::result_of::context<State, Data>::type
193                 context_type;
194             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5;
195             typedef
196                 typename boost::result_of<
197                     Fun(A0 , A1 , A2 , A3 , A4 , A5, context_type)
198                 >::type
199                 result_type;
operator ()call_impl200             result_type operator()(
201                 typename call_impl::expr_param e
202               , typename call_impl::state_param s
203               , typename call_impl::data_param d
204             ) const
205             {
206                 return
207                     Fun()(
208                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e)
209                       , boost::phoenix::context(s, d)
210                     );
211             }
212         };
213 
214 
215 
216 
217 
218 
219 
220 
221         template <typename Fun, typename Expr, typename State, typename Data>
222         struct call_impl<Fun, Expr, State, Data, 7>
223             : proto::transform_impl<Expr, State, Data>
224         {
225             typedef
226                 typename boost::phoenix::result_of::context<State, Data>::type
227                 context_type;
228             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6;
229             typedef
230                 typename boost::result_of<
231                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6, context_type)
232                 >::type
233                 result_type;
operator ()call_impl234             result_type operator()(
235                 typename call_impl::expr_param e
236               , typename call_impl::state_param s
237               , typename call_impl::data_param d
238             ) const
239             {
240                 return
241                     Fun()(
242                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e)
243                       , boost::phoenix::context(s, d)
244                     );
245             }
246         };
247 
248 
249 
250 
251 
252 
253 
254 
255         template <typename Fun, typename Expr, typename State, typename Data>
256         struct call_impl<Fun, Expr, State, Data, 8>
257             : proto::transform_impl<Expr, State, Data>
258         {
259             typedef
260                 typename boost::phoenix::result_of::context<State, Data>::type
261                 context_type;
262             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7;
263             typedef
264                 typename boost::result_of<
265                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7, context_type)
266                 >::type
267                 result_type;
operator ()call_impl268             result_type operator()(
269                 typename call_impl::expr_param e
270               , typename call_impl::state_param s
271               , typename call_impl::data_param d
272             ) const
273             {
274                 return
275                     Fun()(
276                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e)
277                       , boost::phoenix::context(s, d)
278                     );
279             }
280         };
281 
282 
283 
284 
285 
286 
287 
288 
289         template <typename Fun, typename Expr, typename State, typename Data>
290         struct call_impl<Fun, Expr, State, Data, 9>
291             : proto::transform_impl<Expr, State, Data>
292         {
293             typedef
294                 typename boost::phoenix::result_of::context<State, Data>::type
295                 context_type;
296             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8;
297             typedef
298                 typename boost::result_of<
299                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8, context_type)
300                 >::type
301                 result_type;
operator ()call_impl302             result_type operator()(
303                 typename call_impl::expr_param e
304               , typename call_impl::state_param s
305               , typename call_impl::data_param d
306             ) const
307             {
308                 return
309                     Fun()(
310                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e)
311                       , boost::phoenix::context(s, d)
312                     );
313             }
314         };
315 
316 
317 
318 
319 
320 
321 
322 
323         template <typename Fun, typename Expr, typename State, typename Data>
324         struct call_impl<Fun, Expr, State, Data, 10>
325             : proto::transform_impl<Expr, State, Data>
326         {
327             typedef
328                 typename boost::phoenix::result_of::context<State, Data>::type
329                 context_type;
330             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9;
331             typedef
332                 typename boost::result_of<
333                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9, context_type)
334                 >::type
335                 result_type;
operator ()call_impl336             result_type operator()(
337                 typename call_impl::expr_param e
338               , typename call_impl::state_param s
339               , typename call_impl::data_param d
340             ) const
341             {
342                 return
343                     Fun()(
344                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e)
345                       , boost::phoenix::context(s, d)
346                     );
347             }
348         };
349 
350 
351 
352 
353 
354 
355 
356 
357         template <typename Fun, typename Expr, typename State, typename Data>
358         struct call_impl<Fun, Expr, State, Data, 11>
359             : proto::transform_impl<Expr, State, Data>
360         {
361             typedef
362                 typename boost::phoenix::result_of::context<State, Data>::type
363                 context_type;
364             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10;
365             typedef
366                 typename boost::result_of<
367                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10, context_type)
368                 >::type
369                 result_type;
operator ()call_impl370             result_type operator()(
371                 typename call_impl::expr_param e
372               , typename call_impl::state_param s
373               , typename call_impl::data_param d
374             ) const
375             {
376                 return
377                     Fun()(
378                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e)
379                       , boost::phoenix::context(s, d)
380                     );
381             }
382         };
383 
384 
385 
386 
387 
388 
389 
390 
391         template <typename Fun, typename Expr, typename State, typename Data>
392         struct call_impl<Fun, Expr, State, Data, 12>
393             : proto::transform_impl<Expr, State, Data>
394         {
395             typedef
396                 typename boost::phoenix::result_of::context<State, Data>::type
397                 context_type;
398             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11;
399             typedef
400                 typename boost::result_of<
401                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11, context_type)
402                 >::type
403                 result_type;
operator ()call_impl404             result_type operator()(
405                 typename call_impl::expr_param e
406               , typename call_impl::state_param s
407               , typename call_impl::data_param d
408             ) const
409             {
410                 return
411                     Fun()(
412                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e)
413                       , boost::phoenix::context(s, d)
414                     );
415             }
416         };
417 
418 
419 
420 
421 
422 
423 
424 
425         template <typename Fun, typename Expr, typename State, typename Data>
426         struct call_impl<Fun, Expr, State, Data, 13>
427             : proto::transform_impl<Expr, State, Data>
428         {
429             typedef
430                 typename boost::phoenix::result_of::context<State, Data>::type
431                 context_type;
432             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12;
433             typedef
434                 typename boost::result_of<
435                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12, context_type)
436                 >::type
437                 result_type;
operator ()call_impl438             result_type operator()(
439                 typename call_impl::expr_param e
440               , typename call_impl::state_param s
441               , typename call_impl::data_param d
442             ) const
443             {
444                 return
445                     Fun()(
446                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e)
447                       , boost::phoenix::context(s, d)
448                     );
449             }
450         };
451 
452 
453 
454 
455 
456 
457 
458 
459         template <typename Fun, typename Expr, typename State, typename Data>
460         struct call_impl<Fun, Expr, State, Data, 14>
461             : proto::transform_impl<Expr, State, Data>
462         {
463             typedef
464                 typename boost::phoenix::result_of::context<State, Data>::type
465                 context_type;
466             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13;
467             typedef
468                 typename boost::result_of<
469                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13, context_type)
470                 >::type
471                 result_type;
operator ()call_impl472             result_type operator()(
473                 typename call_impl::expr_param e
474               , typename call_impl::state_param s
475               , typename call_impl::data_param d
476             ) const
477             {
478                 return
479                     Fun()(
480                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e)
481                       , boost::phoenix::context(s, d)
482                     );
483             }
484         };
485 
486 
487 
488 
489 
490 
491 
492 
493         template <typename Fun, typename Expr, typename State, typename Data>
494         struct call_impl<Fun, Expr, State, Data, 15>
495             : proto::transform_impl<Expr, State, Data>
496         {
497             typedef
498                 typename boost::phoenix::result_of::context<State, Data>::type
499                 context_type;
500             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14;
501             typedef
502                 typename boost::result_of<
503                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14, context_type)
504                 >::type
505                 result_type;
operator ()call_impl506             result_type operator()(
507                 typename call_impl::expr_param e
508               , typename call_impl::state_param s
509               , typename call_impl::data_param d
510             ) const
511             {
512                 return
513                     Fun()(
514                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e)
515                       , boost::phoenix::context(s, d)
516                     );
517             }
518         };
519 
520 
521 
522 
523 
524 
525 
526 
527         template <typename Fun, typename Expr, typename State, typename Data>
528         struct call_impl<Fun, Expr, State, Data, 16>
529             : proto::transform_impl<Expr, State, Data>
530         {
531             typedef
532                 typename boost::phoenix::result_of::context<State, Data>::type
533                 context_type;
534             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14; typedef typename proto::result_of::child_c<Expr, 15>::type A15;
535             typedef
536                 typename boost::result_of<
537                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15, context_type)
538                 >::type
539                 result_type;
operator ()call_impl540             result_type operator()(
541                 typename call_impl::expr_param e
542               , typename call_impl::state_param s
543               , typename call_impl::data_param d
544             ) const
545             {
546                 return
547                     Fun()(
548                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e) , proto::child_c< 15>(e)
549                       , boost::phoenix::context(s, d)
550                     );
551             }
552         };
553 
554 
555 
556 
557 
558 
559 
560 
561         template <typename Fun, typename Expr, typename State, typename Data>
562         struct call_impl<Fun, Expr, State, Data, 17>
563             : proto::transform_impl<Expr, State, Data>
564         {
565             typedef
566                 typename boost::phoenix::result_of::context<State, Data>::type
567                 context_type;
568             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14; typedef typename proto::result_of::child_c<Expr, 15>::type A15; typedef typename proto::result_of::child_c<Expr, 16>::type A16;
569             typedef
570                 typename boost::result_of<
571                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16, context_type)
572                 >::type
573                 result_type;
operator ()call_impl574             result_type operator()(
575                 typename call_impl::expr_param e
576               , typename call_impl::state_param s
577               , typename call_impl::data_param d
578             ) const
579             {
580                 return
581                     Fun()(
582                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e) , proto::child_c< 15>(e) , proto::child_c< 16>(e)
583                       , boost::phoenix::context(s, d)
584                     );
585             }
586         };
587 
588 
589 
590 
591 
592 
593 
594 
595         template <typename Fun, typename Expr, typename State, typename Data>
596         struct call_impl<Fun, Expr, State, Data, 18>
597             : proto::transform_impl<Expr, State, Data>
598         {
599             typedef
600                 typename boost::phoenix::result_of::context<State, Data>::type
601                 context_type;
602             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14; typedef typename proto::result_of::child_c<Expr, 15>::type A15; typedef typename proto::result_of::child_c<Expr, 16>::type A16; typedef typename proto::result_of::child_c<Expr, 17>::type A17;
603             typedef
604                 typename boost::result_of<
605                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17, context_type)
606                 >::type
607                 result_type;
operator ()call_impl608             result_type operator()(
609                 typename call_impl::expr_param e
610               , typename call_impl::state_param s
611               , typename call_impl::data_param d
612             ) const
613             {
614                 return
615                     Fun()(
616                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e) , proto::child_c< 15>(e) , proto::child_c< 16>(e) , proto::child_c< 17>(e)
617                       , boost::phoenix::context(s, d)
618                     );
619             }
620         };
621 
622 
623 
624 
625 
626 
627 
628 
629         template <typename Fun, typename Expr, typename State, typename Data>
630         struct call_impl<Fun, Expr, State, Data, 19>
631             : proto::transform_impl<Expr, State, Data>
632         {
633             typedef
634                 typename boost::phoenix::result_of::context<State, Data>::type
635                 context_type;
636             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14; typedef typename proto::result_of::child_c<Expr, 15>::type A15; typedef typename proto::result_of::child_c<Expr, 16>::type A16; typedef typename proto::result_of::child_c<Expr, 17>::type A17; typedef typename proto::result_of::child_c<Expr, 18>::type A18;
637             typedef
638                 typename boost::result_of<
639                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18, context_type)
640                 >::type
641                 result_type;
operator ()call_impl642             result_type operator()(
643                 typename call_impl::expr_param e
644               , typename call_impl::state_param s
645               , typename call_impl::data_param d
646             ) const
647             {
648                 return
649                     Fun()(
650                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e) , proto::child_c< 15>(e) , proto::child_c< 16>(e) , proto::child_c< 17>(e) , proto::child_c< 18>(e)
651                       , boost::phoenix::context(s, d)
652                     );
653             }
654         };
655 
656 
657 
658 
659 
660 
661 
662 
663         template <typename Fun, typename Expr, typename State, typename Data>
664         struct call_impl<Fun, Expr, State, Data, 20>
665             : proto::transform_impl<Expr, State, Data>
666         {
667             typedef
668                 typename boost::phoenix::result_of::context<State, Data>::type
669                 context_type;
670             typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14; typedef typename proto::result_of::child_c<Expr, 15>::type A15; typedef typename proto::result_of::child_c<Expr, 16>::type A16; typedef typename proto::result_of::child_c<Expr, 17>::type A17; typedef typename proto::result_of::child_c<Expr, 18>::type A18; typedef typename proto::result_of::child_c<Expr, 19>::type A19;
671             typedef
672                 typename boost::result_of<
673                     Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19, context_type)
674                 >::type
675                 result_type;
operator ()call_impl676             result_type operator()(
677                 typename call_impl::expr_param e
678               , typename call_impl::state_param s
679               , typename call_impl::data_param d
680             ) const
681             {
682                 return
683                     Fun()(
684                         proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e) , proto::child_c< 15>(e) , proto::child_c< 16>(e) , proto::child_c< 17>(e) , proto::child_c< 18>(e) , proto::child_c< 19>(e)
685                       , boost::phoenix::context(s, d)
686                     );
687             }
688         };
689