diff -r 000000000000 -r bde4ae8d615e os/ossrv/ossrv_pub/boost_apis/boost/spirit/attribute/closure.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/ossrv_pub/boost_apis/boost/spirit/attribute/closure.hpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,1079 @@ +/*============================================================================= + Copyright (c) 2001-2003 Joel de Guzman + Copyright (c) 2002-2003 Hartmut Kaiser + http://spirit.sourceforge.net/ + + Use, modification and distribution is subject to the Boost Software + License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) +=============================================================================*/ +#ifndef BOOST_SPIRIT_CLOSURE_HPP +#define BOOST_SPIRIT_CLOSURE_HPP + +/////////////////////////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +/////////////////////////////////////////////////////////////////////////////// +// +// Spirit predefined maximum closure limit. This limit defines the maximum +// number of elements a closure can hold. This number defaults to 3. The +// actual maximum is rounded up in multiples of 3. Thus, if this value +// is 4, the actual limit is 6. The ultimate maximum limit in this +// implementation is 15. +// +// It should NOT be greater than PHOENIX_LIMIT! +// +/////////////////////////////////////////////////////////////////////////////// + +#if !defined(BOOST_SPIRIT_CLOSURE_LIMIT) +#define BOOST_SPIRIT_CLOSURE_LIMIT PHOENIX_LIMIT +#endif + +/////////////////////////////////////////////////////////////////////////////// +// +// ensure BOOST_SPIRIT_CLOSURE_LIMIT <= PHOENIX_LIMIT and SPIRIT_CLOSURE_LIMIT <= 15 +// +/////////////////////////////////////////////////////////////////////////////// +BOOST_STATIC_ASSERT(BOOST_SPIRIT_CLOSURE_LIMIT <= PHOENIX_LIMIT); +BOOST_STATIC_ASSERT(BOOST_SPIRIT_CLOSURE_LIMIT <= 15); + +/////////////////////////////////////////////////////////////////////////////// +namespace boost { namespace spirit { + + /////////////////////////////////////////////////////////////////////////// + // + // closure_context class + // + /////////////////////////////////////////////////////////////////////////// + template + class closure_context : public parser_context_base + { + public: + + typedef typename phoenix::tuple_element<0, + typename ClosureT::tuple_t>::type attr_t; + typedef ClosureT base_t; + typedef closure_context_linker > + context_linker_t; + + closure_context(ClosureT const& clos) + : frame(clos) {} + + ~closure_context() {} + + template + void pre_parse(ParserT const&, ScannerT const&) {} + + template + ResultT& post_parse(ResultT& hit, ParserT const&, ScannerT const&) + { hit.value(frame[phoenix::tuple_index<0>()]); return hit; } + + private: + + phoenix::closure_frame frame; + }; + + /////////////////////////////////////////////////////////////////////////// + // + // init_closure_context class + // + // The init_closure_context class is a special parser context type + // which additionally initializes a closure contained in the derived + // parser with values from a given tuple. Please note, that this + // given tuple does not contain the required values directly, it + // contains phoenix::actor objects. These actors have to be + // dereferenced to gain the values to be used for initialization + // (this is done by the help of the phoenix::convert_actors<> + // template). + // + /////////////////////////////////////////////////////////////////////////// + + template + class init_closure_context : public parser_context_base + { + typedef typename ClosureT::tuple_t tuple_t; + typedef typename ClosureT::closure_t closure_t; + + public: + + init_closure_context(ClosureT const& clos) + : frame(clos.subject(), phoenix::convert_actors(clos.init)) {} + + ~init_closure_context() {} + + template + void pre_parse(ParserT const& /*p*/, ScannerT const&) {} + + template + ResultT& post_parse(ResultT& hit, ParserT const&, ScannerT const&) + { hit.value(frame[phoenix::tuple_index<0>()]); return hit; } + + private: + + phoenix::closure_frame frame; + }; + + /////////////////////////////////////////////////////////////////////////// + // + // init_closure_parser class + // + /////////////////////////////////////////////////////////////////////////// + template + struct init_closure_parser + : public unary > > + { + typedef init_closure_parser self_t; + typedef unary > base_t; + typedef typename ParserT::phoenix_closure_t closure_t; + typedef typename ParserT::tuple_t tuple_t; + typedef typename phoenix::tuple_element<0, tuple_t>::type attr_t; + + template + struct result + { + typedef typename match_result::type type; + }; + + init_closure_parser(ParserT const& p, ActorTupleT const& init_) + : base_t(p), init(init_) {} + + template + typename parser_result::type + parse_main(ScannerT const& scan) const + { + return this->subject().parse_main(scan); + } + + template + typename parser_result::type + parse(ScannerT const& scan) const + { + typedef init_closure_context init_context_t; + typedef parser_scanner_linker scanner_t; + typedef closure_context_linker context_t; + typedef typename parser_result::type result_t; + BOOST_SPIRIT_CONTEXT_PARSE( + scan, *this, scanner_t, context_t, result_t); + } + + ActorTupleT init; + }; + + /////////////////////////////////////////////////////////////////////////// + // + // closure class + // + /////////////////////////////////////////////////////////////////////////// + template < + typename DerivedT + , typename T0 + , typename T1 + , typename T2 + + #if BOOST_SPIRIT_CLOSURE_LIMIT > 3 + , typename T3 + , typename T4 + , typename T5 + + #if BOOST_SPIRIT_CLOSURE_LIMIT > 6 + , typename T6 + , typename T7 + , typename T8 + + #if BOOST_SPIRIT_CLOSURE_LIMIT > 9 + , typename T9 + , typename T10 + , typename T11 + + #if BOOST_SPIRIT_CLOSURE_LIMIT > 12 + , typename T12 + , typename T13 + , typename T14 + #endif + #endif + #endif + #endif + > + struct closure : + public phoenix::closure< + T0, T1, T2 + #if BOOST_SPIRIT_CLOSURE_LIMIT > 3 + , T3, T4, T5 + #if BOOST_SPIRIT_CLOSURE_LIMIT > 6 + , T6, T7, T8 + #if BOOST_SPIRIT_CLOSURE_LIMIT > 9 + , T9, T10, T11 + #if BOOST_SPIRIT_CLOSURE_LIMIT > 12 + , T12, T13, T14 + #endif + #endif + #endif + #endif + > + { + typedef phoenix::closure< + T0, T1, T2 + #if BOOST_SPIRIT_CLOSURE_LIMIT > 3 + , T3, T4, T5 + #if BOOST_SPIRIT_CLOSURE_LIMIT > 6 + , T6, T7, T8 + #if BOOST_SPIRIT_CLOSURE_LIMIT > 9 + , T9, T10, T11 + #if BOOST_SPIRIT_CLOSURE_LIMIT > 12 + , T12, T13, T14 + #endif + #endif + #endif + #endif + > phoenix_closure_t; + + typedef closure_context context_t; + + template + struct aux + { + DerivedT2& aux_derived() + { return *static_cast(this); } + + DerivedT2 const& aux_derived() const + { return *static_cast(this); } + + // initialization functions + template + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type + > + > + operator()(A const &a) const + { + typedef typename phoenix::as_actor::type a_t; + typedef phoenix::tuple actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a) + ) + ); + } + + template + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()(A const &a, B const &b) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef phoenix::tuple actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b) + ) + ); + } + + template + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()(A const &a, B const &b, C const &c) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef phoenix::tuple actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c) + ) + ); + } + + #if BOOST_SPIRIT_CLOSURE_LIMIT > 3 + + template < + typename A, typename B, typename C, typename D + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d) + ) + ); + } + + template < + typename A, typename B, typename C, typename D, typename E + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d, E const &e + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef typename phoenix::as_actor::type e_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t, e_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d), + phoenix::as_actor::convert(e) + ) + ); + } + + template < + typename A, typename B, typename C, typename D, typename E, + typename F + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d, E const &e, + F const &f + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef typename phoenix::as_actor::type e_t; + typedef typename phoenix::as_actor::type f_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t, e_t, f_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d), + phoenix::as_actor::convert(e), + phoenix::as_actor::convert(f) + ) + ); + } + + #if BOOST_SPIRIT_CLOSURE_LIMIT > 6 + + template < + typename A, typename B, typename C, typename D, typename E, + typename F, typename G + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d, E const &e, + F const &f, G const &g + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef typename phoenix::as_actor::type e_t; + typedef typename phoenix::as_actor::type f_t; + typedef typename phoenix::as_actor::type g_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t, e_t, f_t, g_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d), + phoenix::as_actor::convert(e), + phoenix::as_actor::convert(f), + phoenix::as_actor::convert(g) + ) + ); + } + + template < + typename A, typename B, typename C, typename D, typename E, + typename F, typename G, typename H + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d, E const &e, + F const &f, G const &g, H const &h + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef typename phoenix::as_actor::type e_t; + typedef typename phoenix::as_actor::type f_t; + typedef typename phoenix::as_actor::type g_t; + typedef typename phoenix::as_actor::type h_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d), + phoenix::as_actor::convert(e), + phoenix::as_actor::convert(f), + phoenix::as_actor::convert(g), + phoenix::as_actor::convert(h) + ) + ); + } + + template < + typename A, typename B, typename C, typename D, typename E, + typename F, typename G, typename H, typename I + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d, E const &e, + F const &f, G const &g, H const &h, I const &i + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef typename phoenix::as_actor::type e_t; + typedef typename phoenix::as_actor::type f_t; + typedef typename phoenix::as_actor::type g_t; + typedef typename phoenix::as_actor::type h_t; + typedef typename phoenix::as_actor::type i_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d), + phoenix::as_actor::convert(e), + phoenix::as_actor::convert(f), + phoenix::as_actor::convert(g), + phoenix::as_actor::convert(h), + phoenix::as_actor::convert(i) + ) + ); + } + + #if BOOST_SPIRIT_CLOSURE_LIMIT > 9 + + template < + typename A, typename B, typename C, typename D, typename E, + typename F, typename G, typename H, typename I, typename J + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d, E const &e, + F const &f, G const &g, H const &h, I const &i, J const &j + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef typename phoenix::as_actor::type e_t; + typedef typename phoenix::as_actor::type f_t; + typedef typename phoenix::as_actor::type g_t; + typedef typename phoenix::as_actor::type h_t; + typedef typename phoenix::as_actor::type i_t; + typedef typename phoenix::as_actor::type j_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d), + phoenix::as_actor::convert(e), + phoenix::as_actor::convert(f), + phoenix::as_actor::convert(g), + phoenix::as_actor::convert(h), + phoenix::as_actor::convert(i), + phoenix::as_actor::convert(j) + ) + ); + } + + template < + typename A, typename B, typename C, typename D, typename E, + typename F, typename G, typename H, typename I, typename J, + typename K + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d, E const &e, + F const &f, G const &g, H const &h, I const &i, J const &j, + K const &k + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef typename phoenix::as_actor::type e_t; + typedef typename phoenix::as_actor::type f_t; + typedef typename phoenix::as_actor::type g_t; + typedef typename phoenix::as_actor::type h_t; + typedef typename phoenix::as_actor::type i_t; + typedef typename phoenix::as_actor::type j_t; + typedef typename phoenix::as_actor::type k_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t, + k_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d), + phoenix::as_actor::convert(e), + phoenix::as_actor::convert(f), + phoenix::as_actor::convert(g), + phoenix::as_actor::convert(h), + phoenix::as_actor::convert(i), + phoenix::as_actor::convert(j), + phoenix::as_actor::convert(k) + ) + ); + } + + template < + typename A, typename B, typename C, typename D, typename E, + typename F, typename G, typename H, typename I, typename J, + typename K, typename L + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d, E const &e, + F const &f, G const &g, H const &h, I const &i, J const &j, + K const &k, L const &l + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef typename phoenix::as_actor::type e_t; + typedef typename phoenix::as_actor::type f_t; + typedef typename phoenix::as_actor::type g_t; + typedef typename phoenix::as_actor::type h_t; + typedef typename phoenix::as_actor::type i_t; + typedef typename phoenix::as_actor::type j_t; + typedef typename phoenix::as_actor::type k_t; + typedef typename phoenix::as_actor::type l_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t, + k_t, l_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d), + phoenix::as_actor::convert(e), + phoenix::as_actor::convert(f), + phoenix::as_actor::convert(g), + phoenix::as_actor::convert(h), + phoenix::as_actor::convert(i), + phoenix::as_actor::convert(j), + phoenix::as_actor::convert(k), + phoenix::as_actor::convert(l) + ) + ); + } + + #if BOOST_SPIRIT_CLOSURE_LIMIT > 12 + + template < + typename A, typename B, typename C, typename D, typename E, + typename F, typename G, typename H, typename I, typename J, + typename K, typename L, typename M + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d, E const &e, + F const &f, G const &g, H const &h, I const &i, J const &j, + K const &k, L const &l, M const &m + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef typename phoenix::as_actor::type e_t; + typedef typename phoenix::as_actor::type f_t; + typedef typename phoenix::as_actor::type g_t; + typedef typename phoenix::as_actor::type h_t; + typedef typename phoenix::as_actor::type i_t; + typedef typename phoenix::as_actor::type j_t; + typedef typename phoenix::as_actor::type k_t; + typedef typename phoenix::as_actor::type l_t; + typedef typename phoenix::as_actor::type m_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t, + k_t, l_t, m_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d), + phoenix::as_actor::convert(e), + phoenix::as_actor::convert(f), + phoenix::as_actor::convert(g), + phoenix::as_actor::convert(h), + phoenix::as_actor::convert(i), + phoenix::as_actor::convert(j), + phoenix::as_actor::convert(k), + phoenix::as_actor::convert(l), + phoenix::as_actor::convert(m) + ) + ); + } + + template < + typename A, typename B, typename C, typename D, typename E, + typename F, typename G, typename H, typename I, typename J, + typename K, typename L, typename M, typename N + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d, E const &e, + F const &f, G const &g, H const &h, I const &i, J const &j, + K const &k, L const &l, M const &m, N const &n + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef typename phoenix::as_actor::type e_t; + typedef typename phoenix::as_actor::type f_t; + typedef typename phoenix::as_actor::type g_t; + typedef typename phoenix::as_actor::type h_t; + typedef typename phoenix::as_actor::type i_t; + typedef typename phoenix::as_actor::type j_t; + typedef typename phoenix::as_actor::type k_t; + typedef typename phoenix::as_actor::type l_t; + typedef typename phoenix::as_actor::type m_t; + typedef typename phoenix::as_actor::type n_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t, + k_t, l_t, m_t, n_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d), + phoenix::as_actor::convert(e), + phoenix::as_actor::convert(f), + phoenix::as_actor::convert(g), + phoenix::as_actor::convert(h), + phoenix::as_actor::convert(i), + phoenix::as_actor::convert(j), + phoenix::as_actor::convert(k), + phoenix::as_actor::convert(l), + phoenix::as_actor::convert(m), + phoenix::as_actor::convert(n) + ) + ); + } + + template < + typename A, typename B, typename C, typename D, typename E, + typename F, typename G, typename H, typename I, typename J, + typename K, typename L, typename M, typename N, typename O + > + init_closure_parser< + DerivedT2, + phoenix::tuple< + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type, + typename phoenix::as_actor::type + > + > + operator()( + A const &a, B const &b, C const &c, D const &d, E const &e, + F const &f, G const &g, H const &h, I const &i, J const &j, + K const &k, L const &l, M const &m, N const &n, O const &o + ) const + { + typedef typename phoenix::as_actor::type a_t; + typedef typename phoenix::as_actor::type b_t; + typedef typename phoenix::as_actor::type c_t; + typedef typename phoenix::as_actor::type d_t; + typedef typename phoenix::as_actor::type e_t; + typedef typename phoenix::as_actor::type f_t; + typedef typename phoenix::as_actor::type g_t; + typedef typename phoenix::as_actor::type h_t; + typedef typename phoenix::as_actor::type i_t; + typedef typename phoenix::as_actor::type j_t; + typedef typename phoenix::as_actor::type k_t; + typedef typename phoenix::as_actor::type l_t; + typedef typename phoenix::as_actor::type m_t; + typedef typename phoenix::as_actor::type n_t; + typedef typename phoenix::as_actor::type o_t; + typedef phoenix::tuple< + a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t, + k_t, l_t, m_t, n_t, o_t + > actor_tuple_t; + + return init_closure_parser( + aux_derived(), + actor_tuple_t( + phoenix::as_actor::convert(a), + phoenix::as_actor::convert(b), + phoenix::as_actor::convert(c), + phoenix::as_actor::convert(d), + phoenix::as_actor::convert(e), + phoenix::as_actor::convert(f), + phoenix::as_actor::convert(g), + phoenix::as_actor::convert(h), + phoenix::as_actor::convert(i), + phoenix::as_actor::convert(j), + phoenix::as_actor::convert(k), + phoenix::as_actor::convert(l), + phoenix::as_actor::convert(m), + phoenix::as_actor::convert(n), + phoenix::as_actor::convert(o) + ) + ); + } + + #endif + #endif + #endif + #endif + }; + + ~closure() {} + }; + + /////////////////////////////////////////////////////////////////////////// + // + // overloads for chseq_p and str_p taking in phoenix actors + // + /////////////////////////////////////////////////////////////////////////// + template + struct container_begin + { + typedef container_begin self_t; + + template + struct result + { + typedef typename phoenix::actor_result + ::plain_type::iterator type; + }; + + container_begin(ActorT actor_) + : actor(actor_) {} + + template + typename phoenix::actor_result::type + eval(TupleT const& /*args*/) const + { return actor().begin(); } + + ActorT actor; + }; + + template + struct container_end + { + typedef container_begin self_t; + + template + struct result + { + typedef typename phoenix::actor_result + ::plain_type::iterator type; + }; + + container_end(ActorT actor_) + : actor(actor_) {} + + template + typename phoenix::actor_result::type + eval(TupleT const& /*args*/) const + { return actor().end(); } + + ActorT actor; + }; + + template + inline f_chseq< + phoenix::actor > >, + phoenix::actor > > + > + f_chseq_p(phoenix::actor const& a) + { + typedef phoenix::actor > > + container_begin_t; + typedef phoenix::actor > > + container_end_t; + typedef f_chseq result_t; + + return result_t(container_begin_t(a), container_end_t(a)); + } + + template + inline f_strlit< + phoenix::actor > >, + phoenix::actor > > + > + f_str_p(phoenix::actor const& a) + { + typedef phoenix::actor > > + container_begin_t; + typedef phoenix::actor > > + container_end_t; + typedef f_strlit result_t; + + return result_t(container_begin_t(a), container_end_t(a)); + } + +}} // namespace boost::spirit + +#endif