467 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			467 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|     ///////////////////////////////////////////////////////////////////////////////
 | |
|     /// \file make_expr_.hpp
 | |
|     /// Contains definition of make_expr_\<\> class template.
 | |
|     //
 | |
|     //  Copyright 2008 Eric Niebler. Distributed under 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)
 | |
|     template<typename Tag, typename Domain, typename Sequence, std::size_t Size>
 | |
|     struct unpack_expr_
 | |
|     {};
 | |
|     template<typename Domain, typename Sequence>
 | |
|     struct unpack_expr_<tag::terminal, Domain, Sequence, 1u>
 | |
|     {
 | |
|         typedef
 | |
|             typename add_const<
 | |
|                 typename fusion::result_of::value_of<
 | |
|                     typename fusion::result_of::begin<Sequence>::type
 | |
|                 >::type
 | |
|             >::type
 | |
|         terminal_type;
 | |
|         typedef
 | |
|             typename proto::detail::protoify<
 | |
|                 terminal_type
 | |
|               , Domain
 | |
|             >::result_type
 | |
|         type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             return proto::detail::protoify<terminal_type, Domain>()(fusion::at_c<0>(sequence));
 | |
|         }
 | |
|     };
 | |
|     template<typename Sequence>
 | |
|     struct unpack_expr_<tag::terminal, deduce_domain, Sequence, 1u>
 | |
|       : unpack_expr_<tag::terminal, default_domain, Sequence, 1u>
 | |
|     {};
 | |
|     template<typename Tag, typename Domain, typename Sequence>
 | |
|     struct unpack_expr_<Tag, Domain, Sequence, 1>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0;
 | |
|         typedef
 | |
|             list1<
 | |
|                 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type
 | |
|             >
 | |
|         proto_args;
 | |
|         typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
 | |
|         typedef typename Domain::proto_generator proto_generator;
 | |
|         typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             fusion_iterator0 it0 = fusion::begin(sequence);
 | |
|             expr_type const that = {
 | |
|                 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0)
 | |
|             };
 | |
|             return proto_generator()(that);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Sequence>
 | |
|     struct unpack_expr_<Tag, deduce_domain, Sequence, 1>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0;
 | |
|         typedef
 | |
|             unpack_expr_<
 | |
|                 Tag
 | |
|               , typename deduce_domain1<
 | |
|                     typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type
 | |
|                 >::type
 | |
|               , Sequence
 | |
|               , 1
 | |
|             >
 | |
|         other;
 | |
|         typedef typename other::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             return other::call(sequence);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Domain, typename Sequence>
 | |
|     struct unpack_expr_<Tag, Domain, Sequence, 2>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1;
 | |
|         typedef
 | |
|             list2<
 | |
|                 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type
 | |
|             >
 | |
|         proto_args;
 | |
|         typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
 | |
|         typedef typename Domain::proto_generator proto_generator;
 | |
|         typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0);
 | |
|             expr_type const that = {
 | |
|                 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1)
 | |
|             };
 | |
|             return proto_generator()(that);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Sequence>
 | |
|     struct unpack_expr_<Tag, deduce_domain, Sequence, 2>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1;
 | |
|         typedef
 | |
|             unpack_expr_<
 | |
|                 Tag
 | |
|               , typename deduce_domain2<
 | |
|                     typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type
 | |
|                 >::type
 | |
|               , Sequence
 | |
|               , 2
 | |
|             >
 | |
|         other;
 | |
|         typedef typename other::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             return other::call(sequence);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Domain, typename Sequence>
 | |
|     struct unpack_expr_<Tag, Domain, Sequence, 3>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2;
 | |
|         typedef
 | |
|             list3<
 | |
|                 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type
 | |
|             >
 | |
|         proto_args;
 | |
|         typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
 | |
|         typedef typename Domain::proto_generator proto_generator;
 | |
|         typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1);
 | |
|             expr_type const that = {
 | |
|                 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2)
 | |
|             };
 | |
|             return proto_generator()(that);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Sequence>
 | |
|     struct unpack_expr_<Tag, deduce_domain, Sequence, 3>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2;
 | |
|         typedef
 | |
|             unpack_expr_<
 | |
|                 Tag
 | |
|               , typename deduce_domain3<
 | |
|                     typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type
 | |
|                 >::type
 | |
|               , Sequence
 | |
|               , 3
 | |
|             >
 | |
|         other;
 | |
|         typedef typename other::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             return other::call(sequence);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Domain, typename Sequence>
 | |
|     struct unpack_expr_<Tag, Domain, Sequence, 4>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3;
 | |
|         typedef
 | |
|             list4<
 | |
|                 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type
 | |
|             >
 | |
|         proto_args;
 | |
|         typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
 | |
|         typedef typename Domain::proto_generator proto_generator;
 | |
|         typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2);
 | |
|             expr_type const that = {
 | |
|                 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3)
 | |
|             };
 | |
|             return proto_generator()(that);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Sequence>
 | |
|     struct unpack_expr_<Tag, deduce_domain, Sequence, 4>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3;
 | |
|         typedef
 | |
|             unpack_expr_<
 | |
|                 Tag
 | |
|               , typename deduce_domain4<
 | |
|                     typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type
 | |
|                 >::type
 | |
|               , Sequence
 | |
|               , 4
 | |
|             >
 | |
|         other;
 | |
|         typedef typename other::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             return other::call(sequence);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Domain, typename Sequence>
 | |
|     struct unpack_expr_<Tag, Domain, Sequence, 5>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4;
 | |
|         typedef
 | |
|             list5<
 | |
|                 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type
 | |
|             >
 | |
|         proto_args;
 | |
|         typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
 | |
|         typedef typename Domain::proto_generator proto_generator;
 | |
|         typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3);
 | |
|             expr_type const that = {
 | |
|                 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4)
 | |
|             };
 | |
|             return proto_generator()(that);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Sequence>
 | |
|     struct unpack_expr_<Tag, deduce_domain, Sequence, 5>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4;
 | |
|         typedef
 | |
|             unpack_expr_<
 | |
|                 Tag
 | |
|               , typename deduce_domain5<
 | |
|                     typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type
 | |
|                 >::type
 | |
|               , Sequence
 | |
|               , 5
 | |
|             >
 | |
|         other;
 | |
|         typedef typename other::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             return other::call(sequence);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Domain, typename Sequence>
 | |
|     struct unpack_expr_<Tag, Domain, Sequence, 6>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5;
 | |
|         typedef
 | |
|             list6<
 | |
|                 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type
 | |
|             >
 | |
|         proto_args;
 | |
|         typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
 | |
|         typedef typename Domain::proto_generator proto_generator;
 | |
|         typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4);
 | |
|             expr_type const that = {
 | |
|                 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5)
 | |
|             };
 | |
|             return proto_generator()(that);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Sequence>
 | |
|     struct unpack_expr_<Tag, deduce_domain, Sequence, 6>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5;
 | |
|         typedef
 | |
|             unpack_expr_<
 | |
|                 Tag
 | |
|               , typename deduce_domain6<
 | |
|                     typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type
 | |
|                 >::type
 | |
|               , Sequence
 | |
|               , 6
 | |
|             >
 | |
|         other;
 | |
|         typedef typename other::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             return other::call(sequence);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Domain, typename Sequence>
 | |
|     struct unpack_expr_<Tag, Domain, Sequence, 7>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6;
 | |
|         typedef
 | |
|             list7<
 | |
|                 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type
 | |
|             >
 | |
|         proto_args;
 | |
|         typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
 | |
|         typedef typename Domain::proto_generator proto_generator;
 | |
|         typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5);
 | |
|             expr_type const that = {
 | |
|                 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6)
 | |
|             };
 | |
|             return proto_generator()(that);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Sequence>
 | |
|     struct unpack_expr_<Tag, deduce_domain, Sequence, 7>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6;
 | |
|         typedef
 | |
|             unpack_expr_<
 | |
|                 Tag
 | |
|               , typename deduce_domain7<
 | |
|                     typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type
 | |
|                 >::type
 | |
|               , Sequence
 | |
|               , 7
 | |
|             >
 | |
|         other;
 | |
|         typedef typename other::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             return other::call(sequence);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Domain, typename Sequence>
 | |
|     struct unpack_expr_<Tag, Domain, Sequence, 8>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7;
 | |
|         typedef
 | |
|             list8<
 | |
|                 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >::result_type
 | |
|             >
 | |
|         proto_args;
 | |
|         typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
 | |
|         typedef typename Domain::proto_generator proto_generator;
 | |
|         typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5); fusion_iterator7 it7 = fusion::next(it6);
 | |
|             expr_type const that = {
 | |
|                 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >()(*it7)
 | |
|             };
 | |
|             return proto_generator()(that);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Sequence>
 | |
|     struct unpack_expr_<Tag, deduce_domain, Sequence, 8>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7;
 | |
|         typedef
 | |
|             unpack_expr_<
 | |
|                 Tag
 | |
|               , typename deduce_domain8<
 | |
|                     typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type
 | |
|                 >::type
 | |
|               , Sequence
 | |
|               , 8
 | |
|             >
 | |
|         other;
 | |
|         typedef typename other::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             return other::call(sequence);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Domain, typename Sequence>
 | |
|     struct unpack_expr_<Tag, Domain, Sequence, 9>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8;
 | |
|         typedef
 | |
|             list9<
 | |
|                 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >::result_type
 | |
|             >
 | |
|         proto_args;
 | |
|         typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
 | |
|         typedef typename Domain::proto_generator proto_generator;
 | |
|         typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5); fusion_iterator7 it7 = fusion::next(it6); fusion_iterator8 it8 = fusion::next(it7);
 | |
|             expr_type const that = {
 | |
|                 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >()(*it7) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >()(*it8)
 | |
|             };
 | |
|             return proto_generator()(that);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Sequence>
 | |
|     struct unpack_expr_<Tag, deduce_domain, Sequence, 9>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8;
 | |
|         typedef
 | |
|             unpack_expr_<
 | |
|                 Tag
 | |
|               , typename deduce_domain9<
 | |
|                     typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type
 | |
|                 >::type
 | |
|               , Sequence
 | |
|               , 9
 | |
|             >
 | |
|         other;
 | |
|         typedef typename other::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             return other::call(sequence);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Domain, typename Sequence>
 | |
|     struct unpack_expr_<Tag, Domain, Sequence, 10>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8; typedef typename fusion::result_of::next< fusion_iterator8>::type fusion_iterator9;
 | |
|         typedef
 | |
|             list10<
 | |
|                 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator9 >::type >::type , Domain >::result_type
 | |
|             >
 | |
|         proto_args;
 | |
|         typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
 | |
|         typedef typename Domain::proto_generator proto_generator;
 | |
|         typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5); fusion_iterator7 it7 = fusion::next(it6); fusion_iterator8 it8 = fusion::next(it7); fusion_iterator9 it9 = fusion::next(it8);
 | |
|             expr_type const that = {
 | |
|                 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >()(*it7) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >()(*it8) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator9 >::type >::type , Domain >()(*it9)
 | |
|             };
 | |
|             return proto_generator()(that);
 | |
|         }
 | |
|     };
 | |
|     template<typename Tag, typename Sequence>
 | |
|     struct unpack_expr_<Tag, deduce_domain, Sequence, 10>
 | |
|     {
 | |
|         typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8; typedef typename fusion::result_of::next< fusion_iterator8>::type fusion_iterator9;
 | |
|         typedef
 | |
|             unpack_expr_<
 | |
|                 Tag
 | |
|               , typename deduce_domain10<
 | |
|                     typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator9 >::type >::type
 | |
|                 >::type
 | |
|               , Sequence
 | |
|               , 10
 | |
|             >
 | |
|         other;
 | |
|         typedef typename other::type type;
 | |
|         BOOST_FORCEINLINE
 | |
|         static type const call(Sequence const &sequence)
 | |
|         {
 | |
|             return other::call(sequence);
 | |
|         }
 | |
|     };
 | 
