Chris@16
|
1 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
2 /// \file basic_expr.hpp
|
Chris@16
|
3 /// Contains definition of basic_expr\<\> class template.
|
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
|
Chris@16
|
9
|
Chris@16
|
10
|
Chris@16
|
11
|
Chris@16
|
12
|
Chris@16
|
13
|
Chris@16
|
14
|
Chris@16
|
15
|
Chris@16
|
16
|
Chris@16
|
17
|
Chris@16
|
18
|
Chris@16
|
19
|
Chris@16
|
20
|
Chris@16
|
21
|
Chris@16
|
22
|
Chris@16
|
23
|
Chris@16
|
24
|
Chris@16
|
25
|
Chris@16
|
26
|
Chris@16
|
27
|
Chris@16
|
28
|
Chris@16
|
29
|
Chris@16
|
30
|
Chris@16
|
31
|
Chris@16
|
32
|
Chris@16
|
33
|
Chris@16
|
34
|
Chris@16
|
35
|
Chris@16
|
36 template<typename Tag, typename Arg0>
|
Chris@16
|
37 struct basic_expr<Tag, term<Arg0>, 0>
|
Chris@16
|
38 {
|
Chris@16
|
39 typedef Tag proto_tag;
|
Chris@16
|
40 static const long proto_arity_c = 0;
|
Chris@16
|
41 typedef mpl::long_<0 > proto_arity;
|
Chris@16
|
42 typedef basic_expr proto_base_expr;
|
Chris@16
|
43 typedef term<Arg0> proto_args;
|
Chris@16
|
44 typedef basic_expr proto_grammar;
|
Chris@16
|
45 typedef basic_default_domain proto_domain;
|
Chris@16
|
46 typedef default_generator proto_generator;
|
Chris@16
|
47 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
|
Chris@16
|
48 typedef basic_expr proto_derived_expr;
|
Chris@16
|
49 typedef void proto_is_expr_;
|
Chris@16
|
50 typedef Arg0 proto_child0; proto_child0 child0;
|
Chris@16
|
51 typedef void proto_child1; typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
|
Chris@16
|
52
|
Chris@16
|
53
|
Chris@16
|
54 BOOST_FORCEINLINE
|
Chris@16
|
55 basic_expr const &proto_base() const
|
Chris@16
|
56 {
|
Chris@16
|
57 return *this;
|
Chris@16
|
58 }
|
Chris@16
|
59
|
Chris@16
|
60
|
Chris@16
|
61 BOOST_FORCEINLINE
|
Chris@16
|
62 basic_expr &proto_base()
|
Chris@16
|
63 {
|
Chris@16
|
64 return *this;
|
Chris@16
|
65 }
|
Chris@16
|
66
|
Chris@16
|
67
|
Chris@16
|
68
|
Chris@16
|
69 template<typename A0>
|
Chris@16
|
70 BOOST_FORCEINLINE
|
Chris@16
|
71 static basic_expr const make(A0 &a0)
|
Chris@16
|
72 {
|
Chris@16
|
73 return detail::make_terminal(a0, static_cast<basic_expr *>(0), static_cast<proto_args *>(0));
|
Chris@16
|
74 }
|
Chris@16
|
75
|
Chris@16
|
76
|
Chris@16
|
77 template<typename A0>
|
Chris@16
|
78 BOOST_FORCEINLINE
|
Chris@16
|
79 static basic_expr const make(A0 const &a0)
|
Chris@16
|
80 {
|
Chris@16
|
81 return detail::make_terminal(a0, static_cast<basic_expr *>(0), static_cast<proto_args *>(0));
|
Chris@16
|
82 }
|
Chris@16
|
83
|
Chris@16
|
84
|
Chris@16
|
85 typedef detail::not_a_valid_type address_of_hack_type_;
|
Chris@16
|
86 };
|
Chris@16
|
87
|
Chris@16
|
88
|
Chris@16
|
89
|
Chris@16
|
90
|
Chris@16
|
91
|
Chris@16
|
92
|
Chris@16
|
93
|
Chris@16
|
94
|
Chris@16
|
95
|
Chris@16
|
96
|
Chris@16
|
97
|
Chris@16
|
98
|
Chris@16
|
99
|
Chris@16
|
100
|
Chris@16
|
101
|
Chris@16
|
102
|
Chris@16
|
103
|
Chris@16
|
104
|
Chris@16
|
105
|
Chris@16
|
106
|
Chris@16
|
107
|
Chris@16
|
108
|
Chris@16
|
109
|
Chris@16
|
110
|
Chris@16
|
111
|
Chris@16
|
112
|
Chris@16
|
113
|
Chris@16
|
114 template<typename Tag , typename Arg0>
|
Chris@16
|
115 struct basic_expr<Tag, list1<Arg0>, 1 >
|
Chris@16
|
116 {
|
Chris@16
|
117 typedef Tag proto_tag;
|
Chris@16
|
118 static const long proto_arity_c = 1;
|
Chris@16
|
119 typedef mpl::long_<1 > proto_arity;
|
Chris@16
|
120 typedef basic_expr proto_base_expr;
|
Chris@16
|
121 typedef list1<Arg0> proto_args;
|
Chris@16
|
122 typedef basic_expr proto_grammar;
|
Chris@16
|
123 typedef basic_default_domain proto_domain;
|
Chris@16
|
124 typedef default_generator proto_generator;
|
Chris@16
|
125 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
|
Chris@16
|
126 typedef basic_expr proto_derived_expr;
|
Chris@16
|
127 typedef void proto_is_expr_;
|
Chris@16
|
128 typedef Arg0 proto_child0; proto_child0 child0;
|
Chris@16
|
129 typedef void proto_child1; typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
|
Chris@16
|
130
|
Chris@16
|
131
|
Chris@16
|
132 BOOST_FORCEINLINE
|
Chris@16
|
133 basic_expr const &proto_base() const
|
Chris@16
|
134 {
|
Chris@16
|
135 return *this;
|
Chris@16
|
136 }
|
Chris@16
|
137
|
Chris@16
|
138
|
Chris@16
|
139 BOOST_FORCEINLINE
|
Chris@16
|
140 basic_expr &proto_base()
|
Chris@16
|
141 {
|
Chris@16
|
142 return *this;
|
Chris@16
|
143 }
|
Chris@16
|
144
|
Chris@16
|
145
|
Chris@16
|
146
|
Chris@16
|
147 template<typename A0>
|
Chris@16
|
148 BOOST_FORCEINLINE
|
Chris@16
|
149 static basic_expr const make(A0 const &a0)
|
Chris@16
|
150 {
|
Chris@16
|
151 basic_expr that = {a0};
|
Chris@16
|
152 return that;
|
Chris@16
|
153 }
|
Chris@16
|
154
|
Chris@16
|
155
|
Chris@16
|
156
|
Chris@16
|
157 typedef typename detail::address_of_hack<Tag, proto_child0>::type address_of_hack_type_;
|
Chris@16
|
158
|
Chris@16
|
159
|
Chris@16
|
160
|
Chris@16
|
161
|
Chris@16
|
162
|
Chris@16
|
163
|
Chris@16
|
164
|
Chris@16
|
165 BOOST_FORCEINLINE
|
Chris@16
|
166 operator address_of_hack_type_() const
|
Chris@16
|
167 {
|
Chris@16
|
168 return boost::addressof(this->child0);
|
Chris@16
|
169 }
|
Chris@16
|
170 };
|
Chris@16
|
171
|
Chris@16
|
172
|
Chris@16
|
173
|
Chris@16
|
174
|
Chris@16
|
175
|
Chris@16
|
176
|
Chris@16
|
177
|
Chris@16
|
178
|
Chris@16
|
179
|
Chris@16
|
180
|
Chris@16
|
181
|
Chris@16
|
182
|
Chris@16
|
183
|
Chris@16
|
184
|
Chris@16
|
185
|
Chris@16
|
186
|
Chris@16
|
187
|
Chris@16
|
188
|
Chris@16
|
189
|
Chris@16
|
190
|
Chris@16
|
191
|
Chris@16
|
192
|
Chris@16
|
193
|
Chris@16
|
194
|
Chris@16
|
195
|
Chris@16
|
196
|
Chris@16
|
197
|
Chris@16
|
198 template<typename Tag , typename Arg0 , typename Arg1>
|
Chris@16
|
199 struct basic_expr<Tag, list2<Arg0 , Arg1>, 2 >
|
Chris@16
|
200 {
|
Chris@16
|
201 typedef Tag proto_tag;
|
Chris@16
|
202 static const long proto_arity_c = 2;
|
Chris@16
|
203 typedef mpl::long_<2 > proto_arity;
|
Chris@16
|
204 typedef basic_expr proto_base_expr;
|
Chris@16
|
205 typedef list2<Arg0 , Arg1> proto_args;
|
Chris@16
|
206 typedef basic_expr proto_grammar;
|
Chris@16
|
207 typedef basic_default_domain proto_domain;
|
Chris@16
|
208 typedef default_generator proto_generator;
|
Chris@16
|
209 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
|
Chris@16
|
210 typedef basic_expr proto_derived_expr;
|
Chris@16
|
211 typedef void proto_is_expr_;
|
Chris@16
|
212 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1;
|
Chris@16
|
213 typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
|
Chris@16
|
214
|
Chris@16
|
215
|
Chris@16
|
216 BOOST_FORCEINLINE
|
Chris@16
|
217 basic_expr const &proto_base() const
|
Chris@16
|
218 {
|
Chris@16
|
219 return *this;
|
Chris@16
|
220 }
|
Chris@16
|
221
|
Chris@16
|
222
|
Chris@16
|
223 BOOST_FORCEINLINE
|
Chris@16
|
224 basic_expr &proto_base()
|
Chris@16
|
225 {
|
Chris@16
|
226 return *this;
|
Chris@16
|
227 }
|
Chris@16
|
228
|
Chris@16
|
229
|
Chris@16
|
230
|
Chris@16
|
231 template<typename A0 , typename A1>
|
Chris@16
|
232 BOOST_FORCEINLINE
|
Chris@16
|
233 static basic_expr const make(A0 const &a0 , A1 const &a1)
|
Chris@16
|
234 {
|
Chris@16
|
235 basic_expr that = {a0 , a1};
|
Chris@16
|
236 return that;
|
Chris@16
|
237 }
|
Chris@16
|
238
|
Chris@16
|
239
|
Chris@16
|
240 typedef detail::not_a_valid_type address_of_hack_type_;
|
Chris@16
|
241 };
|
Chris@16
|
242
|
Chris@16
|
243
|
Chris@16
|
244
|
Chris@16
|
245
|
Chris@16
|
246
|
Chris@16
|
247
|
Chris@16
|
248
|
Chris@16
|
249
|
Chris@16
|
250
|
Chris@16
|
251
|
Chris@16
|
252
|
Chris@16
|
253
|
Chris@16
|
254
|
Chris@16
|
255
|
Chris@16
|
256
|
Chris@16
|
257
|
Chris@16
|
258
|
Chris@16
|
259
|
Chris@16
|
260
|
Chris@16
|
261
|
Chris@16
|
262
|
Chris@16
|
263
|
Chris@16
|
264
|
Chris@16
|
265
|
Chris@16
|
266
|
Chris@16
|
267
|
Chris@16
|
268
|
Chris@16
|
269 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2>
|
Chris@16
|
270 struct basic_expr<Tag, list3<Arg0 , Arg1 , Arg2>, 3 >
|
Chris@16
|
271 {
|
Chris@16
|
272 typedef Tag proto_tag;
|
Chris@16
|
273 static const long proto_arity_c = 3;
|
Chris@16
|
274 typedef mpl::long_<3 > proto_arity;
|
Chris@16
|
275 typedef basic_expr proto_base_expr;
|
Chris@16
|
276 typedef list3<Arg0 , Arg1 , Arg2> proto_args;
|
Chris@16
|
277 typedef basic_expr proto_grammar;
|
Chris@16
|
278 typedef basic_default_domain proto_domain;
|
Chris@16
|
279 typedef default_generator proto_generator;
|
Chris@16
|
280 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
|
Chris@16
|
281 typedef basic_expr proto_derived_expr;
|
Chris@16
|
282 typedef void proto_is_expr_;
|
Chris@16
|
283 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2;
|
Chris@16
|
284 typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
|
Chris@16
|
285
|
Chris@16
|
286
|
Chris@16
|
287 BOOST_FORCEINLINE
|
Chris@16
|
288 basic_expr const &proto_base() const
|
Chris@16
|
289 {
|
Chris@16
|
290 return *this;
|
Chris@16
|
291 }
|
Chris@16
|
292
|
Chris@16
|
293
|
Chris@16
|
294 BOOST_FORCEINLINE
|
Chris@16
|
295 basic_expr &proto_base()
|
Chris@16
|
296 {
|
Chris@16
|
297 return *this;
|
Chris@16
|
298 }
|
Chris@16
|
299
|
Chris@16
|
300
|
Chris@16
|
301
|
Chris@16
|
302 template<typename A0 , typename A1 , typename A2>
|
Chris@16
|
303 BOOST_FORCEINLINE
|
Chris@16
|
304 static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2)
|
Chris@16
|
305 {
|
Chris@16
|
306 basic_expr that = {a0 , a1 , a2};
|
Chris@16
|
307 return that;
|
Chris@16
|
308 }
|
Chris@16
|
309
|
Chris@16
|
310
|
Chris@16
|
311 typedef detail::not_a_valid_type address_of_hack_type_;
|
Chris@16
|
312 };
|
Chris@16
|
313
|
Chris@16
|
314
|
Chris@16
|
315
|
Chris@16
|
316
|
Chris@16
|
317
|
Chris@16
|
318
|
Chris@16
|
319
|
Chris@16
|
320
|
Chris@16
|
321
|
Chris@16
|
322
|
Chris@16
|
323
|
Chris@16
|
324
|
Chris@16
|
325
|
Chris@16
|
326
|
Chris@16
|
327
|
Chris@16
|
328
|
Chris@16
|
329
|
Chris@16
|
330
|
Chris@16
|
331
|
Chris@16
|
332
|
Chris@16
|
333
|
Chris@16
|
334
|
Chris@16
|
335
|
Chris@16
|
336
|
Chris@16
|
337
|
Chris@16
|
338
|
Chris@16
|
339
|
Chris@16
|
340 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3>
|
Chris@16
|
341 struct basic_expr<Tag, list4<Arg0 , Arg1 , Arg2 , Arg3>, 4 >
|
Chris@16
|
342 {
|
Chris@16
|
343 typedef Tag proto_tag;
|
Chris@16
|
344 static const long proto_arity_c = 4;
|
Chris@16
|
345 typedef mpl::long_<4 > proto_arity;
|
Chris@16
|
346 typedef basic_expr proto_base_expr;
|
Chris@16
|
347 typedef list4<Arg0 , Arg1 , Arg2 , Arg3> proto_args;
|
Chris@16
|
348 typedef basic_expr proto_grammar;
|
Chris@16
|
349 typedef basic_default_domain proto_domain;
|
Chris@16
|
350 typedef default_generator proto_generator;
|
Chris@16
|
351 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
|
Chris@16
|
352 typedef basic_expr proto_derived_expr;
|
Chris@16
|
353 typedef void proto_is_expr_;
|
Chris@16
|
354 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3;
|
Chris@16
|
355 typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
|
Chris@16
|
356
|
Chris@16
|
357
|
Chris@16
|
358 BOOST_FORCEINLINE
|
Chris@16
|
359 basic_expr const &proto_base() const
|
Chris@16
|
360 {
|
Chris@16
|
361 return *this;
|
Chris@16
|
362 }
|
Chris@16
|
363
|
Chris@16
|
364
|
Chris@16
|
365 BOOST_FORCEINLINE
|
Chris@16
|
366 basic_expr &proto_base()
|
Chris@16
|
367 {
|
Chris@16
|
368 return *this;
|
Chris@16
|
369 }
|
Chris@16
|
370
|
Chris@16
|
371
|
Chris@16
|
372
|
Chris@16
|
373 template<typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
374 BOOST_FORCEINLINE
|
Chris@16
|
375 static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3)
|
Chris@16
|
376 {
|
Chris@16
|
377 basic_expr that = {a0 , a1 , a2 , a3};
|
Chris@16
|
378 return that;
|
Chris@16
|
379 }
|
Chris@16
|
380
|
Chris@16
|
381
|
Chris@16
|
382 typedef detail::not_a_valid_type address_of_hack_type_;
|
Chris@16
|
383 };
|
Chris@16
|
384
|
Chris@16
|
385
|
Chris@16
|
386
|
Chris@16
|
387
|
Chris@16
|
388
|
Chris@16
|
389
|
Chris@16
|
390
|
Chris@16
|
391
|
Chris@16
|
392
|
Chris@16
|
393
|
Chris@16
|
394
|
Chris@16
|
395
|
Chris@16
|
396
|
Chris@16
|
397
|
Chris@16
|
398
|
Chris@16
|
399
|
Chris@16
|
400
|
Chris@16
|
401
|
Chris@16
|
402
|
Chris@16
|
403
|
Chris@16
|
404
|
Chris@16
|
405
|
Chris@16
|
406
|
Chris@16
|
407
|
Chris@16
|
408
|
Chris@16
|
409
|
Chris@16
|
410
|
Chris@16
|
411 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4>
|
Chris@16
|
412 struct basic_expr<Tag, list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>, 5 >
|
Chris@16
|
413 {
|
Chris@16
|
414 typedef Tag proto_tag;
|
Chris@16
|
415 static const long proto_arity_c = 5;
|
Chris@16
|
416 typedef mpl::long_<5 > proto_arity;
|
Chris@16
|
417 typedef basic_expr proto_base_expr;
|
Chris@16
|
418 typedef list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4> proto_args;
|
Chris@16
|
419 typedef basic_expr proto_grammar;
|
Chris@16
|
420 typedef basic_default_domain proto_domain;
|
Chris@16
|
421 typedef default_generator proto_generator;
|
Chris@16
|
422 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
|
Chris@16
|
423 typedef basic_expr proto_derived_expr;
|
Chris@16
|
424 typedef void proto_is_expr_;
|
Chris@16
|
425 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4;
|
Chris@16
|
426 typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
|
Chris@16
|
427
|
Chris@16
|
428
|
Chris@16
|
429 BOOST_FORCEINLINE
|
Chris@16
|
430 basic_expr const &proto_base() const
|
Chris@16
|
431 {
|
Chris@16
|
432 return *this;
|
Chris@16
|
433 }
|
Chris@16
|
434
|
Chris@16
|
435
|
Chris@16
|
436 BOOST_FORCEINLINE
|
Chris@16
|
437 basic_expr &proto_base()
|
Chris@16
|
438 {
|
Chris@16
|
439 return *this;
|
Chris@16
|
440 }
|
Chris@16
|
441
|
Chris@16
|
442
|
Chris@16
|
443
|
Chris@16
|
444 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
445 BOOST_FORCEINLINE
|
Chris@16
|
446 static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4)
|
Chris@16
|
447 {
|
Chris@16
|
448 basic_expr that = {a0 , a1 , a2 , a3 , a4};
|
Chris@16
|
449 return that;
|
Chris@16
|
450 }
|
Chris@16
|
451
|
Chris@16
|
452
|
Chris@16
|
453 typedef detail::not_a_valid_type address_of_hack_type_;
|
Chris@16
|
454 };
|
Chris@16
|
455
|
Chris@16
|
456
|
Chris@16
|
457
|
Chris@16
|
458
|
Chris@16
|
459
|
Chris@16
|
460
|
Chris@16
|
461
|
Chris@16
|
462
|
Chris@16
|
463
|
Chris@16
|
464
|
Chris@16
|
465
|
Chris@16
|
466
|
Chris@16
|
467
|
Chris@16
|
468
|
Chris@16
|
469
|
Chris@16
|
470
|
Chris@16
|
471
|
Chris@16
|
472
|
Chris@16
|
473
|
Chris@16
|
474
|
Chris@16
|
475
|
Chris@16
|
476
|
Chris@16
|
477
|
Chris@16
|
478
|
Chris@16
|
479
|
Chris@16
|
480
|
Chris@16
|
481
|
Chris@16
|
482 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5>
|
Chris@16
|
483 struct basic_expr<Tag, list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>, 6 >
|
Chris@16
|
484 {
|
Chris@16
|
485 typedef Tag proto_tag;
|
Chris@16
|
486 static const long proto_arity_c = 6;
|
Chris@16
|
487 typedef mpl::long_<6 > proto_arity;
|
Chris@16
|
488 typedef basic_expr proto_base_expr;
|
Chris@16
|
489 typedef list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5> proto_args;
|
Chris@16
|
490 typedef basic_expr proto_grammar;
|
Chris@16
|
491 typedef basic_default_domain proto_domain;
|
Chris@16
|
492 typedef default_generator proto_generator;
|
Chris@16
|
493 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
|
Chris@16
|
494 typedef basic_expr proto_derived_expr;
|
Chris@16
|
495 typedef void proto_is_expr_;
|
Chris@16
|
496 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5;
|
Chris@16
|
497 typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
|
Chris@16
|
498
|
Chris@16
|
499
|
Chris@16
|
500 BOOST_FORCEINLINE
|
Chris@16
|
501 basic_expr const &proto_base() const
|
Chris@16
|
502 {
|
Chris@16
|
503 return *this;
|
Chris@16
|
504 }
|
Chris@16
|
505
|
Chris@16
|
506
|
Chris@16
|
507 BOOST_FORCEINLINE
|
Chris@16
|
508 basic_expr &proto_base()
|
Chris@16
|
509 {
|
Chris@16
|
510 return *this;
|
Chris@16
|
511 }
|
Chris@16
|
512
|
Chris@16
|
513
|
Chris@16
|
514
|
Chris@16
|
515 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
516 BOOST_FORCEINLINE
|
Chris@16
|
517 static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5)
|
Chris@16
|
518 {
|
Chris@16
|
519 basic_expr that = {a0 , a1 , a2 , a3 , a4 , a5};
|
Chris@16
|
520 return that;
|
Chris@16
|
521 }
|
Chris@16
|
522
|
Chris@16
|
523
|
Chris@16
|
524 typedef detail::not_a_valid_type address_of_hack_type_;
|
Chris@16
|
525 };
|
Chris@16
|
526
|
Chris@16
|
527
|
Chris@16
|
528
|
Chris@16
|
529
|
Chris@16
|
530
|
Chris@16
|
531
|
Chris@16
|
532
|
Chris@16
|
533
|
Chris@16
|
534
|
Chris@16
|
535
|
Chris@16
|
536
|
Chris@16
|
537
|
Chris@16
|
538
|
Chris@16
|
539
|
Chris@16
|
540
|
Chris@16
|
541
|
Chris@16
|
542
|
Chris@16
|
543
|
Chris@16
|
544
|
Chris@16
|
545
|
Chris@16
|
546
|
Chris@16
|
547
|
Chris@16
|
548
|
Chris@16
|
549
|
Chris@16
|
550
|
Chris@16
|
551
|
Chris@16
|
552
|
Chris@16
|
553 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6>
|
Chris@16
|
554 struct basic_expr<Tag, list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>, 7 >
|
Chris@16
|
555 {
|
Chris@16
|
556 typedef Tag proto_tag;
|
Chris@16
|
557 static const long proto_arity_c = 7;
|
Chris@16
|
558 typedef mpl::long_<7 > proto_arity;
|
Chris@16
|
559 typedef basic_expr proto_base_expr;
|
Chris@16
|
560 typedef list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6> proto_args;
|
Chris@16
|
561 typedef basic_expr proto_grammar;
|
Chris@16
|
562 typedef basic_default_domain proto_domain;
|
Chris@16
|
563 typedef default_generator proto_generator;
|
Chris@16
|
564 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
|
Chris@16
|
565 typedef basic_expr proto_derived_expr;
|
Chris@16
|
566 typedef void proto_is_expr_;
|
Chris@16
|
567 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6;
|
Chris@16
|
568 typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
|
Chris@16
|
569
|
Chris@16
|
570
|
Chris@16
|
571 BOOST_FORCEINLINE
|
Chris@16
|
572 basic_expr const &proto_base() const
|
Chris@16
|
573 {
|
Chris@16
|
574 return *this;
|
Chris@16
|
575 }
|
Chris@16
|
576
|
Chris@16
|
577
|
Chris@16
|
578 BOOST_FORCEINLINE
|
Chris@16
|
579 basic_expr &proto_base()
|
Chris@16
|
580 {
|
Chris@16
|
581 return *this;
|
Chris@16
|
582 }
|
Chris@16
|
583
|
Chris@16
|
584
|
Chris@16
|
585
|
Chris@16
|
586 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
587 BOOST_FORCEINLINE
|
Chris@16
|
588 static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6)
|
Chris@16
|
589 {
|
Chris@16
|
590 basic_expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6};
|
Chris@16
|
591 return that;
|
Chris@16
|
592 }
|
Chris@16
|
593
|
Chris@16
|
594
|
Chris@16
|
595 typedef detail::not_a_valid_type address_of_hack_type_;
|
Chris@16
|
596 };
|
Chris@16
|
597
|
Chris@16
|
598
|
Chris@16
|
599
|
Chris@16
|
600
|
Chris@16
|
601
|
Chris@16
|
602
|
Chris@16
|
603
|
Chris@16
|
604
|
Chris@16
|
605
|
Chris@16
|
606
|
Chris@16
|
607
|
Chris@16
|
608
|
Chris@16
|
609
|
Chris@16
|
610
|
Chris@16
|
611
|
Chris@16
|
612
|
Chris@16
|
613
|
Chris@16
|
614
|
Chris@16
|
615
|
Chris@16
|
616
|
Chris@16
|
617
|
Chris@16
|
618
|
Chris@16
|
619
|
Chris@16
|
620
|
Chris@16
|
621
|
Chris@16
|
622
|
Chris@16
|
623
|
Chris@16
|
624 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7>
|
Chris@16
|
625 struct basic_expr<Tag, list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>, 8 >
|
Chris@16
|
626 {
|
Chris@16
|
627 typedef Tag proto_tag;
|
Chris@16
|
628 static const long proto_arity_c = 8;
|
Chris@16
|
629 typedef mpl::long_<8 > proto_arity;
|
Chris@16
|
630 typedef basic_expr proto_base_expr;
|
Chris@16
|
631 typedef list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7> proto_args;
|
Chris@16
|
632 typedef basic_expr proto_grammar;
|
Chris@16
|
633 typedef basic_default_domain proto_domain;
|
Chris@16
|
634 typedef default_generator proto_generator;
|
Chris@16
|
635 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
|
Chris@16
|
636 typedef basic_expr proto_derived_expr;
|
Chris@16
|
637 typedef void proto_is_expr_;
|
Chris@16
|
638 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7;
|
Chris@16
|
639 typedef void proto_child8; typedef void proto_child9;
|
Chris@16
|
640
|
Chris@16
|
641
|
Chris@16
|
642 BOOST_FORCEINLINE
|
Chris@16
|
643 basic_expr const &proto_base() const
|
Chris@16
|
644 {
|
Chris@16
|
645 return *this;
|
Chris@16
|
646 }
|
Chris@16
|
647
|
Chris@16
|
648
|
Chris@16
|
649 BOOST_FORCEINLINE
|
Chris@16
|
650 basic_expr &proto_base()
|
Chris@16
|
651 {
|
Chris@16
|
652 return *this;
|
Chris@16
|
653 }
|
Chris@16
|
654
|
Chris@16
|
655
|
Chris@16
|
656
|
Chris@16
|
657 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
658 BOOST_FORCEINLINE
|
Chris@16
|
659 static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7)
|
Chris@16
|
660 {
|
Chris@16
|
661 basic_expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7};
|
Chris@16
|
662 return that;
|
Chris@16
|
663 }
|
Chris@16
|
664
|
Chris@16
|
665
|
Chris@16
|
666 typedef detail::not_a_valid_type address_of_hack_type_;
|
Chris@16
|
667 };
|
Chris@16
|
668
|
Chris@16
|
669
|
Chris@16
|
670
|
Chris@16
|
671
|
Chris@16
|
672
|
Chris@16
|
673
|
Chris@16
|
674
|
Chris@16
|
675
|
Chris@16
|
676
|
Chris@16
|
677
|
Chris@16
|
678
|
Chris@16
|
679
|
Chris@16
|
680
|
Chris@16
|
681
|
Chris@16
|
682
|
Chris@16
|
683
|
Chris@16
|
684
|
Chris@16
|
685
|
Chris@16
|
686
|
Chris@16
|
687
|
Chris@16
|
688
|
Chris@16
|
689
|
Chris@16
|
690
|
Chris@16
|
691
|
Chris@16
|
692
|
Chris@16
|
693
|
Chris@16
|
694
|
Chris@16
|
695 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8>
|
Chris@16
|
696 struct basic_expr<Tag, list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>, 9 >
|
Chris@16
|
697 {
|
Chris@16
|
698 typedef Tag proto_tag;
|
Chris@16
|
699 static const long proto_arity_c = 9;
|
Chris@16
|
700 typedef mpl::long_<9 > proto_arity;
|
Chris@16
|
701 typedef basic_expr proto_base_expr;
|
Chris@16
|
702 typedef list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8> proto_args;
|
Chris@16
|
703 typedef basic_expr proto_grammar;
|
Chris@16
|
704 typedef basic_default_domain proto_domain;
|
Chris@16
|
705 typedef default_generator proto_generator;
|
Chris@16
|
706 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
|
Chris@16
|
707 typedef basic_expr proto_derived_expr;
|
Chris@16
|
708 typedef void proto_is_expr_;
|
Chris@16
|
709 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8;
|
Chris@16
|
710 typedef void proto_child9;
|
Chris@16
|
711
|
Chris@16
|
712
|
Chris@16
|
713 BOOST_FORCEINLINE
|
Chris@16
|
714 basic_expr const &proto_base() const
|
Chris@16
|
715 {
|
Chris@16
|
716 return *this;
|
Chris@16
|
717 }
|
Chris@16
|
718
|
Chris@16
|
719
|
Chris@16
|
720 BOOST_FORCEINLINE
|
Chris@16
|
721 basic_expr &proto_base()
|
Chris@16
|
722 {
|
Chris@16
|
723 return *this;
|
Chris@16
|
724 }
|
Chris@16
|
725
|
Chris@16
|
726
|
Chris@16
|
727
|
Chris@16
|
728 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
729 BOOST_FORCEINLINE
|
Chris@16
|
730 static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8)
|
Chris@16
|
731 {
|
Chris@16
|
732 basic_expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8};
|
Chris@16
|
733 return that;
|
Chris@16
|
734 }
|
Chris@16
|
735
|
Chris@16
|
736
|
Chris@16
|
737 typedef detail::not_a_valid_type address_of_hack_type_;
|
Chris@16
|
738 };
|
Chris@16
|
739
|
Chris@16
|
740
|
Chris@16
|
741
|
Chris@16
|
742
|
Chris@16
|
743
|
Chris@16
|
744
|
Chris@16
|
745
|
Chris@16
|
746
|
Chris@16
|
747
|
Chris@16
|
748
|
Chris@16
|
749
|
Chris@16
|
750
|
Chris@16
|
751
|
Chris@16
|
752
|
Chris@16
|
753
|
Chris@16
|
754
|
Chris@16
|
755
|
Chris@16
|
756
|
Chris@16
|
757
|
Chris@16
|
758
|
Chris@16
|
759
|
Chris@16
|
760
|
Chris@16
|
761
|
Chris@16
|
762
|
Chris@16
|
763
|
Chris@16
|
764
|
Chris@16
|
765
|
Chris@16
|
766 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 , typename Arg9>
|
Chris@16
|
767 struct basic_expr<Tag, list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>, 10 >
|
Chris@16
|
768 {
|
Chris@16
|
769 typedef Tag proto_tag;
|
Chris@16
|
770 static const long proto_arity_c = 10;
|
Chris@16
|
771 typedef mpl::long_<10 > proto_arity;
|
Chris@16
|
772 typedef basic_expr proto_base_expr;
|
Chris@16
|
773 typedef list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9> proto_args;
|
Chris@16
|
774 typedef basic_expr proto_grammar;
|
Chris@16
|
775 typedef basic_default_domain proto_domain;
|
Chris@16
|
776 typedef default_generator proto_generator;
|
Chris@16
|
777 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
|
Chris@16
|
778 typedef basic_expr proto_derived_expr;
|
Chris@16
|
779 typedef void proto_is_expr_;
|
Chris@16
|
780 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8; typedef Arg9 proto_child9; proto_child9 child9;
|
Chris@16
|
781
|
Chris@16
|
782
|
Chris@16
|
783
|
Chris@16
|
784 BOOST_FORCEINLINE
|
Chris@16
|
785 basic_expr const &proto_base() const
|
Chris@16
|
786 {
|
Chris@16
|
787 return *this;
|
Chris@16
|
788 }
|
Chris@16
|
789
|
Chris@16
|
790
|
Chris@16
|
791 BOOST_FORCEINLINE
|
Chris@16
|
792 basic_expr &proto_base()
|
Chris@16
|
793 {
|
Chris@16
|
794 return *this;
|
Chris@16
|
795 }
|
Chris@16
|
796
|
Chris@16
|
797
|
Chris@16
|
798
|
Chris@16
|
799 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
800 BOOST_FORCEINLINE
|
Chris@16
|
801 static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8 , A9 const &a9)
|
Chris@16
|
802 {
|
Chris@16
|
803 basic_expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9};
|
Chris@16
|
804 return that;
|
Chris@16
|
805 }
|
Chris@16
|
806
|
Chris@16
|
807
|
Chris@16
|
808 typedef detail::not_a_valid_type address_of_hack_type_;
|
Chris@16
|
809 };
|