1 /*==============================================================================
2 Copyright (c) 2005-2010 Joel de Guzman
3 Copyright (c) 2010 Thomas Heller
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 ==============================================================================*/
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>
22 typename boost::phoenix::result_of::context<State, Data>::type
24 typedef typename proto::result_of::child_c<Expr, 0>::type A0;
26 typename boost::result_of<
30 result_type operator()(
31 typename call_impl::expr_param e
32 , typename call_impl::state_param s
33 , typename call_impl::data_param d
39 , boost::phoenix::context(s, d)
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>
56 typename boost::phoenix::result_of::context<State, Data>::type
58 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1;
60 typename boost::result_of<
61 Fun(A0 , A1, context_type)
64 result_type operator()(
65 typename call_impl::expr_param e
66 , typename call_impl::state_param s
67 , typename call_impl::data_param d
72 proto::child_c< 0>(e) , proto::child_c< 1>(e)
73 , boost::phoenix::context(s, d)
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>
90 typename boost::phoenix::result_of::context<State, Data>::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;
94 typename boost::result_of<
95 Fun(A0 , A1 , A2, context_type)
98 result_type operator()(
99 typename call_impl::expr_param e
100 , typename call_impl::state_param s
101 , typename call_impl::data_param d
106 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e)
107 , boost::phoenix::context(s, d)
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>
124 typename boost::phoenix::result_of::context<State, Data>::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;
128 typename boost::result_of<
129 Fun(A0 , A1 , A2 , A3, context_type)
132 result_type operator()(
133 typename call_impl::expr_param e
134 , typename call_impl::state_param s
135 , typename call_impl::data_param d
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)
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>
158 typename boost::phoenix::result_of::context<State, Data>::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;
162 typename boost::result_of<
163 Fun(A0 , A1 , A2 , A3 , A4, context_type)
166 result_type operator()(
167 typename call_impl::expr_param e
168 , typename call_impl::state_param s
169 , typename call_impl::data_param d
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)
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>
192 typename boost::phoenix::result_of::context<State, Data>::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;
196 typename boost::result_of<
197 Fun(A0 , A1 , A2 , A3 , A4 , A5, context_type)
200 result_type operator()(
201 typename call_impl::expr_param e
202 , typename call_impl::state_param s
203 , typename call_impl::data_param d
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)
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>
226 typename boost::phoenix::result_of::context<State, Data>::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;
230 typename boost::result_of<
231 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6, context_type)
234 result_type operator()(
235 typename call_impl::expr_param e
236 , typename call_impl::state_param s
237 , typename call_impl::data_param d
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)
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>
260 typename boost::phoenix::result_of::context<State, Data>::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;
264 typename boost::result_of<
265 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7, context_type)
268 result_type operator()(
269 typename call_impl::expr_param e
270 , typename call_impl::state_param s
271 , typename call_impl::data_param d
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)
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>
294 typename boost::phoenix::result_of::context<State, Data>::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;
298 typename boost::result_of<
299 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8, context_type)
302 result_type operator()(
303 typename call_impl::expr_param e
304 , typename call_impl::state_param s
305 , typename call_impl::data_param d
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)
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>
328 typename boost::phoenix::result_of::context<State, Data>::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;
332 typename boost::result_of<
333 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9, context_type)
336 result_type operator()(
337 typename call_impl::expr_param e
338 , typename call_impl::state_param s
339 , typename call_impl::data_param d
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)