Chris@16: /*============================================================================= Chris@16: Phoenix V1.2.1 Chris@16: Copyright (c) 2002 Joel de Guzman Chris@16: Copyright (c) 2002-2003 Hartmut Kaiser Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: ==============================================================================*/ Chris@16: #ifndef PHOENIX_TUPLEHELPERS_HPP Chris@16: #define PHOENIX_TUPLEHELPERS_HPP Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: #include Chris@16: #include Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: namespace phoenix Chris@16: { Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // make_tuple template class Chris@16: // Chris@16: // This template class is used to calculate a tuple type required to hold Chris@16: // the given template parameter type Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // normal (non-tuple types are wrapped into a tuple) Chris@16: template Chris@16: struct make_tuple { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // nil_t is converted to an empty tuple type Chris@16: template <> Chris@16: struct make_tuple { Chris@16: Chris@16: typedef tuple<> type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // tuple types are left alone without any refactoring Chris@16: template < Chris@16: typename A, typename B, typename C Chris@16: #if PHOENIX_LIMIT > 3 Chris@16: , typename D, typename E, typename F Chris@16: #if PHOENIX_LIMIT > 6 Chris@16: , typename G, typename H, typename I Chris@16: #if PHOENIX_LIMIT > 9 Chris@16: , typename J, typename K, typename L Chris@16: #if PHOENIX_LIMIT > 12 Chris@16: , typename M, typename N, typename O Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: > Chris@16: struct make_tuple 3 Chris@16: , D, E, F Chris@16: #if PHOENIX_LIMIT > 6 Chris@16: , G, H, I Chris@16: #if PHOENIX_LIMIT > 9 Chris@16: , J, K, L Chris@16: #if PHOENIX_LIMIT > 12 Chris@16: , M, N, O Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: > > { Chris@16: Chris@16: // the tuple parameter itself is the required tuple type Chris@16: typedef tuple 3 Chris@16: , D, E, F Chris@16: #if PHOENIX_LIMIT > 6 Chris@16: , G, H, I Chris@16: #if PHOENIX_LIMIT > 9 Chris@16: , J, K, L Chris@16: #if PHOENIX_LIMIT > 12 Chris@16: , M, N, O Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: > type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat_tuple type computer Chris@16: // Chris@16: // This class returns the type of a tuple, which is constructed by Chris@16: // concatenating a tuple with a given type Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct concat_tuple; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <0 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template <> Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple<> type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <1 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <2 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 3 Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <3 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <4 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <5 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 6 Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <6 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <7 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <8 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 9 Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <9 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <10 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I, typename J, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I, typename J Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <11 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I, typename J, typename K, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I, typename J, typename K Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 12 Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <12 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I, typename J, typename K, typename L, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I, typename J, typename K, typename L Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <13 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I, typename J, typename K, typename L, Chris@16: typename M, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I, typename J, typename K, typename L, Chris@16: typename M Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat tuple <14 member> class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I, typename J, typename K, typename L, Chris@16: typename M, typename N, Chris@16: typename AppendT Chris@16: > Chris@16: struct concat_tuple, AppendT> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, typename F, Chris@16: typename G, typename H, typename I, typename J, typename K, typename L, Chris@16: typename M, typename N Chris@16: > Chris@16: struct concat_tuple, nil_t> { Chris@16: Chris@16: typedef tuple type; Chris@16: }; Chris@16: Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // concat_tuples type computer Chris@16: // Chris@16: // This template class returns the type of a tuple built from the Chris@16: // concatenation of two given tuples. Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct concat_tuple_element { Chris@16: Chris@16: typedef Chris@16: typename concat_tuple_element< Chris@16: typename concat_tuple::type, TupleT2, N+1, Chris@16: typename tuple_element::type Chris@16: >::type Chris@16: type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct concat_tuple_element { Chris@16: Chris@16: typedef TupleT1 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct concat_tuples { Chris@16: Chris@16: typedef Chris@16: typename concat_tuple_element< Chris@16: TupleT1, TupleT2, 0, Chris@16: typename tuple_element<0, TupleT2>::type Chris@16: >::type Chris@16: type; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // convert_actors template function Chris@16: // Chris@16: // The convert_actors template functions constructs a new tuple object Chris@16: // composed of the elements returned by the actors contained in the Chris@16: // input tuple. (i.e. the given tuple type 'actor_tuple' contains a set Chris@16: // of actors to evaluate and the resulting tuple contains the results of Chris@16: // evaluating the actors.) Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct actor_result; // forward declaration Chris@16: Chris@16: namespace impl Chris@16: { Chris@16: template Chris@16: struct convert_actors_ {}; Chris@16: } Chris@16: Chris@16: template Chris@16: TupleResultT Chris@16: convert_actors(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length); Chris@16: BOOST_STATIC_CONSTANT(int, length = TupleResultT::length); Chris@16: return impl::convert_actors_ Chris@16: ::template apply::do_(actor_tuple); Chris@16: } Chris@16: Chris@16: namespace impl Chris@16: { Chris@16: template Chris@16: struct convert_actor Chris@16: { Chris@16: typedef typename tuple_element::type type; Chris@16: Chris@16: template Chris@16: struct is_default_t {}; Chris@16: typedef is_default_t is_default; Chris@16: typedef is_default_t is_not_default; Chris@16: Chris@16: static type Chris@16: actor_element(ActorTupleT const& /*actor_tuple*/, is_default) Chris@16: { Chris@16: return type(); // default construct Chris@16: } Chris@16: Chris@16: static type Chris@16: actor_element(ActorTupleT const& actor_tuple, is_not_default) Chris@16: { Chris@16: BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length); Chris@16: return actor_tuple[tuple_index()](); // apply the actor Chris@16: } Chris@16: Chris@16: static type Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: return actor_element( Chris@16: actor_tuple, is_default_t<(N >= ActorTupleT::length)>()); Chris@16: } Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<1> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<2> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<3> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 3 Chris@16: Chris@16: ///////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<4> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: ///////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<5> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: , converter4::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: ///////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<6> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4; Chris@16: typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: , converter4::do_(actor_tuple) Chris@16: , converter5::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 6 Chris@16: Chris@16: ///////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<7> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4; Chris@16: typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5; Chris@16: typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: , converter4::do_(actor_tuple) Chris@16: , converter5::do_(actor_tuple) Chris@16: , converter6::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: ///////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<8> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4; Chris@16: typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5; Chris@16: typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6; Chris@16: typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: , converter4::do_(actor_tuple) Chris@16: , converter5::do_(actor_tuple) Chris@16: , converter6::do_(actor_tuple) Chris@16: , converter7::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: ///////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<9> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4; Chris@16: typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5; Chris@16: typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6; Chris@16: typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7; Chris@16: typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: , converter4::do_(actor_tuple) Chris@16: , converter5::do_(actor_tuple) Chris@16: , converter6::do_(actor_tuple) Chris@16: , converter7::do_(actor_tuple) Chris@16: , converter8::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 9 Chris@16: Chris@16: ///////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<10> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4; Chris@16: typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5; Chris@16: typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6; Chris@16: typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7; Chris@16: typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8; Chris@16: typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: , converter4::do_(actor_tuple) Chris@16: , converter5::do_(actor_tuple) Chris@16: , converter6::do_(actor_tuple) Chris@16: , converter7::do_(actor_tuple) Chris@16: , converter8::do_(actor_tuple) Chris@16: , converter9::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: ///////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<11> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4; Chris@16: typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5; Chris@16: typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6; Chris@16: typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7; Chris@16: typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8; Chris@16: typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9; Chris@16: typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: , converter4::do_(actor_tuple) Chris@16: , converter5::do_(actor_tuple) Chris@16: , converter6::do_(actor_tuple) Chris@16: , converter7::do_(actor_tuple) Chris@16: , converter8::do_(actor_tuple) Chris@16: , converter9::do_(actor_tuple) Chris@16: , converter10::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: ///////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<12> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4; Chris@16: typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5; Chris@16: typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6; Chris@16: typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7; Chris@16: typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8; Chris@16: typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9; Chris@16: typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10; Chris@16: typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: , converter4::do_(actor_tuple) Chris@16: , converter5::do_(actor_tuple) Chris@16: , converter6::do_(actor_tuple) Chris@16: , converter7::do_(actor_tuple) Chris@16: , converter8::do_(actor_tuple) Chris@16: , converter9::do_(actor_tuple) Chris@16: , converter10::do_(actor_tuple) Chris@16: , converter11::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 12 Chris@16: Chris@16: ///////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<13> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4; Chris@16: typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5; Chris@16: typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6; Chris@16: typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7; Chris@16: typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8; Chris@16: typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9; Chris@16: typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10; Chris@16: typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11; Chris@16: typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: , converter4::do_(actor_tuple) Chris@16: , converter5::do_(actor_tuple) Chris@16: , converter6::do_(actor_tuple) Chris@16: , converter7::do_(actor_tuple) Chris@16: , converter8::do_(actor_tuple) Chris@16: , converter9::do_(actor_tuple) Chris@16: , converter10::do_(actor_tuple) Chris@16: , converter11::do_(actor_tuple) Chris@16: , converter12::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<14> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4; Chris@16: typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5; Chris@16: typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6; Chris@16: typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7; Chris@16: typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8; Chris@16: typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9; Chris@16: typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10; Chris@16: typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11; Chris@16: typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12; Chris@16: typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: , converter4::do_(actor_tuple) Chris@16: , converter5::do_(actor_tuple) Chris@16: , converter6::do_(actor_tuple) Chris@16: , converter7::do_(actor_tuple) Chris@16: , converter8::do_(actor_tuple) Chris@16: , converter9::do_(actor_tuple) Chris@16: , converter10::do_(actor_tuple) Chris@16: , converter11::do_(actor_tuple) Chris@16: , converter12::do_(actor_tuple) Chris@16: , converter13::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////// Chris@16: template <> Chris@16: struct convert_actors_<15> Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: static TupleResultT Chris@16: do_(ActorTupleT const& actor_tuple) Chris@16: { Chris@16: typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0; Chris@16: typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1; Chris@16: typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2; Chris@16: typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3; Chris@16: typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4; Chris@16: typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5; Chris@16: typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6; Chris@16: typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7; Chris@16: typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8; Chris@16: typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9; Chris@16: typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10; Chris@16: typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11; Chris@16: typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12; Chris@16: typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13; Chris@16: typedef impl::convert_actor<14, TupleResultT, ActorTupleT> converter14; Chris@16: Chris@16: using namespace tuple_index_names; Chris@16: return TupleResultT( Chris@16: converter0::do_(actor_tuple) Chris@16: , converter1::do_(actor_tuple) Chris@16: , converter2::do_(actor_tuple) Chris@16: , converter3::do_(actor_tuple) Chris@16: , converter4::do_(actor_tuple) Chris@16: , converter5::do_(actor_tuple) Chris@16: , converter6::do_(actor_tuple) Chris@16: , converter7::do_(actor_tuple) Chris@16: , converter8::do_(actor_tuple) Chris@16: , converter9::do_(actor_tuple) Chris@16: , converter10::do_(actor_tuple) Chris@16: , converter11::do_(actor_tuple) Chris@16: , converter12::do_(actor_tuple) Chris@16: , converter13::do_(actor_tuple) Chris@16: , converter14::do_(actor_tuple) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: } // namespace impl Chris@16: Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: } // namespace phoenix Chris@16: Chris@16: #endif // PHOENIX_TUPLEHELPERS_HPP