1 ///////////////////////////////////////////////////////////////////////////////
2 /// \file pass_through_impl.hpp
4 /// Specializations of pass_through_impl, used in the implementation of the
5 /// pass_through transform.
7 // Copyright 2008 Eric Niebler. Distributed under the Boost
8 // Software License, Version 1.0. (See accompanying file
9 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
10 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
11 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 1>
12 : transform_impl<Expr, State, Data>
14 typedef typename pass_through_impl::expr unref_expr;
17 is_same<Domain, deduce_domain>::value
18 , typename unref_expr::proto_domain
25 , typename unref_expr::proto_tag
27 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type
31 typedef typename result_domain::proto_generator proto_generator;
32 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
34 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
36 typename pass_through_impl::expr_param e
37 , typename pass_through_impl::state_param s
38 , typename pass_through_impl::data_param d
41 expr_type const that = {
42 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d )
47 detail::ignore_unused(&that);
48 return proto_generator()(that);
51 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
52 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 2>
53 : transform_impl<Expr, State, Data>
55 typedef typename pass_through_impl::expr unref_expr;
58 is_same<Domain, deduce_domain>::value
59 , typename unref_expr::proto_domain
66 , typename unref_expr::proto_tag
68 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type
72 typedef typename result_domain::proto_generator proto_generator;
73 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
75 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
77 typename pass_through_impl::expr_param e
78 , typename pass_through_impl::state_param s
79 , typename pass_through_impl::data_param d
82 expr_type const that = {
83 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d )
88 detail::ignore_unused(&that);
89 return proto_generator()(that);
92 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
93 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 3>
94 : transform_impl<Expr, State, Data>
96 typedef typename pass_through_impl::expr unref_expr;
99 is_same<Domain, deduce_domain>::value
100 , typename unref_expr::proto_domain
107 , typename unref_expr::proto_tag
109 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type
113 typedef typename result_domain::proto_generator proto_generator;
114 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
116 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
118 typename pass_through_impl::expr_param e
119 , typename pass_through_impl::state_param s
120 , typename pass_through_impl::data_param d
123 expr_type const that = {
124 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d )
129 detail::ignore_unused(&that);
130 return proto_generator()(that);
133 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
134 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 4>
135 : transform_impl<Expr, State, Data>
137 typedef typename pass_through_impl::expr unref_expr;
140 is_same<Domain, deduce_domain>::value
141 , typename unref_expr::proto_domain
148 , typename unref_expr::proto_tag
150 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type
154 typedef typename result_domain::proto_generator proto_generator;
155 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
157 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
159 typename pass_through_impl::expr_param e
160 , typename pass_through_impl::state_param s
161 , typename pass_through_impl::data_param d
164 expr_type const that = {
165 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d )
170 detail::ignore_unused(&that);
171 return proto_generator()(that);
174 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
175 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 5>
176 : transform_impl<Expr, State, Data>
178 typedef typename pass_through_impl::expr unref_expr;
181 is_same<Domain, deduce_domain>::value
182 , typename unref_expr::proto_domain
189 , typename unref_expr::proto_tag
191 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type
195 typedef typename result_domain::proto_generator proto_generator;
196 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
198 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
200 typename pass_through_impl::expr_param e
201 , typename pass_through_impl::state_param s
202 , typename pass_through_impl::data_param d
205 expr_type const that = {
206 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d )
211 detail::ignore_unused(&that);
212 return proto_generator()(that);
215 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
216 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 6>
217 : transform_impl<Expr, State, Data>
219 typedef typename pass_through_impl::expr unref_expr;
222 is_same<Domain, deduce_domain>::value
223 , typename unref_expr::proto_domain
230 , typename unref_expr::proto_tag
232 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type
236 typedef typename result_domain::proto_generator proto_generator;
237 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
239 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
241 typename pass_through_impl::expr_param e
242 , typename pass_through_impl::state_param s
243 , typename pass_through_impl::data_param d
246 expr_type const that = {
247 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d )
252 detail::ignore_unused(&that);
253 return proto_generator()(that);
256 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
257 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 7>
258 : transform_impl<Expr, State, Data>
260 typedef typename pass_through_impl::expr unref_expr;
263 is_same<Domain, deduce_domain>::value
264 , typename unref_expr::proto_domain
271 , typename unref_expr::proto_tag
273 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type
277 typedef typename result_domain::proto_generator proto_generator;
278 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
280 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
282 typename pass_through_impl::expr_param e
283 , typename pass_through_impl::state_param s
284 , typename pass_through_impl::data_param d
287 expr_type const that = {
288 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d )
293 detail::ignore_unused(&that);
294 return proto_generator()(that);
297 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
298 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 8>
299 : transform_impl<Expr, State, Data>
301 typedef typename pass_through_impl::expr unref_expr;
304 is_same<Domain, deduce_domain>::value
305 , typename unref_expr::proto_domain
312 , typename unref_expr::proto_tag
314 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type
318 typedef typename result_domain::proto_generator proto_generator;
319 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
321 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
323 typename pass_through_impl::expr_param e
324 , typename pass_through_impl::state_param s
325 , typename pass_through_impl::data_param d
328 expr_type const that = {
329 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d )
334 detail::ignore_unused(&that);
335 return proto_generator()(that);
338 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
339 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 9>
340 : transform_impl<Expr, State, Data>
342 typedef typename pass_through_impl::expr unref_expr;
345 is_same<Domain, deduce_domain>::value
346 , typename unref_expr::proto_domain
353 , typename unref_expr::proto_tag
355 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >::result_type
359 typedef typename result_domain::proto_generator proto_generator;
360 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
362 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
364 typename pass_through_impl::expr_param e
365 , typename pass_through_impl::state_param s
366 , typename pass_through_impl::data_param d
369 expr_type const that = {
370 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d ) , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >()( e.proto_base().child8, s, d )
375 detail::ignore_unused(&that);
376 return proto_generator()(that);
379 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
380 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 10>
381 : transform_impl<Expr, State, Data>
383 typedef typename pass_through_impl::expr unref_expr;
386 is_same<Domain, deduce_domain>::value
387 , typename unref_expr::proto_domain
394 , typename unref_expr::proto_tag
396 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >::result_type , typename Grammar::proto_child9::template impl< typename result_of::child_c<Expr, 9>::type , State , Data >::result_type
400 typedef typename result_domain::proto_generator proto_generator;
401 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
403 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
405 typename pass_through_impl::expr_param e
406 , typename pass_through_impl::state_param s
407 , typename pass_through_impl::data_param d
410 expr_type const that = {
411 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d ) , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >()( e.proto_base().child8, s, d ) , typename Grammar::proto_child9::template impl< typename result_of::child_c<Expr, 9>::type , State , Data >()( e.proto_base().child9, s, d )
416 detail::ignore_unused(&that);
417 return proto_generator()(that);