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