388 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			388 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   |     /////////////////////////////////////////////////////////////////////////////// | ||
|  |     /// \file fold_impl.hpp | ||
|  |     /// Contains definition of fold_impl<> and reverse_fold_impl<> templates. | ||
|  |     // | ||
|  |     //  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 State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct fold_impl<State0, Fun, Expr, State, Data, 1> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >::result_type state1; | ||
|  |         typedef state1 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename fold_impl::expr_param e | ||
|  |           , typename fold_impl::state_param s | ||
|  |           , typename fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state0 s0 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >()( proto::child_c< 0>(e) , s0 , d ); | ||
|  |             return s1; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct reverse_fold_impl<State0, Fun, Expr, State, Data, 1> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state1; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >::result_type state0; | ||
|  |         typedef state0 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename reverse_fold_impl::expr_param e | ||
|  |           , typename reverse_fold_impl::state_param s | ||
|  |           , typename reverse_fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state1 s1 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state0 s0 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >()( proto::child_c<0>(e) , s1 , d ); | ||
|  |             return s0; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct fold_impl<State0, Fun, Expr, State, Data, 2> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >::result_type state2; | ||
|  |         typedef state2 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename fold_impl::expr_param e | ||
|  |           , typename fold_impl::state_param s | ||
|  |           , typename fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state0 s0 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >()( proto::child_c< 0>(e) , s0 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >()( proto::child_c< 1>(e) , s1 , d ); | ||
|  |             return s2; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct reverse_fold_impl<State0, Fun, Expr, State, Data, 2> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state2; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >::result_type state0; | ||
|  |         typedef state0 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename reverse_fold_impl::expr_param e | ||
|  |           , typename reverse_fold_impl::state_param s | ||
|  |           , typename reverse_fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state2 s2 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >()( proto::child_c<1>(e) , s2 , d ); state0 s0 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >()( proto::child_c<0>(e) , s1 , d ); | ||
|  |             return s0; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct fold_impl<State0, Fun, Expr, State, Data, 3> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >::result_type state3; | ||
|  |         typedef state3 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename fold_impl::expr_param e | ||
|  |           , typename fold_impl::state_param s | ||
|  |           , typename fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state0 s0 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >()( proto::child_c< 0>(e) , s0 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >()( proto::child_c< 1>(e) , s1 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >()( proto::child_c< 2>(e) , s2 , d ); | ||
|  |             return s3; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct reverse_fold_impl<State0, Fun, Expr, State, Data, 3> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state3; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >::result_type state0; | ||
|  |         typedef state0 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename reverse_fold_impl::expr_param e | ||
|  |           , typename reverse_fold_impl::state_param s | ||
|  |           , typename reverse_fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state3 s3 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >()( proto::child_c<2>(e) , s3 , d ); state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >()( proto::child_c<1>(e) , s2 , d ); state0 s0 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >()( proto::child_c<0>(e) , s1 , d ); | ||
|  |             return s0; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct fold_impl<State0, Fun, Expr, State, Data, 4> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >::result_type state4; | ||
|  |         typedef state4 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename fold_impl::expr_param e | ||
|  |           , typename fold_impl::state_param s | ||
|  |           , typename fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state0 s0 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >()( proto::child_c< 0>(e) , s0 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >()( proto::child_c< 1>(e) , s1 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >()( proto::child_c< 2>(e) , s2 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >()( proto::child_c< 3>(e) , s3 , d ); | ||
|  |             return s4; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct reverse_fold_impl<State0, Fun, Expr, State, Data, 4> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state4; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >::result_type state0; | ||
|  |         typedef state0 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename reverse_fold_impl::expr_param e | ||
|  |           , typename reverse_fold_impl::state_param s | ||
|  |           , typename reverse_fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state4 s4 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >()( proto::child_c<3>(e) , s4 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >()( proto::child_c<2>(e) , s3 , d ); state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >()( proto::child_c<1>(e) , s2 , d ); state0 s0 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >()( proto::child_c<0>(e) , s1 , d ); | ||
|  |             return s0; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct fold_impl<State0, Fun, Expr, State, Data, 5> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >::result_type state5; | ||
|  |         typedef state5 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename fold_impl::expr_param e | ||
|  |           , typename fold_impl::state_param s | ||
|  |           , typename fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state0 s0 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >()( proto::child_c< 0>(e) , s0 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >()( proto::child_c< 1>(e) , s1 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >()( proto::child_c< 2>(e) , s2 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >()( proto::child_c< 3>(e) , s3 , d ); state5 s5 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >()( proto::child_c< 4>(e) , s4 , d ); | ||
|  |             return s5; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct reverse_fold_impl<State0, Fun, Expr, State, Data, 5> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state5; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >::result_type state0; | ||
|  |         typedef state0 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename reverse_fold_impl::expr_param e | ||
|  |           , typename reverse_fold_impl::state_param s | ||
|  |           , typename reverse_fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state5 s5 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >()( proto::child_c<4>(e) , s5 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >()( proto::child_c<3>(e) , s4 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >()( proto::child_c<2>(e) , s3 , d ); state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >()( proto::child_c<1>(e) , s2 , d ); state0 s0 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >()( proto::child_c<0>(e) , s1 , d ); | ||
|  |             return s0; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct fold_impl<State0, Fun, Expr, State, Data, 6> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >::result_type state5; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 5>::type , state5 , Data >::result_type state6; | ||
|  |         typedef state6 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename fold_impl::expr_param e | ||
|  |           , typename fold_impl::state_param s | ||
|  |           , typename fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state0 s0 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >()( proto::child_c< 0>(e) , s0 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >()( proto::child_c< 1>(e) , s1 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >()( proto::child_c< 2>(e) , s2 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >()( proto::child_c< 3>(e) , s3 , d ); state5 s5 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >()( proto::child_c< 4>(e) , s4 , d ); state6 s6 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 5>::type , state5 , Data >()( proto::child_c< 5>(e) , s5 , d ); | ||
|  |             return s6; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct reverse_fold_impl<State0, Fun, Expr, State, Data, 6> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state6; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 5 >::type , state6 , Data >::result_type state5; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >::result_type state0; | ||
|  |         typedef state0 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename reverse_fold_impl::expr_param e | ||
|  |           , typename reverse_fold_impl::state_param s | ||
|  |           , typename reverse_fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state6 s6 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state5 s5 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 5 >::type , state6 , Data >()( proto::child_c<5>(e) , s6 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >()( proto::child_c<4>(e) , s5 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >()( proto::child_c<3>(e) , s4 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >()( proto::child_c<2>(e) , s3 , d ); state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >()( proto::child_c<1>(e) , s2 , d ); state0 s0 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >()( proto::child_c<0>(e) , s1 , d ); | ||
|  |             return s0; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct fold_impl<State0, Fun, Expr, State, Data, 7> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >::result_type state5; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 5>::type , state5 , Data >::result_type state6; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 6>::type , state6 , Data >::result_type state7; | ||
|  |         typedef state7 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename fold_impl::expr_param e | ||
|  |           , typename fold_impl::state_param s | ||
|  |           , typename fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state0 s0 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >()( proto::child_c< 0>(e) , s0 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >()( proto::child_c< 1>(e) , s1 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >()( proto::child_c< 2>(e) , s2 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >()( proto::child_c< 3>(e) , s3 , d ); state5 s5 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >()( proto::child_c< 4>(e) , s4 , d ); state6 s6 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 5>::type , state5 , Data >()( proto::child_c< 5>(e) , s5 , d ); state7 s7 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 6>::type , state6 , Data >()( proto::child_c< 6>(e) , s6 , d ); | ||
|  |             return s7; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct reverse_fold_impl<State0, Fun, Expr, State, Data, 7> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state7; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 6 >::type , state7 , Data >::result_type state6; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 5 >::type , state6 , Data >::result_type state5; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >::result_type state0; | ||
|  |         typedef state0 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename reverse_fold_impl::expr_param e | ||
|  |           , typename reverse_fold_impl::state_param s | ||
|  |           , typename reverse_fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state7 s7 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state6 s6 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 6 >::type , state7 , Data >()( proto::child_c<6>(e) , s7 , d ); state5 s5 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 5 >::type , state6 , Data >()( proto::child_c<5>(e) , s6 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >()( proto::child_c<4>(e) , s5 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >()( proto::child_c<3>(e) , s4 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >()( proto::child_c<2>(e) , s3 , d ); state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >()( proto::child_c<1>(e) , s2 , d ); state0 s0 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >()( proto::child_c<0>(e) , s1 , d ); | ||
|  |             return s0; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct fold_impl<State0, Fun, Expr, State, Data, 8> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >::result_type state5; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 5>::type , state5 , Data >::result_type state6; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 6>::type , state6 , Data >::result_type state7; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 7>::type , state7 , Data >::result_type state8; | ||
|  |         typedef state8 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename fold_impl::expr_param e | ||
|  |           , typename fold_impl::state_param s | ||
|  |           , typename fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state0 s0 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >()( proto::child_c< 0>(e) , s0 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >()( proto::child_c< 1>(e) , s1 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >()( proto::child_c< 2>(e) , s2 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >()( proto::child_c< 3>(e) , s3 , d ); state5 s5 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >()( proto::child_c< 4>(e) , s4 , d ); state6 s6 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 5>::type , state5 , Data >()( proto::child_c< 5>(e) , s5 , d ); state7 s7 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 6>::type , state6 , Data >()( proto::child_c< 6>(e) , s6 , d ); state8 s8 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 7>::type , state7 , Data >()( proto::child_c< 7>(e) , s7 , d ); | ||
|  |             return s8; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct reverse_fold_impl<State0, Fun, Expr, State, Data, 8> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state8; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 7 >::type , state8 , Data >::result_type state7; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 6 >::type , state7 , Data >::result_type state6; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 5 >::type , state6 , Data >::result_type state5; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >::result_type state0; | ||
|  |         typedef state0 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename reverse_fold_impl::expr_param e | ||
|  |           , typename reverse_fold_impl::state_param s | ||
|  |           , typename reverse_fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state8 s8 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state7 s7 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 7 >::type , state8 , Data >()( proto::child_c<7>(e) , s8 , d ); state6 s6 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 6 >::type , state7 , Data >()( proto::child_c<6>(e) , s7 , d ); state5 s5 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 5 >::type , state6 , Data >()( proto::child_c<5>(e) , s6 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >()( proto::child_c<4>(e) , s5 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >()( proto::child_c<3>(e) , s4 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >()( proto::child_c<2>(e) , s3 , d ); state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >()( proto::child_c<1>(e) , s2 , d ); state0 s0 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >()( proto::child_c<0>(e) , s1 , d ); | ||
|  |             return s0; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct fold_impl<State0, Fun, Expr, State, Data, 9> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >::result_type state5; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 5>::type , state5 , Data >::result_type state6; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 6>::type , state6 , Data >::result_type state7; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 7>::type , state7 , Data >::result_type state8; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 8>::type , state8 , Data >::result_type state9; | ||
|  |         typedef state9 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename fold_impl::expr_param e | ||
|  |           , typename fold_impl::state_param s | ||
|  |           , typename fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state0 s0 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >()( proto::child_c< 0>(e) , s0 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >()( proto::child_c< 1>(e) , s1 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >()( proto::child_c< 2>(e) , s2 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >()( proto::child_c< 3>(e) , s3 , d ); state5 s5 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >()( proto::child_c< 4>(e) , s4 , d ); state6 s6 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 5>::type , state5 , Data >()( proto::child_c< 5>(e) , s5 , d ); state7 s7 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 6>::type , state6 , Data >()( proto::child_c< 6>(e) , s6 , d ); state8 s8 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 7>::type , state7 , Data >()( proto::child_c< 7>(e) , s7 , d ); state9 s9 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 8>::type , state8 , Data >()( proto::child_c< 8>(e) , s8 , d ); | ||
|  |             return s9; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct reverse_fold_impl<State0, Fun, Expr, State, Data, 9> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state9; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 8 >::type , state9 , Data >::result_type state8; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 7 >::type , state8 , Data >::result_type state7; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 6 >::type , state7 , Data >::result_type state6; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 5 >::type , state6 , Data >::result_type state5; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >::result_type state0; | ||
|  |         typedef state0 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename reverse_fold_impl::expr_param e | ||
|  |           , typename reverse_fold_impl::state_param s | ||
|  |           , typename reverse_fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state9 s9 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state8 s8 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 8 >::type , state9 , Data >()( proto::child_c<8>(e) , s9 , d ); state7 s7 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 7 >::type , state8 , Data >()( proto::child_c<7>(e) , s8 , d ); state6 s6 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 6 >::type , state7 , Data >()( proto::child_c<6>(e) , s7 , d ); state5 s5 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 5 >::type , state6 , Data >()( proto::child_c<5>(e) , s6 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >()( proto::child_c<4>(e) , s5 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >()( proto::child_c<3>(e) , s4 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >()( proto::child_c<2>(e) , s3 , d ); state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >()( proto::child_c<1>(e) , s2 , d ); state0 s0 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >()( proto::child_c<0>(e) , s1 , d ); | ||
|  |             return s0; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct fold_impl<State0, Fun, Expr, State, Data, 10> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >::result_type state5; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 5>::type , state5 , Data >::result_type state6; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 6>::type , state6 , Data >::result_type state7; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 7>::type , state7 , Data >::result_type state8; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 8>::type , state8 , Data >::result_type state9; typedef typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 9>::type , state9 , Data >::result_type state10; | ||
|  |         typedef state10 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename fold_impl::expr_param e | ||
|  |           , typename fold_impl::state_param s | ||
|  |           , typename fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state0 s0 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 0>::type , state0 , Data >()( proto::child_c< 0>(e) , s0 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 1>::type , state1 , Data >()( proto::child_c< 1>(e) , s1 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 2>::type , state2 , Data >()( proto::child_c< 2>(e) , s2 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 3>::type , state3 , Data >()( proto::child_c< 3>(e) , s3 , d ); state5 s5 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 4>::type , state4 , Data >()( proto::child_c< 4>(e) , s4 , d ); state6 s6 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 5>::type , state5 , Data >()( proto::child_c< 5>(e) , s5 , d ); state7 s7 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 6>::type , state6 , Data >()( proto::child_c< 6>(e) , s6 , d ); state8 s8 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 7>::type , state7 , Data >()( proto::child_c< 7>(e) , s7 , d ); state9 s9 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 8>::type , state8 , Data >()( proto::child_c< 8>(e) , s8 , d ); state10 s10 = typename when<_, Fun>::template impl< typename result_of::child_c<Expr, 9>::type , state9 , Data >()( proto::child_c< 9>(e) , s9 , d ); | ||
|  |             return s10; | ||
|  |         } | ||
|  |     }; | ||
|  |     template<typename State0, typename Fun, typename Expr, typename State, typename Data> | ||
|  |     struct reverse_fold_impl<State0, Fun, Expr, State, Data, 10> | ||
|  |       : transform_impl<Expr, State, Data> | ||
|  |     { | ||
|  |         typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state10; | ||
|  |         typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 9 >::type , state10 , Data >::result_type state9; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 8 >::type , state9 , Data >::result_type state8; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 7 >::type , state8 , Data >::result_type state7; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 6 >::type , state7 , Data >::result_type state6; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 5 >::type , state6 , Data >::result_type state5; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >::result_type state4; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >::result_type state3; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >::result_type state2; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >::result_type state1; typedef typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >::result_type state0; | ||
|  |         typedef state0 result_type; | ||
|  |         result_type operator ()( | ||
|  |             typename reverse_fold_impl::expr_param e | ||
|  |           , typename reverse_fold_impl::state_param s | ||
|  |           , typename reverse_fold_impl::data_param d | ||
|  |         ) const | ||
|  |         { | ||
|  |             state10 s10 = | ||
|  |                 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d); | ||
|  |             state9 s9 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 9 >::type , state10 , Data >()( proto::child_c<9>(e) , s10 , d ); state8 s8 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 8 >::type , state9 , Data >()( proto::child_c<8>(e) , s9 , d ); state7 s7 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 7 >::type , state8 , Data >()( proto::child_c<7>(e) , s8 , d ); state6 s6 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 6 >::type , state7 , Data >()( proto::child_c<6>(e) , s7 , d ); state5 s5 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 5 >::type , state6 , Data >()( proto::child_c<5>(e) , s6 , d ); state4 s4 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 4 >::type , state5 , Data >()( proto::child_c<4>(e) , s5 , d ); state3 s3 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 3 >::type , state4 , Data >()( proto::child_c<3>(e) , s4 , d ); state2 s2 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 2 >::type , state3 , Data >()( proto::child_c<2>(e) , s3 , d ); state1 s1 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 1 >::type , state2 , Data >()( proto::child_c<1>(e) , s2 , d ); state0 s0 = typename when<_, Fun>::template impl< typename result_of::child_c< Expr , 0 >::type , state1 , Data >()( proto::child_c<0>(e) , s1 , d ); | ||
|  |             return s0; | ||
|  |         } | ||
|  |     }; |