Chris@16
|
1 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
2 /// \file make.hpp
|
Chris@16
|
3 /// Contains definition of the make<> transform.
|
Chris@16
|
4 //
|
Chris@16
|
5 // Copyright 2008 Eric Niebler. Distributed under the Boost
|
Chris@16
|
6 // Software License, Version 1.0. (See accompanying file
|
Chris@16
|
7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
8 namespace detail
|
Chris@16
|
9 {
|
Chris@16
|
10 template<typename R >
|
Chris@16
|
11 struct is_applyable<R()>
|
Chris@16
|
12 : mpl::true_
|
Chris@16
|
13 {};
|
Chris@16
|
14 template<typename R >
|
Chris@16
|
15 struct is_applyable<R(*)()>
|
Chris@16
|
16 : mpl::true_
|
Chris@16
|
17 {};
|
Chris@16
|
18 template<typename T, typename A>
|
Chris@16
|
19 struct construct_<proto::expr<T, A, 0>, true>
|
Chris@16
|
20 {
|
Chris@16
|
21 typedef proto::expr<T, A, 0> result_type;
|
Chris@16
|
22 template<typename A0>
|
Chris@16
|
23 BOOST_FORCEINLINE
|
Chris@16
|
24 result_type operator ()(A0 &a0) const
|
Chris@16
|
25 {
|
Chris@16
|
26 return result_type::make(a0);
|
Chris@16
|
27 }
|
Chris@16
|
28 };
|
Chris@16
|
29 template<typename T, typename A>
|
Chris@16
|
30 struct construct_<proto::basic_expr<T, A, 0>, true>
|
Chris@16
|
31 {
|
Chris@16
|
32 typedef proto::basic_expr<T, A, 0> result_type;
|
Chris@16
|
33 template<typename A0>
|
Chris@16
|
34 BOOST_FORCEINLINE
|
Chris@16
|
35 result_type operator ()(A0 &a0) const
|
Chris@16
|
36 {
|
Chris@16
|
37 return result_type::make(a0);
|
Chris@16
|
38 }
|
Chris@16
|
39 };
|
Chris@16
|
40 template<typename Type >
|
Chris@16
|
41 BOOST_FORCEINLINE
|
Chris@16
|
42 Type construct()
|
Chris@16
|
43 {
|
Chris@16
|
44 return construct_<Type>()();
|
Chris@16
|
45 }
|
Chris@16
|
46 }
|
Chris@16
|
47
|
Chris@16
|
48
|
Chris@16
|
49
|
Chris@16
|
50
|
Chris@16
|
51 template<typename Object >
|
Chris@16
|
52 struct make<Object()>
|
Chris@16
|
53 : transform<make<Object()> >
|
Chris@16
|
54 {
|
Chris@16
|
55 template<typename Expr, typename State, typename Data>
|
Chris@16
|
56 struct impl : transform_impl<Expr, State, Data>
|
Chris@16
|
57 {
|
Chris@16
|
58
|
Chris@16
|
59 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
|
Chris@16
|
60
|
Chris@16
|
61
|
Chris@16
|
62
|
Chris@16
|
63
|
Chris@16
|
64
|
Chris@16
|
65
|
Chris@16
|
66
|
Chris@16
|
67 BOOST_FORCEINLINE
|
Chris@16
|
68 result_type operator ()(
|
Chris@16
|
69 typename impl::expr_param e
|
Chris@16
|
70 , typename impl::state_param s
|
Chris@16
|
71 , typename impl::data_param d
|
Chris@16
|
72 ) const
|
Chris@16
|
73 {
|
Chris@16
|
74 proto::detail::ignore_unused(e);
|
Chris@16
|
75 proto::detail::ignore_unused(s);
|
Chris@16
|
76 proto::detail::ignore_unused(d);
|
Chris@16
|
77 return detail::construct<result_type>();
|
Chris@16
|
78 }
|
Chris@16
|
79 };
|
Chris@16
|
80 };
|
Chris@16
|
81 namespace detail
|
Chris@16
|
82 {
|
Chris@16
|
83 template<
|
Chris@16
|
84 template<typename> class R
|
Chris@16
|
85 , typename A0
|
Chris@16
|
86 , typename Expr, typename State, typename Data
|
Chris@16
|
87 >
|
Chris@16
|
88 struct make_<
|
Chris@16
|
89 R<A0>
|
Chris@16
|
90 , Expr, State, Data
|
Chris@16
|
91 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
|
Chris@16
|
92 >
|
Chris@16
|
93 : nested_type_if<
|
Chris@16
|
94 R<typename make_if_<A0, Expr, State, Data> ::type>
|
Chris@16
|
95 , (make_if_<A0, Expr, State, Data> ::applied || false)
|
Chris@16
|
96 >
|
Chris@16
|
97 {};
|
Chris@16
|
98 template<
|
Chris@16
|
99 template<typename> class R
|
Chris@16
|
100 , typename A0
|
Chris@16
|
101 , typename Expr, typename State, typename Data
|
Chris@16
|
102 >
|
Chris@16
|
103 struct make_<
|
Chris@16
|
104 noinvoke<R<A0> >
|
Chris@16
|
105 , Expr, State, Data
|
Chris@16
|
106 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
|
Chris@16
|
107 >
|
Chris@16
|
108 {
|
Chris@16
|
109 typedef R<typename make_if_<A0, Expr, State, Data> ::type> type;
|
Chris@16
|
110 static bool const applied = true;
|
Chris@16
|
111 };
|
Chris@16
|
112 template<typename R , typename A0>
|
Chris@16
|
113 struct is_applyable<R(A0)>
|
Chris@16
|
114 : mpl::true_
|
Chris@16
|
115 {};
|
Chris@16
|
116 template<typename R , typename A0>
|
Chris@16
|
117 struct is_applyable<R(*)(A0)>
|
Chris@16
|
118 : mpl::true_
|
Chris@16
|
119 {};
|
Chris@16
|
120 template<typename T, typename A>
|
Chris@16
|
121 struct construct_<proto::expr<T, A, 1>, true>
|
Chris@16
|
122 {
|
Chris@16
|
123 typedef proto::expr<T, A, 1> result_type;
|
Chris@16
|
124 template<typename A0>
|
Chris@16
|
125 BOOST_FORCEINLINE
|
Chris@16
|
126 result_type operator ()(A0 &a0) const
|
Chris@16
|
127 {
|
Chris@16
|
128 return result_type::make(a0);
|
Chris@16
|
129 }
|
Chris@16
|
130 };
|
Chris@16
|
131 template<typename T, typename A>
|
Chris@16
|
132 struct construct_<proto::basic_expr<T, A, 1>, true>
|
Chris@16
|
133 {
|
Chris@16
|
134 typedef proto::basic_expr<T, A, 1> result_type;
|
Chris@16
|
135 template<typename A0>
|
Chris@16
|
136 BOOST_FORCEINLINE
|
Chris@16
|
137 result_type operator ()(A0 &a0) const
|
Chris@16
|
138 {
|
Chris@16
|
139 return result_type::make(a0);
|
Chris@16
|
140 }
|
Chris@16
|
141 };
|
Chris@16
|
142 template<typename Type , typename A0>
|
Chris@16
|
143 BOOST_FORCEINLINE
|
Chris@16
|
144 Type construct(A0 &a0)
|
Chris@16
|
145 {
|
Chris@16
|
146 return construct_<Type>()(a0);
|
Chris@16
|
147 }
|
Chris@16
|
148 }
|
Chris@16
|
149
|
Chris@16
|
150
|
Chris@16
|
151
|
Chris@16
|
152
|
Chris@16
|
153 template<typename Object , typename A0>
|
Chris@16
|
154 struct make<Object(A0)>
|
Chris@16
|
155 : transform<make<Object(A0)> >
|
Chris@16
|
156 {
|
Chris@16
|
157 template<typename Expr, typename State, typename Data>
|
Chris@16
|
158 struct impl : transform_impl<Expr, State, Data>
|
Chris@16
|
159 {
|
Chris@16
|
160
|
Chris@16
|
161 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
|
Chris@16
|
162
|
Chris@16
|
163
|
Chris@16
|
164
|
Chris@16
|
165
|
Chris@16
|
166
|
Chris@16
|
167
|
Chris@16
|
168
|
Chris@16
|
169 BOOST_FORCEINLINE
|
Chris@16
|
170 result_type operator ()(
|
Chris@16
|
171 typename impl::expr_param e
|
Chris@16
|
172 , typename impl::state_param s
|
Chris@16
|
173 , typename impl::data_param d
|
Chris@16
|
174 ) const
|
Chris@16
|
175 {
|
Chris@16
|
176 proto::detail::ignore_unused(e);
|
Chris@16
|
177 proto::detail::ignore_unused(s);
|
Chris@16
|
178 proto::detail::ignore_unused(d);
|
Chris@16
|
179 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ));
|
Chris@16
|
180 }
|
Chris@16
|
181 };
|
Chris@16
|
182 };
|
Chris@16
|
183
|
Chris@16
|
184
|
Chris@16
|
185
|
Chris@16
|
186
|
Chris@16
|
187 template<typename Object , typename A0>
|
Chris@16
|
188 struct make<Object(A0...)>
|
Chris@16
|
189 : transform<make<Object(A0...)> >
|
Chris@16
|
190 {
|
Chris@16
|
191 template<typename Expr, typename State, typename Data>
|
Chris@16
|
192 struct impl
|
Chris@16
|
193 : make<
|
Chris@16
|
194 typename detail::expand_pattern<
|
Chris@16
|
195 proto::arity_of<Expr>::value
|
Chris@16
|
196 , A0
|
Chris@16
|
197 , detail::expand_pattern_rest_0<
|
Chris@16
|
198 Object
|
Chris@16
|
199
|
Chris@16
|
200 >
|
Chris@16
|
201 >::type
|
Chris@16
|
202 >::template impl<Expr, State, Data>
|
Chris@16
|
203 {};
|
Chris@16
|
204 };
|
Chris@16
|
205 namespace detail
|
Chris@16
|
206 {
|
Chris@16
|
207 template<
|
Chris@16
|
208 template<typename , typename> class R
|
Chris@16
|
209 , typename A0 , typename A1
|
Chris@16
|
210 , typename Expr, typename State, typename Data
|
Chris@16
|
211 >
|
Chris@16
|
212 struct make_<
|
Chris@16
|
213 R<A0 , A1>
|
Chris@16
|
214 , Expr, State, Data
|
Chris@16
|
215 BOOST_PROTO_TEMPLATE_ARITY_PARAM(2)
|
Chris@16
|
216 >
|
Chris@16
|
217 : nested_type_if<
|
Chris@16
|
218 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type>
|
Chris@16
|
219 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || false)
|
Chris@16
|
220 >
|
Chris@16
|
221 {};
|
Chris@16
|
222 template<
|
Chris@16
|
223 template<typename , typename> class R
|
Chris@16
|
224 , typename A0 , typename A1
|
Chris@16
|
225 , typename Expr, typename State, typename Data
|
Chris@16
|
226 >
|
Chris@16
|
227 struct make_<
|
Chris@16
|
228 noinvoke<R<A0 , A1> >
|
Chris@16
|
229 , Expr, State, Data
|
Chris@16
|
230 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
|
Chris@16
|
231 >
|
Chris@16
|
232 {
|
Chris@16
|
233 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type> type;
|
Chris@16
|
234 static bool const applied = true;
|
Chris@16
|
235 };
|
Chris@16
|
236 template<typename R , typename A0 , typename A1>
|
Chris@16
|
237 struct is_applyable<R(A0 , A1)>
|
Chris@16
|
238 : mpl::true_
|
Chris@16
|
239 {};
|
Chris@16
|
240 template<typename R , typename A0 , typename A1>
|
Chris@16
|
241 struct is_applyable<R(*)(A0 , A1)>
|
Chris@16
|
242 : mpl::true_
|
Chris@16
|
243 {};
|
Chris@16
|
244 template<typename T, typename A>
|
Chris@16
|
245 struct construct_<proto::expr<T, A, 2>, true>
|
Chris@16
|
246 {
|
Chris@16
|
247 typedef proto::expr<T, A, 2> result_type;
|
Chris@16
|
248 template<typename A0 , typename A1>
|
Chris@16
|
249 BOOST_FORCEINLINE
|
Chris@16
|
250 result_type operator ()(A0 &a0 , A1 &a1) const
|
Chris@16
|
251 {
|
Chris@16
|
252 return result_type::make(a0 , a1);
|
Chris@16
|
253 }
|
Chris@16
|
254 };
|
Chris@16
|
255 template<typename T, typename A>
|
Chris@16
|
256 struct construct_<proto::basic_expr<T, A, 2>, true>
|
Chris@16
|
257 {
|
Chris@16
|
258 typedef proto::basic_expr<T, A, 2> result_type;
|
Chris@16
|
259 template<typename A0 , typename A1>
|
Chris@16
|
260 BOOST_FORCEINLINE
|
Chris@16
|
261 result_type operator ()(A0 &a0 , A1 &a1) const
|
Chris@16
|
262 {
|
Chris@16
|
263 return result_type::make(a0 , a1);
|
Chris@16
|
264 }
|
Chris@16
|
265 };
|
Chris@16
|
266 template<typename Type , typename A0 , typename A1>
|
Chris@16
|
267 BOOST_FORCEINLINE
|
Chris@16
|
268 Type construct(A0 &a0 , A1 &a1)
|
Chris@16
|
269 {
|
Chris@16
|
270 return construct_<Type>()(a0 , a1);
|
Chris@16
|
271 }
|
Chris@16
|
272 }
|
Chris@16
|
273
|
Chris@16
|
274
|
Chris@16
|
275
|
Chris@16
|
276
|
Chris@16
|
277 template<typename Object , typename A0 , typename A1>
|
Chris@16
|
278 struct make<Object(A0 , A1)>
|
Chris@16
|
279 : transform<make<Object(A0 , A1)> >
|
Chris@16
|
280 {
|
Chris@16
|
281 template<typename Expr, typename State, typename Data>
|
Chris@16
|
282 struct impl : transform_impl<Expr, State, Data>
|
Chris@16
|
283 {
|
Chris@16
|
284
|
Chris@16
|
285 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
|
Chris@16
|
286
|
Chris@16
|
287
|
Chris@16
|
288
|
Chris@16
|
289
|
Chris@16
|
290
|
Chris@16
|
291
|
Chris@16
|
292
|
Chris@16
|
293 BOOST_FORCEINLINE
|
Chris@16
|
294 result_type operator ()(
|
Chris@16
|
295 typename impl::expr_param e
|
Chris@16
|
296 , typename impl::state_param s
|
Chris@16
|
297 , typename impl::data_param d
|
Chris@16
|
298 ) const
|
Chris@16
|
299 {
|
Chris@16
|
300 proto::detail::ignore_unused(e);
|
Chris@16
|
301 proto::detail::ignore_unused(s);
|
Chris@16
|
302 proto::detail::ignore_unused(d);
|
Chris@16
|
303 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ));
|
Chris@16
|
304 }
|
Chris@16
|
305 };
|
Chris@16
|
306 };
|
Chris@16
|
307
|
Chris@16
|
308
|
Chris@16
|
309
|
Chris@16
|
310
|
Chris@16
|
311 template<typename Object , typename A0 , typename A1>
|
Chris@16
|
312 struct make<Object(A0 , A1...)>
|
Chris@16
|
313 : transform<make<Object(A0 , A1...)> >
|
Chris@16
|
314 {
|
Chris@16
|
315 template<typename Expr, typename State, typename Data>
|
Chris@16
|
316 struct impl
|
Chris@16
|
317 : make<
|
Chris@16
|
318 typename detail::expand_pattern<
|
Chris@16
|
319 proto::arity_of<Expr>::value
|
Chris@16
|
320 , A1
|
Chris@16
|
321 , detail::expand_pattern_rest_1<
|
Chris@16
|
322 Object
|
Chris@16
|
323 , A0
|
Chris@16
|
324 >
|
Chris@16
|
325 >::type
|
Chris@16
|
326 >::template impl<Expr, State, Data>
|
Chris@16
|
327 {};
|
Chris@16
|
328 };
|
Chris@16
|
329 namespace detail
|
Chris@16
|
330 {
|
Chris@16
|
331 template<
|
Chris@16
|
332 template<typename , typename , typename> class R
|
Chris@16
|
333 , typename A0 , typename A1 , typename A2
|
Chris@16
|
334 , typename Expr, typename State, typename Data
|
Chris@16
|
335 >
|
Chris@16
|
336 struct make_<
|
Chris@16
|
337 R<A0 , A1 , A2>
|
Chris@16
|
338 , Expr, State, Data
|
Chris@16
|
339 BOOST_PROTO_TEMPLATE_ARITY_PARAM(3)
|
Chris@16
|
340 >
|
Chris@16
|
341 : nested_type_if<
|
Chris@16
|
342 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type>
|
Chris@16
|
343 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || false)
|
Chris@16
|
344 >
|
Chris@16
|
345 {};
|
Chris@16
|
346 template<
|
Chris@16
|
347 template<typename , typename , typename> class R
|
Chris@16
|
348 , typename A0 , typename A1 , typename A2
|
Chris@16
|
349 , typename Expr, typename State, typename Data
|
Chris@16
|
350 >
|
Chris@16
|
351 struct make_<
|
Chris@16
|
352 noinvoke<R<A0 , A1 , A2> >
|
Chris@16
|
353 , Expr, State, Data
|
Chris@16
|
354 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
|
Chris@16
|
355 >
|
Chris@16
|
356 {
|
Chris@16
|
357 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type> type;
|
Chris@16
|
358 static bool const applied = true;
|
Chris@16
|
359 };
|
Chris@16
|
360 template<typename R , typename A0 , typename A1 , typename A2>
|
Chris@16
|
361 struct is_applyable<R(A0 , A1 , A2)>
|
Chris@16
|
362 : mpl::true_
|
Chris@16
|
363 {};
|
Chris@16
|
364 template<typename R , typename A0 , typename A1 , typename A2>
|
Chris@16
|
365 struct is_applyable<R(*)(A0 , A1 , A2)>
|
Chris@16
|
366 : mpl::true_
|
Chris@16
|
367 {};
|
Chris@16
|
368 template<typename T, typename A>
|
Chris@16
|
369 struct construct_<proto::expr<T, A, 3>, true>
|
Chris@16
|
370 {
|
Chris@16
|
371 typedef proto::expr<T, A, 3> result_type;
|
Chris@16
|
372 template<typename A0 , typename A1 , typename A2>
|
Chris@16
|
373 BOOST_FORCEINLINE
|
Chris@16
|
374 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2) const
|
Chris@16
|
375 {
|
Chris@16
|
376 return result_type::make(a0 , a1 , a2);
|
Chris@16
|
377 }
|
Chris@16
|
378 };
|
Chris@16
|
379 template<typename T, typename A>
|
Chris@16
|
380 struct construct_<proto::basic_expr<T, A, 3>, true>
|
Chris@16
|
381 {
|
Chris@16
|
382 typedef proto::basic_expr<T, A, 3> result_type;
|
Chris@16
|
383 template<typename A0 , typename A1 , typename A2>
|
Chris@16
|
384 BOOST_FORCEINLINE
|
Chris@16
|
385 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2) const
|
Chris@16
|
386 {
|
Chris@16
|
387 return result_type::make(a0 , a1 , a2);
|
Chris@16
|
388 }
|
Chris@16
|
389 };
|
Chris@16
|
390 template<typename Type , typename A0 , typename A1 , typename A2>
|
Chris@16
|
391 BOOST_FORCEINLINE
|
Chris@16
|
392 Type construct(A0 &a0 , A1 &a1 , A2 &a2)
|
Chris@16
|
393 {
|
Chris@16
|
394 return construct_<Type>()(a0 , a1 , a2);
|
Chris@16
|
395 }
|
Chris@16
|
396 }
|
Chris@16
|
397
|
Chris@16
|
398
|
Chris@16
|
399
|
Chris@16
|
400
|
Chris@16
|
401 template<typename Object , typename A0 , typename A1 , typename A2>
|
Chris@16
|
402 struct make<Object(A0 , A1 , A2)>
|
Chris@16
|
403 : transform<make<Object(A0 , A1 , A2)> >
|
Chris@16
|
404 {
|
Chris@16
|
405 template<typename Expr, typename State, typename Data>
|
Chris@16
|
406 struct impl : transform_impl<Expr, State, Data>
|
Chris@16
|
407 {
|
Chris@16
|
408
|
Chris@16
|
409 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
|
Chris@16
|
410
|
Chris@16
|
411
|
Chris@16
|
412
|
Chris@16
|
413
|
Chris@16
|
414
|
Chris@16
|
415
|
Chris@16
|
416
|
Chris@16
|
417 BOOST_FORCEINLINE
|
Chris@16
|
418 result_type operator ()(
|
Chris@16
|
419 typename impl::expr_param e
|
Chris@16
|
420 , typename impl::state_param s
|
Chris@16
|
421 , typename impl::data_param d
|
Chris@16
|
422 ) const
|
Chris@16
|
423 {
|
Chris@16
|
424 proto::detail::ignore_unused(e);
|
Chris@16
|
425 proto::detail::ignore_unused(s);
|
Chris@16
|
426 proto::detail::ignore_unused(d);
|
Chris@16
|
427 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ));
|
Chris@16
|
428 }
|
Chris@16
|
429 };
|
Chris@16
|
430 };
|
Chris@16
|
431
|
Chris@16
|
432
|
Chris@16
|
433
|
Chris@16
|
434
|
Chris@16
|
435 template<typename Object , typename A0 , typename A1 , typename A2>
|
Chris@16
|
436 struct make<Object(A0 , A1 , A2...)>
|
Chris@16
|
437 : transform<make<Object(A0 , A1 , A2...)> >
|
Chris@16
|
438 {
|
Chris@16
|
439 template<typename Expr, typename State, typename Data>
|
Chris@16
|
440 struct impl
|
Chris@16
|
441 : make<
|
Chris@16
|
442 typename detail::expand_pattern<
|
Chris@16
|
443 proto::arity_of<Expr>::value
|
Chris@16
|
444 , A2
|
Chris@16
|
445 , detail::expand_pattern_rest_2<
|
Chris@16
|
446 Object
|
Chris@16
|
447 , A0 , A1
|
Chris@16
|
448 >
|
Chris@16
|
449 >::type
|
Chris@16
|
450 >::template impl<Expr, State, Data>
|
Chris@16
|
451 {};
|
Chris@16
|
452 };
|
Chris@16
|
453 namespace detail
|
Chris@16
|
454 {
|
Chris@16
|
455 template<
|
Chris@16
|
456 template<typename , typename , typename , typename> class R
|
Chris@16
|
457 , typename A0 , typename A1 , typename A2 , typename A3
|
Chris@16
|
458 , typename Expr, typename State, typename Data
|
Chris@16
|
459 >
|
Chris@16
|
460 struct make_<
|
Chris@16
|
461 R<A0 , A1 , A2 , A3>
|
Chris@16
|
462 , Expr, State, Data
|
Chris@16
|
463 BOOST_PROTO_TEMPLATE_ARITY_PARAM(4)
|
Chris@16
|
464 >
|
Chris@16
|
465 : nested_type_if<
|
Chris@16
|
466 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type>
|
Chris@16
|
467 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || false)
|
Chris@16
|
468 >
|
Chris@16
|
469 {};
|
Chris@16
|
470 template<
|
Chris@16
|
471 template<typename , typename , typename , typename> class R
|
Chris@16
|
472 , typename A0 , typename A1 , typename A2 , typename A3
|
Chris@16
|
473 , typename Expr, typename State, typename Data
|
Chris@16
|
474 >
|
Chris@16
|
475 struct make_<
|
Chris@16
|
476 noinvoke<R<A0 , A1 , A2 , A3> >
|
Chris@16
|
477 , Expr, State, Data
|
Chris@16
|
478 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
|
Chris@16
|
479 >
|
Chris@16
|
480 {
|
Chris@16
|
481 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type> type;
|
Chris@16
|
482 static bool const applied = true;
|
Chris@16
|
483 };
|
Chris@16
|
484 template<typename R , typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
485 struct is_applyable<R(A0 , A1 , A2 , A3)>
|
Chris@16
|
486 : mpl::true_
|
Chris@16
|
487 {};
|
Chris@16
|
488 template<typename R , typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
489 struct is_applyable<R(*)(A0 , A1 , A2 , A3)>
|
Chris@16
|
490 : mpl::true_
|
Chris@16
|
491 {};
|
Chris@16
|
492 template<typename T, typename A>
|
Chris@16
|
493 struct construct_<proto::expr<T, A, 4>, true>
|
Chris@16
|
494 {
|
Chris@16
|
495 typedef proto::expr<T, A, 4> result_type;
|
Chris@16
|
496 template<typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
497 BOOST_FORCEINLINE
|
Chris@16
|
498 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3) const
|
Chris@16
|
499 {
|
Chris@16
|
500 return result_type::make(a0 , a1 , a2 , a3);
|
Chris@16
|
501 }
|
Chris@16
|
502 };
|
Chris@16
|
503 template<typename T, typename A>
|
Chris@16
|
504 struct construct_<proto::basic_expr<T, A, 4>, true>
|
Chris@16
|
505 {
|
Chris@16
|
506 typedef proto::basic_expr<T, A, 4> result_type;
|
Chris@16
|
507 template<typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
508 BOOST_FORCEINLINE
|
Chris@16
|
509 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3) const
|
Chris@16
|
510 {
|
Chris@16
|
511 return result_type::make(a0 , a1 , a2 , a3);
|
Chris@16
|
512 }
|
Chris@16
|
513 };
|
Chris@16
|
514 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
515 BOOST_FORCEINLINE
|
Chris@16
|
516 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3)
|
Chris@16
|
517 {
|
Chris@16
|
518 return construct_<Type>()(a0 , a1 , a2 , a3);
|
Chris@16
|
519 }
|
Chris@16
|
520 }
|
Chris@16
|
521
|
Chris@16
|
522
|
Chris@16
|
523
|
Chris@16
|
524
|
Chris@16
|
525 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
526 struct make<Object(A0 , A1 , A2 , A3)>
|
Chris@16
|
527 : transform<make<Object(A0 , A1 , A2 , A3)> >
|
Chris@16
|
528 {
|
Chris@16
|
529 template<typename Expr, typename State, typename Data>
|
Chris@16
|
530 struct impl : transform_impl<Expr, State, Data>
|
Chris@16
|
531 {
|
Chris@16
|
532
|
Chris@16
|
533 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
|
Chris@16
|
534
|
Chris@16
|
535
|
Chris@16
|
536
|
Chris@16
|
537
|
Chris@16
|
538
|
Chris@16
|
539
|
Chris@16
|
540
|
Chris@16
|
541 BOOST_FORCEINLINE
|
Chris@16
|
542 result_type operator ()(
|
Chris@16
|
543 typename impl::expr_param e
|
Chris@16
|
544 , typename impl::state_param s
|
Chris@16
|
545 , typename impl::data_param d
|
Chris@16
|
546 ) const
|
Chris@16
|
547 {
|
Chris@16
|
548 proto::detail::ignore_unused(e);
|
Chris@16
|
549 proto::detail::ignore_unused(s);
|
Chris@16
|
550 proto::detail::ignore_unused(d);
|
Chris@16
|
551 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ));
|
Chris@16
|
552 }
|
Chris@16
|
553 };
|
Chris@16
|
554 };
|
Chris@16
|
555
|
Chris@16
|
556
|
Chris@16
|
557
|
Chris@16
|
558
|
Chris@16
|
559 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
560 struct make<Object(A0 , A1 , A2 , A3...)>
|
Chris@16
|
561 : transform<make<Object(A0 , A1 , A2 , A3...)> >
|
Chris@16
|
562 {
|
Chris@16
|
563 template<typename Expr, typename State, typename Data>
|
Chris@16
|
564 struct impl
|
Chris@16
|
565 : make<
|
Chris@16
|
566 typename detail::expand_pattern<
|
Chris@16
|
567 proto::arity_of<Expr>::value
|
Chris@16
|
568 , A3
|
Chris@16
|
569 , detail::expand_pattern_rest_3<
|
Chris@16
|
570 Object
|
Chris@16
|
571 , A0 , A1 , A2
|
Chris@16
|
572 >
|
Chris@16
|
573 >::type
|
Chris@16
|
574 >::template impl<Expr, State, Data>
|
Chris@16
|
575 {};
|
Chris@16
|
576 };
|
Chris@16
|
577 namespace detail
|
Chris@16
|
578 {
|
Chris@16
|
579 template<
|
Chris@16
|
580 template<typename , typename , typename , typename , typename> class R
|
Chris@16
|
581 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
|
Chris@16
|
582 , typename Expr, typename State, typename Data
|
Chris@16
|
583 >
|
Chris@16
|
584 struct make_<
|
Chris@16
|
585 R<A0 , A1 , A2 , A3 , A4>
|
Chris@16
|
586 , Expr, State, Data
|
Chris@16
|
587 BOOST_PROTO_TEMPLATE_ARITY_PARAM(5)
|
Chris@16
|
588 >
|
Chris@16
|
589 : nested_type_if<
|
Chris@16
|
590 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type>
|
Chris@16
|
591 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || false)
|
Chris@16
|
592 >
|
Chris@16
|
593 {};
|
Chris@16
|
594 template<
|
Chris@16
|
595 template<typename , typename , typename , typename , typename> class R
|
Chris@16
|
596 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
|
Chris@16
|
597 , typename Expr, typename State, typename Data
|
Chris@16
|
598 >
|
Chris@16
|
599 struct make_<
|
Chris@16
|
600 noinvoke<R<A0 , A1 , A2 , A3 , A4> >
|
Chris@16
|
601 , Expr, State, Data
|
Chris@16
|
602 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
|
Chris@16
|
603 >
|
Chris@16
|
604 {
|
Chris@16
|
605 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type> type;
|
Chris@16
|
606 static bool const applied = true;
|
Chris@16
|
607 };
|
Chris@16
|
608 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
609 struct is_applyable<R(A0 , A1 , A2 , A3 , A4)>
|
Chris@16
|
610 : mpl::true_
|
Chris@16
|
611 {};
|
Chris@16
|
612 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
613 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4)>
|
Chris@16
|
614 : mpl::true_
|
Chris@16
|
615 {};
|
Chris@16
|
616 template<typename T, typename A>
|
Chris@16
|
617 struct construct_<proto::expr<T, A, 5>, true>
|
Chris@16
|
618 {
|
Chris@16
|
619 typedef proto::expr<T, A, 5> result_type;
|
Chris@16
|
620 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
621 BOOST_FORCEINLINE
|
Chris@16
|
622 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4) const
|
Chris@16
|
623 {
|
Chris@16
|
624 return result_type::make(a0 , a1 , a2 , a3 , a4);
|
Chris@16
|
625 }
|
Chris@16
|
626 };
|
Chris@16
|
627 template<typename T, typename A>
|
Chris@16
|
628 struct construct_<proto::basic_expr<T, A, 5>, true>
|
Chris@16
|
629 {
|
Chris@16
|
630 typedef proto::basic_expr<T, A, 5> result_type;
|
Chris@16
|
631 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
632 BOOST_FORCEINLINE
|
Chris@16
|
633 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4) const
|
Chris@16
|
634 {
|
Chris@16
|
635 return result_type::make(a0 , a1 , a2 , a3 , a4);
|
Chris@16
|
636 }
|
Chris@16
|
637 };
|
Chris@16
|
638 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
639 BOOST_FORCEINLINE
|
Chris@16
|
640 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4)
|
Chris@16
|
641 {
|
Chris@16
|
642 return construct_<Type>()(a0 , a1 , a2 , a3 , a4);
|
Chris@16
|
643 }
|
Chris@16
|
644 }
|
Chris@16
|
645
|
Chris@16
|
646
|
Chris@16
|
647
|
Chris@16
|
648
|
Chris@16
|
649 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
650 struct make<Object(A0 , A1 , A2 , A3 , A4)>
|
Chris@16
|
651 : transform<make<Object(A0 , A1 , A2 , A3 , A4)> >
|
Chris@16
|
652 {
|
Chris@16
|
653 template<typename Expr, typename State, typename Data>
|
Chris@16
|
654 struct impl : transform_impl<Expr, State, Data>
|
Chris@16
|
655 {
|
Chris@16
|
656
|
Chris@16
|
657 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
|
Chris@16
|
658
|
Chris@16
|
659
|
Chris@16
|
660
|
Chris@16
|
661
|
Chris@16
|
662
|
Chris@16
|
663
|
Chris@16
|
664
|
Chris@16
|
665 BOOST_FORCEINLINE
|
Chris@16
|
666 result_type operator ()(
|
Chris@16
|
667 typename impl::expr_param e
|
Chris@16
|
668 , typename impl::state_param s
|
Chris@16
|
669 , typename impl::data_param d
|
Chris@16
|
670 ) const
|
Chris@16
|
671 {
|
Chris@16
|
672 proto::detail::ignore_unused(e);
|
Chris@16
|
673 proto::detail::ignore_unused(s);
|
Chris@16
|
674 proto::detail::ignore_unused(d);
|
Chris@16
|
675 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ));
|
Chris@16
|
676 }
|
Chris@16
|
677 };
|
Chris@16
|
678 };
|
Chris@16
|
679
|
Chris@16
|
680
|
Chris@16
|
681
|
Chris@16
|
682
|
Chris@16
|
683 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
684 struct make<Object(A0 , A1 , A2 , A3 , A4...)>
|
Chris@16
|
685 : transform<make<Object(A0 , A1 , A2 , A3 , A4...)> >
|
Chris@16
|
686 {
|
Chris@16
|
687 template<typename Expr, typename State, typename Data>
|
Chris@16
|
688 struct impl
|
Chris@16
|
689 : make<
|
Chris@16
|
690 typename detail::expand_pattern<
|
Chris@16
|
691 proto::arity_of<Expr>::value
|
Chris@16
|
692 , A4
|
Chris@16
|
693 , detail::expand_pattern_rest_4<
|
Chris@16
|
694 Object
|
Chris@16
|
695 , A0 , A1 , A2 , A3
|
Chris@16
|
696 >
|
Chris@16
|
697 >::type
|
Chris@16
|
698 >::template impl<Expr, State, Data>
|
Chris@16
|
699 {};
|
Chris@16
|
700 };
|
Chris@16
|
701 namespace detail
|
Chris@16
|
702 {
|
Chris@16
|
703 template<
|
Chris@16
|
704 template<typename , typename , typename , typename , typename , typename> class R
|
Chris@16
|
705 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
|
Chris@16
|
706 , typename Expr, typename State, typename Data
|
Chris@16
|
707 >
|
Chris@16
|
708 struct make_<
|
Chris@16
|
709 R<A0 , A1 , A2 , A3 , A4 , A5>
|
Chris@16
|
710 , Expr, State, Data
|
Chris@16
|
711 BOOST_PROTO_TEMPLATE_ARITY_PARAM(6)
|
Chris@16
|
712 >
|
Chris@16
|
713 : nested_type_if<
|
Chris@16
|
714 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type>
|
Chris@16
|
715 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || make_if_<A5, Expr, State, Data> ::applied || false)
|
Chris@16
|
716 >
|
Chris@16
|
717 {};
|
Chris@16
|
718 template<
|
Chris@16
|
719 template<typename , typename , typename , typename , typename , typename> class R
|
Chris@16
|
720 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
|
Chris@16
|
721 , typename Expr, typename State, typename Data
|
Chris@16
|
722 >
|
Chris@16
|
723 struct make_<
|
Chris@16
|
724 noinvoke<R<A0 , A1 , A2 , A3 , A4 , A5> >
|
Chris@16
|
725 , Expr, State, Data
|
Chris@16
|
726 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
|
Chris@16
|
727 >
|
Chris@16
|
728 {
|
Chris@16
|
729 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type> type;
|
Chris@16
|
730 static bool const applied = true;
|
Chris@16
|
731 };
|
Chris@16
|
732 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
733 struct is_applyable<R(A0 , A1 , A2 , A3 , A4 , A5)>
|
Chris@16
|
734 : mpl::true_
|
Chris@16
|
735 {};
|
Chris@16
|
736 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
737 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4 , A5)>
|
Chris@16
|
738 : mpl::true_
|
Chris@16
|
739 {};
|
Chris@16
|
740 template<typename T, typename A>
|
Chris@16
|
741 struct construct_<proto::expr<T, A, 6>, true>
|
Chris@16
|
742 {
|
Chris@16
|
743 typedef proto::expr<T, A, 6> result_type;
|
Chris@16
|
744 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
745 BOOST_FORCEINLINE
|
Chris@16
|
746 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5) const
|
Chris@16
|
747 {
|
Chris@16
|
748 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5);
|
Chris@16
|
749 }
|
Chris@16
|
750 };
|
Chris@16
|
751 template<typename T, typename A>
|
Chris@16
|
752 struct construct_<proto::basic_expr<T, A, 6>, true>
|
Chris@16
|
753 {
|
Chris@16
|
754 typedef proto::basic_expr<T, A, 6> result_type;
|
Chris@16
|
755 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
756 BOOST_FORCEINLINE
|
Chris@16
|
757 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5) const
|
Chris@16
|
758 {
|
Chris@16
|
759 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5);
|
Chris@16
|
760 }
|
Chris@16
|
761 };
|
Chris@16
|
762 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
763 BOOST_FORCEINLINE
|
Chris@16
|
764 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5)
|
Chris@16
|
765 {
|
Chris@16
|
766 return construct_<Type>()(a0 , a1 , a2 , a3 , a4 , a5);
|
Chris@16
|
767 }
|
Chris@16
|
768 }
|
Chris@16
|
769
|
Chris@16
|
770
|
Chris@16
|
771
|
Chris@16
|
772
|
Chris@16
|
773 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
774 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5)>
|
Chris@16
|
775 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5)> >
|
Chris@16
|
776 {
|
Chris@16
|
777 template<typename Expr, typename State, typename Data>
|
Chris@16
|
778 struct impl : transform_impl<Expr, State, Data>
|
Chris@16
|
779 {
|
Chris@16
|
780
|
Chris@16
|
781 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
|
Chris@16
|
782
|
Chris@16
|
783
|
Chris@16
|
784
|
Chris@16
|
785
|
Chris@16
|
786
|
Chris@16
|
787
|
Chris@16
|
788
|
Chris@16
|
789 BOOST_FORCEINLINE
|
Chris@16
|
790 result_type operator ()(
|
Chris@16
|
791 typename impl::expr_param e
|
Chris@16
|
792 , typename impl::state_param s
|
Chris@16
|
793 , typename impl::data_param d
|
Chris@16
|
794 ) const
|
Chris@16
|
795 {
|
Chris@16
|
796 proto::detail::ignore_unused(e);
|
Chris@16
|
797 proto::detail::ignore_unused(s);
|
Chris@16
|
798 proto::detail::ignore_unused(d);
|
Chris@16
|
799 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ));
|
Chris@16
|
800 }
|
Chris@16
|
801 };
|
Chris@16
|
802 };
|
Chris@16
|
803
|
Chris@16
|
804
|
Chris@16
|
805
|
Chris@16
|
806
|
Chris@16
|
807 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
808 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5...)>
|
Chris@16
|
809 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5...)> >
|
Chris@16
|
810 {
|
Chris@16
|
811 template<typename Expr, typename State, typename Data>
|
Chris@16
|
812 struct impl
|
Chris@16
|
813 : make<
|
Chris@16
|
814 typename detail::expand_pattern<
|
Chris@16
|
815 proto::arity_of<Expr>::value
|
Chris@16
|
816 , A5
|
Chris@16
|
817 , detail::expand_pattern_rest_5<
|
Chris@16
|
818 Object
|
Chris@16
|
819 , A0 , A1 , A2 , A3 , A4
|
Chris@16
|
820 >
|
Chris@16
|
821 >::type
|
Chris@16
|
822 >::template impl<Expr, State, Data>
|
Chris@16
|
823 {};
|
Chris@16
|
824 };
|
Chris@16
|
825 namespace detail
|
Chris@16
|
826 {
|
Chris@16
|
827 template<
|
Chris@16
|
828 template<typename , typename , typename , typename , typename , typename , typename> class R
|
Chris@16
|
829 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
|
Chris@16
|
830 , typename Expr, typename State, typename Data
|
Chris@16
|
831 >
|
Chris@16
|
832 struct make_<
|
Chris@16
|
833 R<A0 , A1 , A2 , A3 , A4 , A5 , A6>
|
Chris@16
|
834 , Expr, State, Data
|
Chris@16
|
835 BOOST_PROTO_TEMPLATE_ARITY_PARAM(7)
|
Chris@16
|
836 >
|
Chris@16
|
837 : nested_type_if<
|
Chris@16
|
838 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type>
|
Chris@16
|
839 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || make_if_<A5, Expr, State, Data> ::applied || make_if_<A6, Expr, State, Data> ::applied || false)
|
Chris@16
|
840 >
|
Chris@16
|
841 {};
|
Chris@16
|
842 template<
|
Chris@16
|
843 template<typename , typename , typename , typename , typename , typename , typename> class R
|
Chris@16
|
844 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
|
Chris@16
|
845 , typename Expr, typename State, typename Data
|
Chris@16
|
846 >
|
Chris@16
|
847 struct make_<
|
Chris@16
|
848 noinvoke<R<A0 , A1 , A2 , A3 , A4 , A5 , A6> >
|
Chris@16
|
849 , Expr, State, Data
|
Chris@16
|
850 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
|
Chris@16
|
851 >
|
Chris@16
|
852 {
|
Chris@16
|
853 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type> type;
|
Chris@16
|
854 static bool const applied = true;
|
Chris@16
|
855 };
|
Chris@16
|
856 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
857 struct is_applyable<R(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
|
Chris@16
|
858 : mpl::true_
|
Chris@16
|
859 {};
|
Chris@16
|
860 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
861 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
|
Chris@16
|
862 : mpl::true_
|
Chris@16
|
863 {};
|
Chris@16
|
864 template<typename T, typename A>
|
Chris@16
|
865 struct construct_<proto::expr<T, A, 7>, true>
|
Chris@16
|
866 {
|
Chris@16
|
867 typedef proto::expr<T, A, 7> result_type;
|
Chris@16
|
868 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
869 BOOST_FORCEINLINE
|
Chris@16
|
870 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6) const
|
Chris@16
|
871 {
|
Chris@16
|
872 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6);
|
Chris@16
|
873 }
|
Chris@16
|
874 };
|
Chris@16
|
875 template<typename T, typename A>
|
Chris@16
|
876 struct construct_<proto::basic_expr<T, A, 7>, true>
|
Chris@16
|
877 {
|
Chris@16
|
878 typedef proto::basic_expr<T, A, 7> result_type;
|
Chris@16
|
879 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
880 BOOST_FORCEINLINE
|
Chris@16
|
881 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6) const
|
Chris@16
|
882 {
|
Chris@16
|
883 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6);
|
Chris@16
|
884 }
|
Chris@16
|
885 };
|
Chris@16
|
886 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
887 BOOST_FORCEINLINE
|
Chris@16
|
888 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6)
|
Chris@16
|
889 {
|
Chris@16
|
890 return construct_<Type>()(a0 , a1 , a2 , a3 , a4 , a5 , a6);
|
Chris@16
|
891 }
|
Chris@16
|
892 }
|
Chris@16
|
893
|
Chris@16
|
894
|
Chris@16
|
895
|
Chris@16
|
896
|
Chris@16
|
897 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
898 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
|
Chris@16
|
899 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6)> >
|
Chris@16
|
900 {
|
Chris@16
|
901 template<typename Expr, typename State, typename Data>
|
Chris@16
|
902 struct impl : transform_impl<Expr, State, Data>
|
Chris@16
|
903 {
|
Chris@16
|
904
|
Chris@16
|
905 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
|
Chris@16
|
906
|
Chris@16
|
907
|
Chris@16
|
908
|
Chris@16
|
909
|
Chris@16
|
910
|
Chris@16
|
911
|
Chris@16
|
912
|
Chris@16
|
913 BOOST_FORCEINLINE
|
Chris@16
|
914 result_type operator ()(
|
Chris@16
|
915 typename impl::expr_param e
|
Chris@16
|
916 , typename impl::state_param s
|
Chris@16
|
917 , typename impl::data_param d
|
Chris@16
|
918 ) const
|
Chris@16
|
919 {
|
Chris@16
|
920 proto::detail::ignore_unused(e);
|
Chris@16
|
921 proto::detail::ignore_unused(s);
|
Chris@16
|
922 proto::detail::ignore_unused(d);
|
Chris@16
|
923 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ));
|
Chris@16
|
924 }
|
Chris@16
|
925 };
|
Chris@16
|
926 };
|
Chris@16
|
927
|
Chris@16
|
928
|
Chris@16
|
929
|
Chris@16
|
930
|
Chris@16
|
931 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
932 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6...)>
|
Chris@16
|
933 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6...)> >
|
Chris@16
|
934 {
|
Chris@16
|
935 template<typename Expr, typename State, typename Data>
|
Chris@16
|
936 struct impl
|
Chris@16
|
937 : make<
|
Chris@16
|
938 typename detail::expand_pattern<
|
Chris@16
|
939 proto::arity_of<Expr>::value
|
Chris@16
|
940 , A6
|
Chris@16
|
941 , detail::expand_pattern_rest_6<
|
Chris@16
|
942 Object
|
Chris@16
|
943 , A0 , A1 , A2 , A3 , A4 , A5
|
Chris@16
|
944 >
|
Chris@16
|
945 >::type
|
Chris@16
|
946 >::template impl<Expr, State, Data>
|
Chris@16
|
947 {};
|
Chris@16
|
948 };
|
Chris@16
|
949 namespace detail
|
Chris@16
|
950 {
|
Chris@16
|
951 template<
|
Chris@16
|
952 template<typename , typename , typename , typename , typename , typename , typename , typename> class R
|
Chris@16
|
953 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
|
Chris@16
|
954 , typename Expr, typename State, typename Data
|
Chris@16
|
955 >
|
Chris@16
|
956 struct make_<
|
Chris@16
|
957 R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>
|
Chris@16
|
958 , Expr, State, Data
|
Chris@16
|
959 BOOST_PROTO_TEMPLATE_ARITY_PARAM(8)
|
Chris@16
|
960 >
|
Chris@16
|
961 : nested_type_if<
|
Chris@16
|
962 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type>
|
Chris@16
|
963 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || make_if_<A5, Expr, State, Data> ::applied || make_if_<A6, Expr, State, Data> ::applied || make_if_<A7, Expr, State, Data> ::applied || false)
|
Chris@16
|
964 >
|
Chris@16
|
965 {};
|
Chris@16
|
966 template<
|
Chris@16
|
967 template<typename , typename , typename , typename , typename , typename , typename , typename> class R
|
Chris@16
|
968 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
|
Chris@16
|
969 , typename Expr, typename State, typename Data
|
Chris@16
|
970 >
|
Chris@16
|
971 struct make_<
|
Chris@16
|
972 noinvoke<R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> >
|
Chris@16
|
973 , Expr, State, Data
|
Chris@16
|
974 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
|
Chris@16
|
975 >
|
Chris@16
|
976 {
|
Chris@16
|
977 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type> type;
|
Chris@16
|
978 static bool const applied = true;
|
Chris@16
|
979 };
|
Chris@16
|
980 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
981 struct is_applyable<R(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
|
Chris@16
|
982 : mpl::true_
|
Chris@16
|
983 {};
|
Chris@16
|
984 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
985 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
|
Chris@16
|
986 : mpl::true_
|
Chris@16
|
987 {};
|
Chris@16
|
988 template<typename T, typename A>
|
Chris@16
|
989 struct construct_<proto::expr<T, A, 8>, true>
|
Chris@16
|
990 {
|
Chris@16
|
991 typedef proto::expr<T, A, 8> result_type;
|
Chris@16
|
992 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
993 BOOST_FORCEINLINE
|
Chris@16
|
994 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7) const
|
Chris@16
|
995 {
|
Chris@16
|
996 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
|
Chris@16
|
997 }
|
Chris@16
|
998 };
|
Chris@16
|
999 template<typename T, typename A>
|
Chris@16
|
1000 struct construct_<proto::basic_expr<T, A, 8>, true>
|
Chris@16
|
1001 {
|
Chris@16
|
1002 typedef proto::basic_expr<T, A, 8> result_type;
|
Chris@16
|
1003 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
1004 BOOST_FORCEINLINE
|
Chris@16
|
1005 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7) const
|
Chris@16
|
1006 {
|
Chris@16
|
1007 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
|
Chris@16
|
1008 }
|
Chris@16
|
1009 };
|
Chris@16
|
1010 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
1011 BOOST_FORCEINLINE
|
Chris@16
|
1012 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7)
|
Chris@16
|
1013 {
|
Chris@16
|
1014 return construct_<Type>()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
|
Chris@16
|
1015 }
|
Chris@16
|
1016 }
|
Chris@16
|
1017
|
Chris@16
|
1018
|
Chris@16
|
1019
|
Chris@16
|
1020
|
Chris@16
|
1021 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
1022 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
|
Chris@16
|
1023 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)> >
|
Chris@16
|
1024 {
|
Chris@16
|
1025 template<typename Expr, typename State, typename Data>
|
Chris@16
|
1026 struct impl : transform_impl<Expr, State, Data>
|
Chris@16
|
1027 {
|
Chris@16
|
1028
|
Chris@16
|
1029 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
|
Chris@16
|
1030
|
Chris@16
|
1031
|
Chris@16
|
1032
|
Chris@16
|
1033
|
Chris@16
|
1034
|
Chris@16
|
1035
|
Chris@16
|
1036
|
Chris@16
|
1037 BOOST_FORCEINLINE
|
Chris@16
|
1038 result_type operator ()(
|
Chris@16
|
1039 typename impl::expr_param e
|
Chris@16
|
1040 , typename impl::state_param s
|
Chris@16
|
1041 , typename impl::data_param d
|
Chris@16
|
1042 ) const
|
Chris@16
|
1043 {
|
Chris@16
|
1044 proto::detail::ignore_unused(e);
|
Chris@16
|
1045 proto::detail::ignore_unused(s);
|
Chris@16
|
1046 proto::detail::ignore_unused(d);
|
Chris@16
|
1047 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) ));
|
Chris@16
|
1048 }
|
Chris@16
|
1049 };
|
Chris@16
|
1050 };
|
Chris@16
|
1051
|
Chris@16
|
1052
|
Chris@16
|
1053
|
Chris@16
|
1054
|
Chris@16
|
1055 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
1056 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7...)>
|
Chris@16
|
1057 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7...)> >
|
Chris@16
|
1058 {
|
Chris@16
|
1059 template<typename Expr, typename State, typename Data>
|
Chris@16
|
1060 struct impl
|
Chris@16
|
1061 : make<
|
Chris@16
|
1062 typename detail::expand_pattern<
|
Chris@16
|
1063 proto::arity_of<Expr>::value
|
Chris@16
|
1064 , A7
|
Chris@16
|
1065 , detail::expand_pattern_rest_7<
|
Chris@16
|
1066 Object
|
Chris@16
|
1067 , A0 , A1 , A2 , A3 , A4 , A5 , A6
|
Chris@16
|
1068 >
|
Chris@16
|
1069 >::type
|
Chris@16
|
1070 >::template impl<Expr, State, Data>
|
Chris@16
|
1071 {};
|
Chris@16
|
1072 };
|
Chris@16
|
1073 namespace detail
|
Chris@16
|
1074 {
|
Chris@16
|
1075 template<
|
Chris@16
|
1076 template<typename , typename , typename , typename , typename , typename , typename , typename , typename> class R
|
Chris@16
|
1077 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
|
Chris@16
|
1078 , typename Expr, typename State, typename Data
|
Chris@16
|
1079 >
|
Chris@16
|
1080 struct make_<
|
Chris@16
|
1081 R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>
|
Chris@16
|
1082 , Expr, State, Data
|
Chris@16
|
1083 BOOST_PROTO_TEMPLATE_ARITY_PARAM(9)
|
Chris@16
|
1084 >
|
Chris@16
|
1085 : nested_type_if<
|
Chris@16
|
1086 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type , typename make_if_<A8, Expr, State, Data> ::type>
|
Chris@16
|
1087 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || make_if_<A5, Expr, State, Data> ::applied || make_if_<A6, Expr, State, Data> ::applied || make_if_<A7, Expr, State, Data> ::applied || make_if_<A8, Expr, State, Data> ::applied || false)
|
Chris@16
|
1088 >
|
Chris@16
|
1089 {};
|
Chris@16
|
1090 template<
|
Chris@16
|
1091 template<typename , typename , typename , typename , typename , typename , typename , typename , typename> class R
|
Chris@16
|
1092 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
|
Chris@16
|
1093 , typename Expr, typename State, typename Data
|
Chris@16
|
1094 >
|
Chris@16
|
1095 struct make_<
|
Chris@16
|
1096 noinvoke<R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> >
|
Chris@16
|
1097 , Expr, State, Data
|
Chris@16
|
1098 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
|
Chris@16
|
1099 >
|
Chris@16
|
1100 {
|
Chris@16
|
1101 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type , typename make_if_<A8, Expr, State, Data> ::type> type;
|
Chris@16
|
1102 static bool const applied = true;
|
Chris@16
|
1103 };
|
Chris@16
|
1104 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
1105 struct is_applyable<R(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
|
Chris@16
|
1106 : mpl::true_
|
Chris@16
|
1107 {};
|
Chris@16
|
1108 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
1109 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
|
Chris@16
|
1110 : mpl::true_
|
Chris@16
|
1111 {};
|
Chris@16
|
1112 template<typename T, typename A>
|
Chris@16
|
1113 struct construct_<proto::expr<T, A, 9>, true>
|
Chris@16
|
1114 {
|
Chris@16
|
1115 typedef proto::expr<T, A, 9> result_type;
|
Chris@16
|
1116 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
1117 BOOST_FORCEINLINE
|
Chris@16
|
1118 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8) const
|
Chris@16
|
1119 {
|
Chris@16
|
1120 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
|
Chris@16
|
1121 }
|
Chris@16
|
1122 };
|
Chris@16
|
1123 template<typename T, typename A>
|
Chris@16
|
1124 struct construct_<proto::basic_expr<T, A, 9>, true>
|
Chris@16
|
1125 {
|
Chris@16
|
1126 typedef proto::basic_expr<T, A, 9> result_type;
|
Chris@16
|
1127 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
1128 BOOST_FORCEINLINE
|
Chris@16
|
1129 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8) const
|
Chris@16
|
1130 {
|
Chris@16
|
1131 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
|
Chris@16
|
1132 }
|
Chris@16
|
1133 };
|
Chris@16
|
1134 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
1135 BOOST_FORCEINLINE
|
Chris@16
|
1136 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8)
|
Chris@16
|
1137 {
|
Chris@16
|
1138 return construct_<Type>()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
|
Chris@16
|
1139 }
|
Chris@16
|
1140 }
|
Chris@16
|
1141
|
Chris@16
|
1142
|
Chris@16
|
1143
|
Chris@16
|
1144
|
Chris@16
|
1145 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
1146 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
|
Chris@16
|
1147 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)> >
|
Chris@16
|
1148 {
|
Chris@16
|
1149 template<typename Expr, typename State, typename Data>
|
Chris@16
|
1150 struct impl : transform_impl<Expr, State, Data>
|
Chris@16
|
1151 {
|
Chris@16
|
1152
|
Chris@16
|
1153 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
|
Chris@16
|
1154
|
Chris@16
|
1155
|
Chris@16
|
1156
|
Chris@16
|
1157
|
Chris@16
|
1158
|
Chris@16
|
1159
|
Chris@16
|
1160
|
Chris@16
|
1161 BOOST_FORCEINLINE
|
Chris@16
|
1162 result_type operator ()(
|
Chris@16
|
1163 typename impl::expr_param e
|
Chris@16
|
1164 , typename impl::state_param s
|
Chris@16
|
1165 , typename impl::data_param d
|
Chris@16
|
1166 ) const
|
Chris@16
|
1167 {
|
Chris@16
|
1168 proto::detail::ignore_unused(e);
|
Chris@16
|
1169 proto::detail::ignore_unused(s);
|
Chris@16
|
1170 proto::detail::ignore_unused(d);
|
Chris@16
|
1171 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A8>::template impl<Expr, State, Data>()(e, s, d) ));
|
Chris@16
|
1172 }
|
Chris@16
|
1173 };
|
Chris@16
|
1174 };
|
Chris@16
|
1175
|
Chris@16
|
1176
|
Chris@16
|
1177
|
Chris@16
|
1178
|
Chris@16
|
1179 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
1180 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8...)>
|
Chris@16
|
1181 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8...)> >
|
Chris@16
|
1182 {
|
Chris@16
|
1183 template<typename Expr, typename State, typename Data>
|
Chris@16
|
1184 struct impl
|
Chris@16
|
1185 : make<
|
Chris@16
|
1186 typename detail::expand_pattern<
|
Chris@16
|
1187 proto::arity_of<Expr>::value
|
Chris@16
|
1188 , A8
|
Chris@16
|
1189 , detail::expand_pattern_rest_8<
|
Chris@16
|
1190 Object
|
Chris@16
|
1191 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
|
Chris@16
|
1192 >
|
Chris@16
|
1193 >::type
|
Chris@16
|
1194 >::template impl<Expr, State, Data>
|
Chris@16
|
1195 {};
|
Chris@16
|
1196 };
|
Chris@16
|
1197 namespace detail
|
Chris@16
|
1198 {
|
Chris@16
|
1199 template<
|
Chris@16
|
1200 template<typename , typename , typename , typename , typename , typename , typename , typename , typename , typename> class R
|
Chris@16
|
1201 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9
|
Chris@16
|
1202 , typename Expr, typename State, typename Data
|
Chris@16
|
1203 >
|
Chris@16
|
1204 struct make_<
|
Chris@16
|
1205 R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>
|
Chris@16
|
1206 , Expr, State, Data
|
Chris@16
|
1207 BOOST_PROTO_TEMPLATE_ARITY_PARAM(10)
|
Chris@16
|
1208 >
|
Chris@16
|
1209 : nested_type_if<
|
Chris@16
|
1210 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type , typename make_if_<A8, Expr, State, Data> ::type , typename make_if_<A9, Expr, State, Data> ::type>
|
Chris@16
|
1211 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || make_if_<A5, Expr, State, Data> ::applied || make_if_<A6, Expr, State, Data> ::applied || make_if_<A7, Expr, State, Data> ::applied || make_if_<A8, Expr, State, Data> ::applied || make_if_<A9, Expr, State, Data> ::applied || false)
|
Chris@16
|
1212 >
|
Chris@16
|
1213 {};
|
Chris@16
|
1214 template<
|
Chris@16
|
1215 template<typename , typename , typename , typename , typename , typename , typename , typename , typename , typename> class R
|
Chris@16
|
1216 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9
|
Chris@16
|
1217 , typename Expr, typename State, typename Data
|
Chris@16
|
1218 >
|
Chris@16
|
1219 struct make_<
|
Chris@16
|
1220 noinvoke<R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> >
|
Chris@16
|
1221 , Expr, State, Data
|
Chris@16
|
1222 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
|
Chris@16
|
1223 >
|
Chris@16
|
1224 {
|
Chris@16
|
1225 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type , typename make_if_<A8, Expr, State, Data> ::type , typename make_if_<A9, Expr, State, Data> ::type> type;
|
Chris@16
|
1226 static bool const applied = true;
|
Chris@16
|
1227 };
|
Chris@16
|
1228 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
1229 struct is_applyable<R(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
|
Chris@16
|
1230 : mpl::true_
|
Chris@16
|
1231 {};
|
Chris@16
|
1232 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
1233 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
|
Chris@16
|
1234 : mpl::true_
|
Chris@16
|
1235 {};
|
Chris@16
|
1236 template<typename T, typename A>
|
Chris@16
|
1237 struct construct_<proto::expr<T, A, 10>, true>
|
Chris@16
|
1238 {
|
Chris@16
|
1239 typedef proto::expr<T, A, 10> result_type;
|
Chris@16
|
1240 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
1241 BOOST_FORCEINLINE
|
Chris@16
|
1242 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8 , A9 &a9) const
|
Chris@16
|
1243 {
|
Chris@16
|
1244 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
|
Chris@16
|
1245 }
|
Chris@16
|
1246 };
|
Chris@16
|
1247 template<typename T, typename A>
|
Chris@16
|
1248 struct construct_<proto::basic_expr<T, A, 10>, true>
|
Chris@16
|
1249 {
|
Chris@16
|
1250 typedef proto::basic_expr<T, A, 10> result_type;
|
Chris@16
|
1251 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
1252 BOOST_FORCEINLINE
|
Chris@16
|
1253 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8 , A9 &a9) const
|
Chris@16
|
1254 {
|
Chris@16
|
1255 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
|
Chris@16
|
1256 }
|
Chris@16
|
1257 };
|
Chris@16
|
1258 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
1259 BOOST_FORCEINLINE
|
Chris@16
|
1260 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8 , A9 &a9)
|
Chris@16
|
1261 {
|
Chris@16
|
1262 return construct_<Type>()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
|
Chris@16
|
1263 }
|
Chris@16
|
1264 }
|
Chris@16
|
1265
|
Chris@16
|
1266
|
Chris@16
|
1267
|
Chris@16
|
1268
|
Chris@16
|
1269 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
1270 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
|
Chris@16
|
1271 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)> >
|
Chris@16
|
1272 {
|
Chris@16
|
1273 template<typename Expr, typename State, typename Data>
|
Chris@16
|
1274 struct impl : transform_impl<Expr, State, Data>
|
Chris@16
|
1275 {
|
Chris@16
|
1276
|
Chris@16
|
1277 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
|
Chris@16
|
1278
|
Chris@16
|
1279
|
Chris@16
|
1280
|
Chris@16
|
1281
|
Chris@16
|
1282
|
Chris@16
|
1283
|
Chris@16
|
1284
|
Chris@16
|
1285 BOOST_FORCEINLINE
|
Chris@16
|
1286 result_type operator ()(
|
Chris@16
|
1287 typename impl::expr_param e
|
Chris@16
|
1288 , typename impl::state_param s
|
Chris@16
|
1289 , typename impl::data_param d
|
Chris@16
|
1290 ) const
|
Chris@16
|
1291 {
|
Chris@16
|
1292 proto::detail::ignore_unused(e);
|
Chris@16
|
1293 proto::detail::ignore_unused(s);
|
Chris@16
|
1294 proto::detail::ignore_unused(d);
|
Chris@16
|
1295 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A8>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A9>::template impl<Expr, State, Data>()(e, s, d) ));
|
Chris@16
|
1296 }
|
Chris@16
|
1297 };
|
Chris@16
|
1298 };
|
Chris@16
|
1299
|
Chris@16
|
1300
|
Chris@16
|
1301
|
Chris@16
|
1302
|
Chris@16
|
1303 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
1304 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9...)>
|
Chris@16
|
1305 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9...)> >
|
Chris@16
|
1306 {
|
Chris@16
|
1307 template<typename Expr, typename State, typename Data>
|
Chris@16
|
1308 struct impl
|
Chris@16
|
1309 : make<
|
Chris@16
|
1310 typename detail::expand_pattern<
|
Chris@16
|
1311 proto::arity_of<Expr>::value
|
Chris@16
|
1312 , A9
|
Chris@16
|
1313 , detail::expand_pattern_rest_9<
|
Chris@16
|
1314 Object
|
Chris@16
|
1315 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
|
Chris@16
|
1316 >
|
Chris@16
|
1317 >::type
|
Chris@16
|
1318 >::template impl<Expr, State, Data>
|
Chris@16
|
1319 {};
|
Chris@16
|
1320 };
|