Chris@16
|
1 /*=============================================================================
|
Chris@16
|
2 Copyright (c) 2001-2003 Joel de Guzman
|
Chris@16
|
3 Copyright (c) 2002-2003 Hartmut Kaiser
|
Chris@16
|
4 http://spirit.sourceforge.net/
|
Chris@16
|
5
|
Chris@16
|
6 Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
8 =============================================================================*/
|
Chris@16
|
9 #ifndef BOOST_SPIRIT_CLOSURE_HPP
|
Chris@16
|
10 #define BOOST_SPIRIT_CLOSURE_HPP
|
Chris@16
|
11
|
Chris@16
|
12 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
13 #include <boost/spirit/home/classic/namespace.hpp>
|
Chris@16
|
14 #include <boost/spirit/home/classic/core/parser.hpp>
|
Chris@16
|
15 #include <boost/spirit/home/classic/core/composite/composite.hpp>
|
Chris@16
|
16 #include <boost/spirit/home/classic/core/non_terminal/parser_context.hpp>
|
Chris@16
|
17 #include <boost/spirit/home/classic/attribute/parametric.hpp>
|
Chris@16
|
18 #include <boost/spirit/home/classic/attribute/closure_context.hpp>
|
Chris@16
|
19 #include <boost/spirit/home/classic/attribute/closure_fwd.hpp>
|
Chris@16
|
20
|
Chris@16
|
21 #include <boost/spirit/home/classic/phoenix/closures.hpp>
|
Chris@16
|
22 #include <boost/spirit/home/classic/phoenix/primitives.hpp>
|
Chris@16
|
23 #include <boost/spirit/home/classic/phoenix/casts.hpp>
|
Chris@16
|
24 #include <boost/spirit/home/classic/phoenix/operators.hpp>
|
Chris@16
|
25 #include <boost/spirit/home/classic/phoenix/tuple_helpers.hpp>
|
Chris@16
|
26
|
Chris@16
|
27 #include <boost/static_assert.hpp>
|
Chris@16
|
28
|
Chris@16
|
29 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
30 //
|
Chris@16
|
31 // Spirit predefined maximum closure limit. This limit defines the maximum
|
Chris@16
|
32 // number of elements a closure can hold. This number defaults to 3. The
|
Chris@16
|
33 // actual maximum is rounded up in multiples of 3. Thus, if this value
|
Chris@16
|
34 // is 4, the actual limit is 6. The ultimate maximum limit in this
|
Chris@16
|
35 // implementation is 15.
|
Chris@16
|
36 //
|
Chris@16
|
37 // It should NOT be greater than PHOENIX_LIMIT!
|
Chris@16
|
38 //
|
Chris@16
|
39 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
40
|
Chris@16
|
41 #if !defined(BOOST_SPIRIT_CLOSURE_LIMIT)
|
Chris@16
|
42 #define BOOST_SPIRIT_CLOSURE_LIMIT PHOENIX_LIMIT
|
Chris@16
|
43 #endif
|
Chris@16
|
44
|
Chris@16
|
45 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
46 //
|
Chris@16
|
47 // ensure BOOST_SPIRIT_CLOSURE_LIMIT <= PHOENIX_LIMIT and SPIRIT_CLOSURE_LIMIT <= 15
|
Chris@16
|
48 //
|
Chris@16
|
49 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
50 BOOST_STATIC_ASSERT(BOOST_SPIRIT_CLOSURE_LIMIT <= PHOENIX_LIMIT);
|
Chris@16
|
51 BOOST_STATIC_ASSERT(BOOST_SPIRIT_CLOSURE_LIMIT <= 15);
|
Chris@16
|
52
|
Chris@16
|
53 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
54 namespace boost { namespace spirit {
|
Chris@16
|
55
|
Chris@16
|
56 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
|
Chris@16
|
57
|
Chris@16
|
58 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
59 //
|
Chris@16
|
60 // closure_context class
|
Chris@16
|
61 //
|
Chris@16
|
62 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
63 template <typename ClosureT>
|
Chris@16
|
64 class closure_context : public parser_context_base
|
Chris@16
|
65 {
|
Chris@16
|
66 public:
|
Chris@16
|
67
|
Chris@16
|
68 typedef typename ::phoenix::tuple_element<0,
|
Chris@16
|
69 typename ClosureT::tuple_t>::type attr_t;
|
Chris@16
|
70 typedef ClosureT base_t;
|
Chris@16
|
71 typedef closure_context_linker<closure_context<ClosureT> >
|
Chris@16
|
72 context_linker_t;
|
Chris@16
|
73
|
Chris@16
|
74 closure_context(ClosureT const& clos)
|
Chris@16
|
75 : frame(clos) {}
|
Chris@16
|
76
|
Chris@16
|
77 ~closure_context() {}
|
Chris@16
|
78
|
Chris@16
|
79 template <typename ParserT, typename ScannerT>
|
Chris@16
|
80 void pre_parse(ParserT const&, ScannerT const&) {}
|
Chris@16
|
81
|
Chris@16
|
82 template <typename ResultT, typename ParserT, typename ScannerT>
|
Chris@16
|
83 ResultT& post_parse(ResultT& hit, ParserT const&, ScannerT const&)
|
Chris@16
|
84 { hit.value(frame[::phoenix::tuple_index<0>()]); return hit; }
|
Chris@16
|
85
|
Chris@16
|
86 private:
|
Chris@16
|
87
|
Chris@16
|
88 ::phoenix::closure_frame<typename ClosureT::phoenix_closure_t> frame;
|
Chris@16
|
89 };
|
Chris@16
|
90
|
Chris@16
|
91 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
92 //
|
Chris@16
|
93 // init_closure_context class
|
Chris@16
|
94 //
|
Chris@16
|
95 // The init_closure_context class is a special parser context type
|
Chris@16
|
96 // which additionally initializes a closure contained in the derived
|
Chris@16
|
97 // parser with values from a given tuple. Please note, that this
|
Chris@16
|
98 // given tuple does not contain the required values directly, it
|
Chris@16
|
99 // contains phoenix::actor objects. These actors have to be
|
Chris@16
|
100 // dereferenced to gain the values to be used for initialization
|
Chris@16
|
101 // (this is done by the help of the phoenix::convert_actors<>
|
Chris@16
|
102 // template).
|
Chris@16
|
103 //
|
Chris@16
|
104 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
105
|
Chris@16
|
106 template <typename ClosureT>
|
Chris@16
|
107 class init_closure_context : public parser_context_base
|
Chris@16
|
108 {
|
Chris@16
|
109 typedef typename ClosureT::tuple_t tuple_t;
|
Chris@16
|
110 typedef typename ClosureT::closure_t closure_t;
|
Chris@16
|
111
|
Chris@16
|
112 public:
|
Chris@16
|
113
|
Chris@16
|
114 init_closure_context(ClosureT const& clos)
|
Chris@16
|
115 : frame(clos.subject(), ::phoenix::convert_actors<tuple_t>(clos.init)) {}
|
Chris@16
|
116
|
Chris@16
|
117 ~init_closure_context() {}
|
Chris@16
|
118
|
Chris@16
|
119 template <typename ParserT, typename ScannerT>
|
Chris@16
|
120 void pre_parse(ParserT const& /*p*/, ScannerT const&) {}
|
Chris@16
|
121
|
Chris@16
|
122 template <typename ResultT, typename ParserT, typename ScannerT>
|
Chris@16
|
123 ResultT& post_parse(ResultT& hit, ParserT const&, ScannerT const&)
|
Chris@16
|
124 { hit.value(frame[::phoenix::tuple_index<0>()]); return hit; }
|
Chris@16
|
125
|
Chris@16
|
126 private:
|
Chris@16
|
127
|
Chris@16
|
128 ::phoenix::closure_frame<closure_t> frame;
|
Chris@16
|
129 };
|
Chris@16
|
130
|
Chris@16
|
131 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
132 //
|
Chris@16
|
133 // init_closure_parser class
|
Chris@16
|
134 //
|
Chris@16
|
135 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
136 template <typename ParserT, typename ActorTupleT>
|
Chris@16
|
137 struct init_closure_parser
|
Chris@16
|
138 : public unary<ParserT, parser<init_closure_parser<ParserT, ActorTupleT> > >
|
Chris@16
|
139 {
|
Chris@16
|
140 typedef init_closure_parser<ParserT, ActorTupleT> self_t;
|
Chris@16
|
141 typedef unary<ParserT, parser<self_t> > base_t;
|
Chris@16
|
142 typedef typename ParserT::phoenix_closure_t closure_t;
|
Chris@16
|
143 typedef typename ParserT::tuple_t tuple_t;
|
Chris@16
|
144 typedef typename ::phoenix::tuple_element<0, tuple_t>::type attr_t;
|
Chris@16
|
145
|
Chris@16
|
146 template <typename ScannerT>
|
Chris@16
|
147 struct result
|
Chris@16
|
148 {
|
Chris@16
|
149 typedef typename match_result<ScannerT, attr_t>::type type;
|
Chris@16
|
150 };
|
Chris@16
|
151
|
Chris@16
|
152 init_closure_parser(ParserT const& p, ActorTupleT const& init_)
|
Chris@16
|
153 : base_t(p), init(init_) {}
|
Chris@16
|
154
|
Chris@16
|
155 template <typename ScannerT>
|
Chris@16
|
156 typename parser_result<self_t, ScannerT>::type
|
Chris@16
|
157 parse_main(ScannerT const& scan) const
|
Chris@16
|
158 {
|
Chris@16
|
159 return this->subject().parse_main(scan);
|
Chris@16
|
160 }
|
Chris@16
|
161
|
Chris@16
|
162 template <typename ScannerT>
|
Chris@16
|
163 typename parser_result<self_t, ScannerT>::type
|
Chris@16
|
164 parse(ScannerT const& scan) const
|
Chris@16
|
165 {
|
Chris@16
|
166 typedef init_closure_context<self_t> init_context_t;
|
Chris@16
|
167 typedef parser_scanner_linker<ScannerT> scanner_t;
|
Chris@16
|
168 typedef closure_context_linker<init_context_t> context_t;
|
Chris@16
|
169 typedef typename parser_result<self_t, ScannerT>::type result_t;
|
Chris@16
|
170 BOOST_SPIRIT_CONTEXT_PARSE(
|
Chris@16
|
171 scan, *this, scanner_t, context_t, result_t);
|
Chris@16
|
172 }
|
Chris@16
|
173
|
Chris@16
|
174 ActorTupleT init;
|
Chris@16
|
175 };
|
Chris@16
|
176
|
Chris@16
|
177 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
178 //
|
Chris@16
|
179 // closure class
|
Chris@16
|
180 //
|
Chris@16
|
181 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
182 template <
|
Chris@16
|
183 typename DerivedT
|
Chris@16
|
184 , typename T0
|
Chris@16
|
185 , typename T1
|
Chris@16
|
186 , typename T2
|
Chris@16
|
187
|
Chris@16
|
188 #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
|
Chris@16
|
189 , typename T3
|
Chris@16
|
190 , typename T4
|
Chris@16
|
191 , typename T5
|
Chris@16
|
192
|
Chris@16
|
193 #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
|
Chris@16
|
194 , typename T6
|
Chris@16
|
195 , typename T7
|
Chris@16
|
196 , typename T8
|
Chris@16
|
197
|
Chris@16
|
198 #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
|
Chris@16
|
199 , typename T9
|
Chris@16
|
200 , typename T10
|
Chris@16
|
201 , typename T11
|
Chris@16
|
202
|
Chris@16
|
203 #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
|
Chris@16
|
204 , typename T12
|
Chris@16
|
205 , typename T13
|
Chris@16
|
206 , typename T14
|
Chris@16
|
207 #endif
|
Chris@16
|
208 #endif
|
Chris@16
|
209 #endif
|
Chris@16
|
210 #endif
|
Chris@16
|
211 >
|
Chris@16
|
212 struct closure :
|
Chris@16
|
213 public ::phoenix::closure<
|
Chris@16
|
214 T0, T1, T2
|
Chris@16
|
215 #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
|
Chris@16
|
216 , T3, T4, T5
|
Chris@16
|
217 #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
|
Chris@16
|
218 , T6, T7, T8
|
Chris@16
|
219 #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
|
Chris@16
|
220 , T9, T10, T11
|
Chris@16
|
221 #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
|
Chris@16
|
222 , T12, T13, T14
|
Chris@16
|
223 #endif
|
Chris@16
|
224 #endif
|
Chris@16
|
225 #endif
|
Chris@16
|
226 #endif
|
Chris@16
|
227 >
|
Chris@16
|
228 {
|
Chris@16
|
229 typedef ::phoenix::closure<
|
Chris@16
|
230 T0, T1, T2
|
Chris@16
|
231 #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
|
Chris@16
|
232 , T3, T4, T5
|
Chris@16
|
233 #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
|
Chris@16
|
234 , T6, T7, T8
|
Chris@16
|
235 #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
|
Chris@16
|
236 , T9, T10, T11
|
Chris@16
|
237 #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
|
Chris@16
|
238 , T12, T13, T14
|
Chris@16
|
239 #endif
|
Chris@16
|
240 #endif
|
Chris@16
|
241 #endif
|
Chris@16
|
242 #endif
|
Chris@16
|
243 > phoenix_closure_t;
|
Chris@16
|
244
|
Chris@16
|
245 typedef closure_context<DerivedT> context_t;
|
Chris@16
|
246
|
Chris@16
|
247 template <typename DerivedT2>
|
Chris@16
|
248 struct aux
|
Chris@16
|
249 {
|
Chris@16
|
250 DerivedT2& aux_derived()
|
Chris@16
|
251 { return *static_cast<DerivedT2*>(this); }
|
Chris@16
|
252
|
Chris@16
|
253 DerivedT2 const& aux_derived() const
|
Chris@16
|
254 { return *static_cast<DerivedT2 const*>(this); }
|
Chris@16
|
255
|
Chris@16
|
256 // initialization functions
|
Chris@16
|
257 template <typename A>
|
Chris@16
|
258 init_closure_parser<
|
Chris@16
|
259 DerivedT2,
|
Chris@16
|
260 ::phoenix::tuple<
|
Chris@16
|
261 typename ::phoenix::as_actor<A>::type
|
Chris@16
|
262 >
|
Chris@16
|
263 >
|
Chris@16
|
264 operator()(A const &a) const
|
Chris@16
|
265 {
|
Chris@16
|
266 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
267 typedef ::phoenix::tuple<a_t> actor_tuple_t;
|
Chris@16
|
268
|
Chris@16
|
269 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
270 aux_derived(),
|
Chris@16
|
271 actor_tuple_t(
|
Chris@16
|
272 ::phoenix::as_actor<A>::convert(a)
|
Chris@16
|
273 )
|
Chris@16
|
274 );
|
Chris@16
|
275 }
|
Chris@16
|
276
|
Chris@16
|
277 template <typename A, typename B>
|
Chris@16
|
278 init_closure_parser<
|
Chris@16
|
279 DerivedT2,
|
Chris@16
|
280 ::phoenix::tuple<
|
Chris@16
|
281 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
282 typename ::phoenix::as_actor<B>::type
|
Chris@16
|
283 >
|
Chris@16
|
284 >
|
Chris@16
|
285 operator()(A const &a, B const &b) const
|
Chris@16
|
286 {
|
Chris@16
|
287 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
288 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
289 typedef ::phoenix::tuple<a_t, b_t> actor_tuple_t;
|
Chris@16
|
290
|
Chris@16
|
291 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
292 aux_derived(),
|
Chris@16
|
293 actor_tuple_t(
|
Chris@16
|
294 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
295 ::phoenix::as_actor<B>::convert(b)
|
Chris@16
|
296 )
|
Chris@16
|
297 );
|
Chris@16
|
298 }
|
Chris@16
|
299
|
Chris@16
|
300 template <typename A, typename B, typename C>
|
Chris@16
|
301 init_closure_parser<
|
Chris@16
|
302 DerivedT2,
|
Chris@16
|
303 ::phoenix::tuple<
|
Chris@16
|
304 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
305 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
306 typename ::phoenix::as_actor<C>::type
|
Chris@16
|
307 >
|
Chris@16
|
308 >
|
Chris@16
|
309 operator()(A const &a, B const &b, C const &c) const
|
Chris@16
|
310 {
|
Chris@16
|
311 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
312 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
313 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
314 typedef ::phoenix::tuple<a_t, b_t, c_t> actor_tuple_t;
|
Chris@16
|
315
|
Chris@16
|
316 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
317 aux_derived(),
|
Chris@16
|
318 actor_tuple_t(
|
Chris@16
|
319 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
320 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
321 ::phoenix::as_actor<C>::convert(c)
|
Chris@16
|
322 )
|
Chris@16
|
323 );
|
Chris@16
|
324 }
|
Chris@16
|
325
|
Chris@16
|
326 #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
|
Chris@16
|
327
|
Chris@16
|
328 template <
|
Chris@16
|
329 typename A, typename B, typename C, typename D
|
Chris@16
|
330 >
|
Chris@16
|
331 init_closure_parser<
|
Chris@16
|
332 DerivedT2,
|
Chris@16
|
333 ::phoenix::tuple<
|
Chris@16
|
334 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
335 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
336 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
337 typename ::phoenix::as_actor<D>::type
|
Chris@16
|
338 >
|
Chris@16
|
339 >
|
Chris@16
|
340 operator()(
|
Chris@16
|
341 A const &a, B const &b, C const &c, D const &d
|
Chris@16
|
342 ) const
|
Chris@16
|
343 {
|
Chris@16
|
344 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
345 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
346 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
347 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
348 typedef ::phoenix::tuple<
|
Chris@16
|
349 a_t, b_t, c_t, d_t
|
Chris@16
|
350 > actor_tuple_t;
|
Chris@16
|
351
|
Chris@16
|
352 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
353 aux_derived(),
|
Chris@16
|
354 actor_tuple_t(
|
Chris@16
|
355 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
356 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
357 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
358 ::phoenix::as_actor<D>::convert(d)
|
Chris@16
|
359 )
|
Chris@16
|
360 );
|
Chris@16
|
361 }
|
Chris@16
|
362
|
Chris@16
|
363 template <
|
Chris@16
|
364 typename A, typename B, typename C, typename D, typename E
|
Chris@16
|
365 >
|
Chris@16
|
366 init_closure_parser<
|
Chris@16
|
367 DerivedT2,
|
Chris@16
|
368 ::phoenix::tuple<
|
Chris@16
|
369 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
370 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
371 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
372 typename ::phoenix::as_actor<D>::type,
|
Chris@16
|
373 typename ::phoenix::as_actor<E>::type
|
Chris@16
|
374 >
|
Chris@16
|
375 >
|
Chris@16
|
376 operator()(
|
Chris@16
|
377 A const &a, B const &b, C const &c, D const &d, E const &e
|
Chris@16
|
378 ) const
|
Chris@16
|
379 {
|
Chris@16
|
380 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
381 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
382 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
383 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
384 typedef typename ::phoenix::as_actor<E>::type e_t;
|
Chris@16
|
385 typedef ::phoenix::tuple<
|
Chris@16
|
386 a_t, b_t, c_t, d_t, e_t
|
Chris@16
|
387 > actor_tuple_t;
|
Chris@16
|
388
|
Chris@16
|
389 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
390 aux_derived(),
|
Chris@16
|
391 actor_tuple_t(
|
Chris@16
|
392 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
393 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
394 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
395 ::phoenix::as_actor<D>::convert(d),
|
Chris@16
|
396 ::phoenix::as_actor<E>::convert(e)
|
Chris@16
|
397 )
|
Chris@16
|
398 );
|
Chris@16
|
399 }
|
Chris@16
|
400
|
Chris@16
|
401 template <
|
Chris@16
|
402 typename A, typename B, typename C, typename D, typename E,
|
Chris@16
|
403 typename F
|
Chris@16
|
404 >
|
Chris@16
|
405 init_closure_parser<
|
Chris@16
|
406 DerivedT2,
|
Chris@16
|
407 ::phoenix::tuple<
|
Chris@16
|
408 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
409 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
410 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
411 typename ::phoenix::as_actor<D>::type,
|
Chris@16
|
412 typename ::phoenix::as_actor<E>::type,
|
Chris@16
|
413 typename ::phoenix::as_actor<F>::type
|
Chris@16
|
414 >
|
Chris@16
|
415 >
|
Chris@16
|
416 operator()(
|
Chris@16
|
417 A const &a, B const &b, C const &c, D const &d, E const &e,
|
Chris@16
|
418 F const &f
|
Chris@16
|
419 ) const
|
Chris@16
|
420 {
|
Chris@16
|
421 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
422 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
423 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
424 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
425 typedef typename ::phoenix::as_actor<E>::type e_t;
|
Chris@16
|
426 typedef typename ::phoenix::as_actor<F>::type f_t;
|
Chris@16
|
427 typedef ::phoenix::tuple<
|
Chris@16
|
428 a_t, b_t, c_t, d_t, e_t, f_t
|
Chris@16
|
429 > actor_tuple_t;
|
Chris@16
|
430
|
Chris@16
|
431 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
432 aux_derived(),
|
Chris@16
|
433 actor_tuple_t(
|
Chris@16
|
434 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
435 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
436 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
437 ::phoenix::as_actor<D>::convert(d),
|
Chris@16
|
438 ::phoenix::as_actor<E>::convert(e),
|
Chris@16
|
439 ::phoenix::as_actor<F>::convert(f)
|
Chris@16
|
440 )
|
Chris@16
|
441 );
|
Chris@16
|
442 }
|
Chris@16
|
443
|
Chris@16
|
444 #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
|
Chris@16
|
445
|
Chris@16
|
446 template <
|
Chris@16
|
447 typename A, typename B, typename C, typename D, typename E,
|
Chris@16
|
448 typename F, typename G
|
Chris@16
|
449 >
|
Chris@16
|
450 init_closure_parser<
|
Chris@16
|
451 DerivedT2,
|
Chris@16
|
452 ::phoenix::tuple<
|
Chris@16
|
453 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
454 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
455 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
456 typename ::phoenix::as_actor<D>::type,
|
Chris@16
|
457 typename ::phoenix::as_actor<E>::type,
|
Chris@16
|
458 typename ::phoenix::as_actor<F>::type,
|
Chris@16
|
459 typename ::phoenix::as_actor<G>::type
|
Chris@16
|
460 >
|
Chris@16
|
461 >
|
Chris@16
|
462 operator()(
|
Chris@16
|
463 A const &a, B const &b, C const &c, D const &d, E const &e,
|
Chris@16
|
464 F const &f, G const &g
|
Chris@16
|
465 ) const
|
Chris@16
|
466 {
|
Chris@16
|
467 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
468 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
469 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
470 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
471 typedef typename ::phoenix::as_actor<E>::type e_t;
|
Chris@16
|
472 typedef typename ::phoenix::as_actor<F>::type f_t;
|
Chris@16
|
473 typedef typename ::phoenix::as_actor<G>::type g_t;
|
Chris@16
|
474 typedef ::phoenix::tuple<
|
Chris@16
|
475 a_t, b_t, c_t, d_t, e_t, f_t, g_t
|
Chris@16
|
476 > actor_tuple_t;
|
Chris@16
|
477
|
Chris@16
|
478 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
479 aux_derived(),
|
Chris@16
|
480 actor_tuple_t(
|
Chris@16
|
481 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
482 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
483 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
484 ::phoenix::as_actor<D>::convert(d),
|
Chris@16
|
485 ::phoenix::as_actor<E>::convert(e),
|
Chris@16
|
486 ::phoenix::as_actor<F>::convert(f),
|
Chris@16
|
487 ::phoenix::as_actor<G>::convert(g)
|
Chris@16
|
488 )
|
Chris@16
|
489 );
|
Chris@16
|
490 }
|
Chris@16
|
491
|
Chris@16
|
492 template <
|
Chris@16
|
493 typename A, typename B, typename C, typename D, typename E,
|
Chris@16
|
494 typename F, typename G, typename H
|
Chris@16
|
495 >
|
Chris@16
|
496 init_closure_parser<
|
Chris@16
|
497 DerivedT2,
|
Chris@16
|
498 ::phoenix::tuple<
|
Chris@16
|
499 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
500 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
501 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
502 typename ::phoenix::as_actor<D>::type,
|
Chris@16
|
503 typename ::phoenix::as_actor<E>::type,
|
Chris@16
|
504 typename ::phoenix::as_actor<F>::type,
|
Chris@16
|
505 typename ::phoenix::as_actor<G>::type,
|
Chris@16
|
506 typename ::phoenix::as_actor<H>::type
|
Chris@16
|
507 >
|
Chris@16
|
508 >
|
Chris@16
|
509 operator()(
|
Chris@16
|
510 A const &a, B const &b, C const &c, D const &d, E const &e,
|
Chris@16
|
511 F const &f, G const &g, H const &h
|
Chris@16
|
512 ) const
|
Chris@16
|
513 {
|
Chris@16
|
514 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
515 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
516 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
517 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
518 typedef typename ::phoenix::as_actor<E>::type e_t;
|
Chris@16
|
519 typedef typename ::phoenix::as_actor<F>::type f_t;
|
Chris@16
|
520 typedef typename ::phoenix::as_actor<G>::type g_t;
|
Chris@16
|
521 typedef typename ::phoenix::as_actor<H>::type h_t;
|
Chris@16
|
522 typedef ::phoenix::tuple<
|
Chris@16
|
523 a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t
|
Chris@16
|
524 > actor_tuple_t;
|
Chris@16
|
525
|
Chris@16
|
526 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
527 aux_derived(),
|
Chris@16
|
528 actor_tuple_t(
|
Chris@16
|
529 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
530 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
531 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
532 ::phoenix::as_actor<D>::convert(d),
|
Chris@16
|
533 ::phoenix::as_actor<E>::convert(e),
|
Chris@16
|
534 ::phoenix::as_actor<F>::convert(f),
|
Chris@16
|
535 ::phoenix::as_actor<G>::convert(g),
|
Chris@16
|
536 ::phoenix::as_actor<H>::convert(h)
|
Chris@16
|
537 )
|
Chris@16
|
538 );
|
Chris@16
|
539 }
|
Chris@16
|
540
|
Chris@16
|
541 template <
|
Chris@16
|
542 typename A, typename B, typename C, typename D, typename E,
|
Chris@16
|
543 typename F, typename G, typename H, typename I
|
Chris@16
|
544 >
|
Chris@16
|
545 init_closure_parser<
|
Chris@16
|
546 DerivedT2,
|
Chris@16
|
547 ::phoenix::tuple<
|
Chris@16
|
548 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
549 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
550 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
551 typename ::phoenix::as_actor<D>::type,
|
Chris@16
|
552 typename ::phoenix::as_actor<E>::type,
|
Chris@16
|
553 typename ::phoenix::as_actor<F>::type,
|
Chris@16
|
554 typename ::phoenix::as_actor<G>::type,
|
Chris@16
|
555 typename ::phoenix::as_actor<H>::type,
|
Chris@16
|
556 typename ::phoenix::as_actor<I>::type
|
Chris@16
|
557 >
|
Chris@16
|
558 >
|
Chris@16
|
559 operator()(
|
Chris@16
|
560 A const &a, B const &b, C const &c, D const &d, E const &e,
|
Chris@16
|
561 F const &f, G const &g, H const &h, I const &i
|
Chris@16
|
562 ) const
|
Chris@16
|
563 {
|
Chris@16
|
564 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
565 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
566 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
567 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
568 typedef typename ::phoenix::as_actor<E>::type e_t;
|
Chris@16
|
569 typedef typename ::phoenix::as_actor<F>::type f_t;
|
Chris@16
|
570 typedef typename ::phoenix::as_actor<G>::type g_t;
|
Chris@16
|
571 typedef typename ::phoenix::as_actor<H>::type h_t;
|
Chris@16
|
572 typedef typename ::phoenix::as_actor<I>::type i_t;
|
Chris@16
|
573 typedef ::phoenix::tuple<
|
Chris@16
|
574 a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t
|
Chris@16
|
575 > actor_tuple_t;
|
Chris@16
|
576
|
Chris@16
|
577 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
578 aux_derived(),
|
Chris@16
|
579 actor_tuple_t(
|
Chris@16
|
580 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
581 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
582 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
583 ::phoenix::as_actor<D>::convert(d),
|
Chris@16
|
584 ::phoenix::as_actor<E>::convert(e),
|
Chris@16
|
585 ::phoenix::as_actor<F>::convert(f),
|
Chris@16
|
586 ::phoenix::as_actor<G>::convert(g),
|
Chris@16
|
587 ::phoenix::as_actor<H>::convert(h),
|
Chris@16
|
588 ::phoenix::as_actor<I>::convert(i)
|
Chris@16
|
589 )
|
Chris@16
|
590 );
|
Chris@16
|
591 }
|
Chris@16
|
592
|
Chris@16
|
593 #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
|
Chris@16
|
594
|
Chris@16
|
595 template <
|
Chris@16
|
596 typename A, typename B, typename C, typename D, typename E,
|
Chris@16
|
597 typename F, typename G, typename H, typename I, typename J
|
Chris@16
|
598 >
|
Chris@16
|
599 init_closure_parser<
|
Chris@16
|
600 DerivedT2,
|
Chris@16
|
601 ::phoenix::tuple<
|
Chris@16
|
602 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
603 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
604 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
605 typename ::phoenix::as_actor<D>::type,
|
Chris@16
|
606 typename ::phoenix::as_actor<E>::type,
|
Chris@16
|
607 typename ::phoenix::as_actor<F>::type,
|
Chris@16
|
608 typename ::phoenix::as_actor<G>::type,
|
Chris@16
|
609 typename ::phoenix::as_actor<H>::type,
|
Chris@16
|
610 typename ::phoenix::as_actor<I>::type,
|
Chris@16
|
611 typename ::phoenix::as_actor<J>::type
|
Chris@16
|
612 >
|
Chris@16
|
613 >
|
Chris@16
|
614 operator()(
|
Chris@16
|
615 A const &a, B const &b, C const &c, D const &d, E const &e,
|
Chris@16
|
616 F const &f, G const &g, H const &h, I const &i, J const &j
|
Chris@16
|
617 ) const
|
Chris@16
|
618 {
|
Chris@16
|
619 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
620 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
621 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
622 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
623 typedef typename ::phoenix::as_actor<E>::type e_t;
|
Chris@16
|
624 typedef typename ::phoenix::as_actor<F>::type f_t;
|
Chris@16
|
625 typedef typename ::phoenix::as_actor<G>::type g_t;
|
Chris@16
|
626 typedef typename ::phoenix::as_actor<H>::type h_t;
|
Chris@16
|
627 typedef typename ::phoenix::as_actor<I>::type i_t;
|
Chris@16
|
628 typedef typename ::phoenix::as_actor<J>::type j_t;
|
Chris@16
|
629 typedef ::phoenix::tuple<
|
Chris@16
|
630 a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t
|
Chris@16
|
631 > actor_tuple_t;
|
Chris@16
|
632
|
Chris@16
|
633 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
634 aux_derived(),
|
Chris@16
|
635 actor_tuple_t(
|
Chris@16
|
636 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
637 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
638 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
639 ::phoenix::as_actor<D>::convert(d),
|
Chris@16
|
640 ::phoenix::as_actor<E>::convert(e),
|
Chris@16
|
641 ::phoenix::as_actor<F>::convert(f),
|
Chris@16
|
642 ::phoenix::as_actor<G>::convert(g),
|
Chris@16
|
643 ::phoenix::as_actor<H>::convert(h),
|
Chris@16
|
644 ::phoenix::as_actor<I>::convert(i),
|
Chris@16
|
645 ::phoenix::as_actor<J>::convert(j)
|
Chris@16
|
646 )
|
Chris@16
|
647 );
|
Chris@16
|
648 }
|
Chris@16
|
649
|
Chris@16
|
650 template <
|
Chris@16
|
651 typename A, typename B, typename C, typename D, typename E,
|
Chris@16
|
652 typename F, typename G, typename H, typename I, typename J,
|
Chris@16
|
653 typename K
|
Chris@16
|
654 >
|
Chris@16
|
655 init_closure_parser<
|
Chris@16
|
656 DerivedT2,
|
Chris@16
|
657 ::phoenix::tuple<
|
Chris@16
|
658 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
659 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
660 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
661 typename ::phoenix::as_actor<D>::type,
|
Chris@16
|
662 typename ::phoenix::as_actor<E>::type,
|
Chris@16
|
663 typename ::phoenix::as_actor<F>::type,
|
Chris@16
|
664 typename ::phoenix::as_actor<G>::type,
|
Chris@16
|
665 typename ::phoenix::as_actor<H>::type,
|
Chris@16
|
666 typename ::phoenix::as_actor<I>::type,
|
Chris@16
|
667 typename ::phoenix::as_actor<J>::type,
|
Chris@16
|
668 typename ::phoenix::as_actor<K>::type
|
Chris@16
|
669 >
|
Chris@16
|
670 >
|
Chris@16
|
671 operator()(
|
Chris@16
|
672 A const &a, B const &b, C const &c, D const &d, E const &e,
|
Chris@16
|
673 F const &f, G const &g, H const &h, I const &i, J const &j,
|
Chris@16
|
674 K const &k
|
Chris@16
|
675 ) const
|
Chris@16
|
676 {
|
Chris@16
|
677 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
678 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
679 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
680 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
681 typedef typename ::phoenix::as_actor<E>::type e_t;
|
Chris@16
|
682 typedef typename ::phoenix::as_actor<F>::type f_t;
|
Chris@16
|
683 typedef typename ::phoenix::as_actor<G>::type g_t;
|
Chris@16
|
684 typedef typename ::phoenix::as_actor<H>::type h_t;
|
Chris@16
|
685 typedef typename ::phoenix::as_actor<I>::type i_t;
|
Chris@16
|
686 typedef typename ::phoenix::as_actor<J>::type j_t;
|
Chris@16
|
687 typedef typename ::phoenix::as_actor<K>::type k_t;
|
Chris@16
|
688 typedef ::phoenix::tuple<
|
Chris@16
|
689 a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
|
Chris@16
|
690 k_t
|
Chris@16
|
691 > actor_tuple_t;
|
Chris@16
|
692
|
Chris@16
|
693 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
694 aux_derived(),
|
Chris@16
|
695 actor_tuple_t(
|
Chris@16
|
696 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
697 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
698 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
699 ::phoenix::as_actor<D>::convert(d),
|
Chris@16
|
700 ::phoenix::as_actor<E>::convert(e),
|
Chris@16
|
701 ::phoenix::as_actor<F>::convert(f),
|
Chris@16
|
702 ::phoenix::as_actor<G>::convert(g),
|
Chris@16
|
703 ::phoenix::as_actor<H>::convert(h),
|
Chris@16
|
704 ::phoenix::as_actor<I>::convert(i),
|
Chris@16
|
705 ::phoenix::as_actor<J>::convert(j),
|
Chris@16
|
706 ::phoenix::as_actor<K>::convert(k)
|
Chris@16
|
707 )
|
Chris@16
|
708 );
|
Chris@16
|
709 }
|
Chris@16
|
710
|
Chris@16
|
711 template <
|
Chris@16
|
712 typename A, typename B, typename C, typename D, typename E,
|
Chris@16
|
713 typename F, typename G, typename H, typename I, typename J,
|
Chris@16
|
714 typename K, typename L
|
Chris@16
|
715 >
|
Chris@16
|
716 init_closure_parser<
|
Chris@16
|
717 DerivedT2,
|
Chris@16
|
718 ::phoenix::tuple<
|
Chris@16
|
719 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
720 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
721 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
722 typename ::phoenix::as_actor<D>::type,
|
Chris@16
|
723 typename ::phoenix::as_actor<E>::type,
|
Chris@16
|
724 typename ::phoenix::as_actor<F>::type,
|
Chris@16
|
725 typename ::phoenix::as_actor<G>::type,
|
Chris@16
|
726 typename ::phoenix::as_actor<H>::type,
|
Chris@16
|
727 typename ::phoenix::as_actor<I>::type,
|
Chris@16
|
728 typename ::phoenix::as_actor<J>::type,
|
Chris@16
|
729 typename ::phoenix::as_actor<K>::type,
|
Chris@16
|
730 typename ::phoenix::as_actor<L>::type
|
Chris@16
|
731 >
|
Chris@16
|
732 >
|
Chris@16
|
733 operator()(
|
Chris@16
|
734 A const &a, B const &b, C const &c, D const &d, E const &e,
|
Chris@16
|
735 F const &f, G const &g, H const &h, I const &i, J const &j,
|
Chris@16
|
736 K const &k, L const &l
|
Chris@16
|
737 ) const
|
Chris@16
|
738 {
|
Chris@16
|
739 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
740 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
741 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
742 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
743 typedef typename ::phoenix::as_actor<E>::type e_t;
|
Chris@16
|
744 typedef typename ::phoenix::as_actor<F>::type f_t;
|
Chris@16
|
745 typedef typename ::phoenix::as_actor<G>::type g_t;
|
Chris@16
|
746 typedef typename ::phoenix::as_actor<H>::type h_t;
|
Chris@16
|
747 typedef typename ::phoenix::as_actor<I>::type i_t;
|
Chris@16
|
748 typedef typename ::phoenix::as_actor<J>::type j_t;
|
Chris@16
|
749 typedef typename ::phoenix::as_actor<K>::type k_t;
|
Chris@16
|
750 typedef typename ::phoenix::as_actor<L>::type l_t;
|
Chris@16
|
751 typedef ::phoenix::tuple<
|
Chris@16
|
752 a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
|
Chris@16
|
753 k_t, l_t
|
Chris@16
|
754 > actor_tuple_t;
|
Chris@16
|
755
|
Chris@16
|
756 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
757 aux_derived(),
|
Chris@16
|
758 actor_tuple_t(
|
Chris@16
|
759 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
760 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
761 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
762 ::phoenix::as_actor<D>::convert(d),
|
Chris@16
|
763 ::phoenix::as_actor<E>::convert(e),
|
Chris@16
|
764 ::phoenix::as_actor<F>::convert(f),
|
Chris@16
|
765 ::phoenix::as_actor<G>::convert(g),
|
Chris@16
|
766 ::phoenix::as_actor<H>::convert(h),
|
Chris@16
|
767 ::phoenix::as_actor<I>::convert(i),
|
Chris@16
|
768 ::phoenix::as_actor<J>::convert(j),
|
Chris@16
|
769 ::phoenix::as_actor<K>::convert(k),
|
Chris@16
|
770 ::phoenix::as_actor<L>::convert(l)
|
Chris@16
|
771 )
|
Chris@16
|
772 );
|
Chris@16
|
773 }
|
Chris@16
|
774
|
Chris@16
|
775 #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
|
Chris@16
|
776
|
Chris@16
|
777 template <
|
Chris@16
|
778 typename A, typename B, typename C, typename D, typename E,
|
Chris@16
|
779 typename F, typename G, typename H, typename I, typename J,
|
Chris@16
|
780 typename K, typename L, typename M
|
Chris@16
|
781 >
|
Chris@16
|
782 init_closure_parser<
|
Chris@16
|
783 DerivedT2,
|
Chris@16
|
784 ::phoenix::tuple<
|
Chris@16
|
785 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
786 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
787 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
788 typename ::phoenix::as_actor<D>::type,
|
Chris@16
|
789 typename ::phoenix::as_actor<E>::type,
|
Chris@16
|
790 typename ::phoenix::as_actor<F>::type,
|
Chris@16
|
791 typename ::phoenix::as_actor<G>::type,
|
Chris@16
|
792 typename ::phoenix::as_actor<H>::type,
|
Chris@16
|
793 typename ::phoenix::as_actor<I>::type,
|
Chris@16
|
794 typename ::phoenix::as_actor<J>::type,
|
Chris@16
|
795 typename ::phoenix::as_actor<K>::type,
|
Chris@16
|
796 typename ::phoenix::as_actor<L>::type,
|
Chris@16
|
797 typename ::phoenix::as_actor<M>::type
|
Chris@16
|
798 >
|
Chris@16
|
799 >
|
Chris@16
|
800 operator()(
|
Chris@16
|
801 A const &a, B const &b, C const &c, D const &d, E const &e,
|
Chris@16
|
802 F const &f, G const &g, H const &h, I const &i, J const &j,
|
Chris@16
|
803 K const &k, L const &l, M const &m
|
Chris@16
|
804 ) const
|
Chris@16
|
805 {
|
Chris@16
|
806 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
807 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
808 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
809 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
810 typedef typename ::phoenix::as_actor<E>::type e_t;
|
Chris@16
|
811 typedef typename ::phoenix::as_actor<F>::type f_t;
|
Chris@16
|
812 typedef typename ::phoenix::as_actor<G>::type g_t;
|
Chris@16
|
813 typedef typename ::phoenix::as_actor<H>::type h_t;
|
Chris@16
|
814 typedef typename ::phoenix::as_actor<I>::type i_t;
|
Chris@16
|
815 typedef typename ::phoenix::as_actor<J>::type j_t;
|
Chris@16
|
816 typedef typename ::phoenix::as_actor<K>::type k_t;
|
Chris@16
|
817 typedef typename ::phoenix::as_actor<L>::type l_t;
|
Chris@16
|
818 typedef typename ::phoenix::as_actor<M>::type m_t;
|
Chris@16
|
819 typedef ::phoenix::tuple<
|
Chris@16
|
820 a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
|
Chris@16
|
821 k_t, l_t, m_t
|
Chris@16
|
822 > actor_tuple_t;
|
Chris@16
|
823
|
Chris@16
|
824 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
825 aux_derived(),
|
Chris@16
|
826 actor_tuple_t(
|
Chris@16
|
827 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
828 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
829 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
830 ::phoenix::as_actor<D>::convert(d),
|
Chris@16
|
831 ::phoenix::as_actor<E>::convert(e),
|
Chris@16
|
832 ::phoenix::as_actor<F>::convert(f),
|
Chris@16
|
833 ::phoenix::as_actor<G>::convert(g),
|
Chris@16
|
834 ::phoenix::as_actor<H>::convert(h),
|
Chris@16
|
835 ::phoenix::as_actor<I>::convert(i),
|
Chris@16
|
836 ::phoenix::as_actor<J>::convert(j),
|
Chris@16
|
837 ::phoenix::as_actor<K>::convert(k),
|
Chris@16
|
838 ::phoenix::as_actor<L>::convert(l),
|
Chris@16
|
839 ::phoenix::as_actor<M>::convert(m)
|
Chris@16
|
840 )
|
Chris@16
|
841 );
|
Chris@16
|
842 }
|
Chris@16
|
843
|
Chris@16
|
844 template <
|
Chris@16
|
845 typename A, typename B, typename C, typename D, typename E,
|
Chris@16
|
846 typename F, typename G, typename H, typename I, typename J,
|
Chris@16
|
847 typename K, typename L, typename M, typename N
|
Chris@16
|
848 >
|
Chris@16
|
849 init_closure_parser<
|
Chris@16
|
850 DerivedT2,
|
Chris@16
|
851 ::phoenix::tuple<
|
Chris@16
|
852 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
853 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
854 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
855 typename ::phoenix::as_actor<D>::type,
|
Chris@16
|
856 typename ::phoenix::as_actor<E>::type,
|
Chris@16
|
857 typename ::phoenix::as_actor<F>::type,
|
Chris@16
|
858 typename ::phoenix::as_actor<G>::type,
|
Chris@16
|
859 typename ::phoenix::as_actor<H>::type,
|
Chris@16
|
860 typename ::phoenix::as_actor<I>::type,
|
Chris@16
|
861 typename ::phoenix::as_actor<J>::type,
|
Chris@16
|
862 typename ::phoenix::as_actor<K>::type,
|
Chris@16
|
863 typename ::phoenix::as_actor<L>::type,
|
Chris@16
|
864 typename ::phoenix::as_actor<M>::type,
|
Chris@16
|
865 typename ::phoenix::as_actor<N>::type
|
Chris@16
|
866 >
|
Chris@16
|
867 >
|
Chris@16
|
868 operator()(
|
Chris@16
|
869 A const &a, B const &b, C const &c, D const &d, E const &e,
|
Chris@16
|
870 F const &f, G const &g, H const &h, I const &i, J const &j,
|
Chris@16
|
871 K const &k, L const &l, M const &m, N const &n
|
Chris@16
|
872 ) const
|
Chris@16
|
873 {
|
Chris@16
|
874 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
875 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
876 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
877 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
878 typedef typename ::phoenix::as_actor<E>::type e_t;
|
Chris@16
|
879 typedef typename ::phoenix::as_actor<F>::type f_t;
|
Chris@16
|
880 typedef typename ::phoenix::as_actor<G>::type g_t;
|
Chris@16
|
881 typedef typename ::phoenix::as_actor<H>::type h_t;
|
Chris@16
|
882 typedef typename ::phoenix::as_actor<I>::type i_t;
|
Chris@16
|
883 typedef typename ::phoenix::as_actor<J>::type j_t;
|
Chris@16
|
884 typedef typename ::phoenix::as_actor<K>::type k_t;
|
Chris@16
|
885 typedef typename ::phoenix::as_actor<L>::type l_t;
|
Chris@16
|
886 typedef typename ::phoenix::as_actor<M>::type m_t;
|
Chris@16
|
887 typedef typename ::phoenix::as_actor<N>::type n_t;
|
Chris@16
|
888 typedef ::phoenix::tuple<
|
Chris@16
|
889 a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
|
Chris@16
|
890 k_t, l_t, m_t, n_t
|
Chris@16
|
891 > actor_tuple_t;
|
Chris@16
|
892
|
Chris@16
|
893 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
894 aux_derived(),
|
Chris@16
|
895 actor_tuple_t(
|
Chris@16
|
896 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
897 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
898 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
899 ::phoenix::as_actor<D>::convert(d),
|
Chris@16
|
900 ::phoenix::as_actor<E>::convert(e),
|
Chris@16
|
901 ::phoenix::as_actor<F>::convert(f),
|
Chris@16
|
902 ::phoenix::as_actor<G>::convert(g),
|
Chris@16
|
903 ::phoenix::as_actor<H>::convert(h),
|
Chris@16
|
904 ::phoenix::as_actor<I>::convert(i),
|
Chris@16
|
905 ::phoenix::as_actor<J>::convert(j),
|
Chris@16
|
906 ::phoenix::as_actor<K>::convert(k),
|
Chris@16
|
907 ::phoenix::as_actor<L>::convert(l),
|
Chris@16
|
908 ::phoenix::as_actor<M>::convert(m),
|
Chris@16
|
909 ::phoenix::as_actor<N>::convert(n)
|
Chris@16
|
910 )
|
Chris@16
|
911 );
|
Chris@16
|
912 }
|
Chris@16
|
913
|
Chris@16
|
914 template <
|
Chris@16
|
915 typename A, typename B, typename C, typename D, typename E,
|
Chris@16
|
916 typename F, typename G, typename H, typename I, typename J,
|
Chris@16
|
917 typename K, typename L, typename M, typename N, typename O
|
Chris@16
|
918 >
|
Chris@16
|
919 init_closure_parser<
|
Chris@16
|
920 DerivedT2,
|
Chris@16
|
921 ::phoenix::tuple<
|
Chris@16
|
922 typename ::phoenix::as_actor<A>::type,
|
Chris@16
|
923 typename ::phoenix::as_actor<B>::type,
|
Chris@16
|
924 typename ::phoenix::as_actor<C>::type,
|
Chris@16
|
925 typename ::phoenix::as_actor<D>::type,
|
Chris@16
|
926 typename ::phoenix::as_actor<E>::type,
|
Chris@16
|
927 typename ::phoenix::as_actor<F>::type,
|
Chris@16
|
928 typename ::phoenix::as_actor<G>::type,
|
Chris@16
|
929 typename ::phoenix::as_actor<H>::type,
|
Chris@16
|
930 typename ::phoenix::as_actor<I>::type,
|
Chris@16
|
931 typename ::phoenix::as_actor<J>::type,
|
Chris@16
|
932 typename ::phoenix::as_actor<K>::type,
|
Chris@16
|
933 typename ::phoenix::as_actor<L>::type,
|
Chris@16
|
934 typename ::phoenix::as_actor<M>::type,
|
Chris@16
|
935 typename ::phoenix::as_actor<N>::type,
|
Chris@16
|
936 typename ::phoenix::as_actor<O>::type
|
Chris@16
|
937 >
|
Chris@16
|
938 >
|
Chris@16
|
939 operator()(
|
Chris@16
|
940 A const &a, B const &b, C const &c, D const &d, E const &e,
|
Chris@16
|
941 F const &f, G const &g, H const &h, I const &i, J const &j,
|
Chris@16
|
942 K const &k, L const &l, M const &m, N const &n, O const &o
|
Chris@16
|
943 ) const
|
Chris@16
|
944 {
|
Chris@16
|
945 typedef typename ::phoenix::as_actor<A>::type a_t;
|
Chris@16
|
946 typedef typename ::phoenix::as_actor<B>::type b_t;
|
Chris@16
|
947 typedef typename ::phoenix::as_actor<C>::type c_t;
|
Chris@16
|
948 typedef typename ::phoenix::as_actor<D>::type d_t;
|
Chris@16
|
949 typedef typename ::phoenix::as_actor<E>::type e_t;
|
Chris@16
|
950 typedef typename ::phoenix::as_actor<F>::type f_t;
|
Chris@16
|
951 typedef typename ::phoenix::as_actor<G>::type g_t;
|
Chris@16
|
952 typedef typename ::phoenix::as_actor<H>::type h_t;
|
Chris@16
|
953 typedef typename ::phoenix::as_actor<I>::type i_t;
|
Chris@16
|
954 typedef typename ::phoenix::as_actor<J>::type j_t;
|
Chris@16
|
955 typedef typename ::phoenix::as_actor<K>::type k_t;
|
Chris@16
|
956 typedef typename ::phoenix::as_actor<L>::type l_t;
|
Chris@16
|
957 typedef typename ::phoenix::as_actor<M>::type m_t;
|
Chris@16
|
958 typedef typename ::phoenix::as_actor<N>::type n_t;
|
Chris@16
|
959 typedef typename ::phoenix::as_actor<O>::type o_t;
|
Chris@16
|
960 typedef ::phoenix::tuple<
|
Chris@16
|
961 a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
|
Chris@16
|
962 k_t, l_t, m_t, n_t, o_t
|
Chris@16
|
963 > actor_tuple_t;
|
Chris@16
|
964
|
Chris@16
|
965 return init_closure_parser<DerivedT2, actor_tuple_t>(
|
Chris@16
|
966 aux_derived(),
|
Chris@16
|
967 actor_tuple_t(
|
Chris@16
|
968 ::phoenix::as_actor<A>::convert(a),
|
Chris@16
|
969 ::phoenix::as_actor<B>::convert(b),
|
Chris@16
|
970 ::phoenix::as_actor<C>::convert(c),
|
Chris@16
|
971 ::phoenix::as_actor<D>::convert(d),
|
Chris@16
|
972 ::phoenix::as_actor<E>::convert(e),
|
Chris@16
|
973 ::phoenix::as_actor<F>::convert(f),
|
Chris@16
|
974 ::phoenix::as_actor<G>::convert(g),
|
Chris@16
|
975 ::phoenix::as_actor<H>::convert(h),
|
Chris@16
|
976 ::phoenix::as_actor<I>::convert(i),
|
Chris@16
|
977 ::phoenix::as_actor<J>::convert(j),
|
Chris@16
|
978 ::phoenix::as_actor<K>::convert(k),
|
Chris@16
|
979 ::phoenix::as_actor<L>::convert(l),
|
Chris@16
|
980 ::phoenix::as_actor<M>::convert(m),
|
Chris@16
|
981 ::phoenix::as_actor<N>::convert(n),
|
Chris@16
|
982 ::phoenix::as_actor<O>::convert(o)
|
Chris@16
|
983 )
|
Chris@16
|
984 );
|
Chris@16
|
985 }
|
Chris@16
|
986
|
Chris@16
|
987 #endif
|
Chris@16
|
988 #endif
|
Chris@16
|
989 #endif
|
Chris@16
|
990 #endif
|
Chris@16
|
991 };
|
Chris@16
|
992
|
Chris@16
|
993 ~closure() {}
|
Chris@16
|
994 };
|
Chris@16
|
995
|
Chris@16
|
996 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
997 //
|
Chris@16
|
998 // overloads for chseq_p and str_p taking in phoenix actors
|
Chris@16
|
999 //
|
Chris@16
|
1000 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
1001 template <typename ActorT>
|
Chris@16
|
1002 struct container_begin
|
Chris@16
|
1003 {
|
Chris@16
|
1004 typedef container_begin<ActorT> self_t;
|
Chris@16
|
1005
|
Chris@16
|
1006 template <typename TupleT>
|
Chris@16
|
1007 struct result
|
Chris@16
|
1008 {
|
Chris@16
|
1009 typedef typename ::phoenix::actor_result<ActorT, TupleT>
|
Chris@16
|
1010 ::plain_type::iterator type;
|
Chris@16
|
1011 };
|
Chris@16
|
1012
|
Chris@16
|
1013 container_begin(ActorT actor_)
|
Chris@16
|
1014 : actor(actor_) {}
|
Chris@16
|
1015
|
Chris@16
|
1016 template <typename TupleT>
|
Chris@16
|
1017 typename ::phoenix::actor_result<self_t, TupleT>::type
|
Chris@16
|
1018 eval(TupleT const& /*args*/) const
|
Chris@16
|
1019 { return actor().begin(); }
|
Chris@16
|
1020
|
Chris@16
|
1021 ActorT actor;
|
Chris@16
|
1022 };
|
Chris@16
|
1023
|
Chris@16
|
1024 template <typename ActorT>
|
Chris@16
|
1025 struct container_end
|
Chris@16
|
1026 {
|
Chris@16
|
1027 typedef container_begin<ActorT> self_t;
|
Chris@16
|
1028
|
Chris@16
|
1029 template <typename TupleT>
|
Chris@16
|
1030 struct result
|
Chris@16
|
1031 {
|
Chris@16
|
1032 typedef typename ::phoenix::actor_result<ActorT, TupleT>
|
Chris@16
|
1033 ::plain_type::iterator type;
|
Chris@16
|
1034 };
|
Chris@16
|
1035
|
Chris@16
|
1036 container_end(ActorT actor_)
|
Chris@16
|
1037 : actor(actor_) {}
|
Chris@16
|
1038
|
Chris@16
|
1039 template <typename TupleT>
|
Chris@16
|
1040 typename ::phoenix::actor_result<self_t, TupleT>::type
|
Chris@16
|
1041 eval(TupleT const& /*args*/) const
|
Chris@16
|
1042 { return actor().end(); }
|
Chris@16
|
1043
|
Chris@16
|
1044 ActorT actor;
|
Chris@16
|
1045 };
|
Chris@16
|
1046
|
Chris@16
|
1047 template <typename BaseT>
|
Chris@16
|
1048 inline f_chseq<
|
Chris@16
|
1049 ::phoenix::actor<container_begin< ::phoenix::actor<BaseT> > >,
|
Chris@16
|
1050 ::phoenix::actor<container_end< ::phoenix::actor<BaseT> > >
|
Chris@16
|
1051 >
|
Chris@16
|
1052 f_chseq_p(::phoenix::actor<BaseT> const& a)
|
Chris@16
|
1053 {
|
Chris@16
|
1054 typedef ::phoenix::actor<container_begin< ::phoenix::actor<BaseT> > >
|
Chris@16
|
1055 container_begin_t;
|
Chris@16
|
1056 typedef ::phoenix::actor<container_end< ::phoenix::actor<BaseT> > >
|
Chris@16
|
1057 container_end_t;
|
Chris@16
|
1058 typedef f_chseq<container_begin_t, container_end_t> result_t;
|
Chris@16
|
1059
|
Chris@16
|
1060 return result_t(container_begin_t(a), container_end_t(a));
|
Chris@16
|
1061 }
|
Chris@16
|
1062
|
Chris@16
|
1063 template <typename BaseT>
|
Chris@16
|
1064 inline f_strlit<
|
Chris@16
|
1065 ::phoenix::actor<container_begin< ::phoenix::actor<BaseT> > >,
|
Chris@16
|
1066 ::phoenix::actor<container_end< ::phoenix::actor<BaseT> > >
|
Chris@16
|
1067 >
|
Chris@16
|
1068 f_str_p(::phoenix::actor<BaseT> const& a)
|
Chris@16
|
1069 {
|
Chris@16
|
1070 typedef ::phoenix::actor<container_begin< ::phoenix::actor<BaseT> > >
|
Chris@16
|
1071 container_begin_t;
|
Chris@16
|
1072 typedef ::phoenix::actor<container_end< ::phoenix::actor<BaseT> > >
|
Chris@16
|
1073 container_end_t;
|
Chris@16
|
1074 typedef f_strlit<container_begin_t, container_end_t> result_t;
|
Chris@16
|
1075
|
Chris@16
|
1076 return result_t(container_begin_t(a), container_end_t(a));
|
Chris@16
|
1077 }
|
Chris@16
|
1078
|
Chris@16
|
1079 BOOST_SPIRIT_CLASSIC_NAMESPACE_END
|
Chris@16
|
1080
|
Chris@16
|
1081 }} // namespace BOOST_SPIRIT_CLASSIC_NS
|
Chris@16
|
1082
|
Chris@16
|
1083 #endif
|