584 lines
		
	
	
		
			61 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			584 lines
		
	
	
		
			61 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/*==============================================================================
 | 
						|
    Copyright (c) 2005-2010 Joel de Guzman
 | 
						|
    Copyright (c) 2010 Thomas Heller
 | 
						|
 | 
						|
    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 Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<2>
 | 
						|
              , mpl::false_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<2>
 | 
						|
              , mpl::true_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                    default:
 | 
						|
                        boost::phoenix::eval(
 | 
						|
                            proto::child_c<0>(
 | 
						|
                                fusion::deref(
 | 
						|
                                    fusion::advance_c<
 | 
						|
                                        1
 | 
						|
                                    >(fusion::begin(flat_view))
 | 
						|
                                )
 | 
						|
                            )
 | 
						|
                            , ctx
 | 
						|
                        );
 | 
						|
                }
 | 
						|
            }
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<3>
 | 
						|
              , mpl::false_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<3>
 | 
						|
              , mpl::true_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                    default:
 | 
						|
                        boost::phoenix::eval(
 | 
						|
                            proto::child_c<0>(
 | 
						|
                                fusion::deref(
 | 
						|
                                    fusion::advance_c<
 | 
						|
                                        2
 | 
						|
                                    >(fusion::begin(flat_view))
 | 
						|
                                )
 | 
						|
                            )
 | 
						|
                            , ctx
 | 
						|
                        );
 | 
						|
                }
 | 
						|
            }
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<4>
 | 
						|
              , mpl::false_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<4>
 | 
						|
              , mpl::true_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                    default:
 | 
						|
                        boost::phoenix::eval(
 | 
						|
                            proto::child_c<0>(
 | 
						|
                                fusion::deref(
 | 
						|
                                    fusion::advance_c<
 | 
						|
                                        3
 | 
						|
                                    >(fusion::begin(flat_view))
 | 
						|
                                )
 | 
						|
                            )
 | 
						|
                            , ctx
 | 
						|
                        );
 | 
						|
                }
 | 
						|
            }
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<5>
 | 
						|
              , mpl::false_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 4 >::type >::type case4; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case4 , 0 >::type >::type >::type case_label4;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label4::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 4>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<5>
 | 
						|
              , mpl::true_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                    default:
 | 
						|
                        boost::phoenix::eval(
 | 
						|
                            proto::child_c<0>(
 | 
						|
                                fusion::deref(
 | 
						|
                                    fusion::advance_c<
 | 
						|
                                        4
 | 
						|
                                    >(fusion::begin(flat_view))
 | 
						|
                                )
 | 
						|
                            )
 | 
						|
                            , ctx
 | 
						|
                        );
 | 
						|
                }
 | 
						|
            }
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<6>
 | 
						|
              , mpl::false_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 4 >::type >::type case4; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case4 , 0 >::type >::type >::type case_label4; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 5 >::type >::type case5; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case5 , 0 >::type >::type >::type case_label5;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label4::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 4>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label5::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 5>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<6>
 | 
						|
              , mpl::true_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 4 >::type >::type case4; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case4 , 0 >::type >::type >::type case_label4;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label4::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 4>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                    default:
 | 
						|
                        boost::phoenix::eval(
 | 
						|
                            proto::child_c<0>(
 | 
						|
                                fusion::deref(
 | 
						|
                                    fusion::advance_c<
 | 
						|
                                        5
 | 
						|
                                    >(fusion::begin(flat_view))
 | 
						|
                                )
 | 
						|
                            )
 | 
						|
                            , ctx
 | 
						|
                        );
 | 
						|
                }
 | 
						|
            }
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<7>
 | 
						|
              , mpl::false_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 4 >::type >::type case4; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case4 , 0 >::type >::type >::type case_label4; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 5 >::type >::type case5; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case5 , 0 >::type >::type >::type case_label5; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 6 >::type >::type case6; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case6 , 0 >::type >::type >::type case_label6;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label4::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 4>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label5::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 5>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label6::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 6>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<7>
 | 
						|
              , mpl::true_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 4 >::type >::type case4; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case4 , 0 >::type >::type >::type case_label4; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 5 >::type >::type case5; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case5 , 0 >::type >::type >::type case_label5;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label4::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 4>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label5::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 5>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                    default:
 | 
						|
                        boost::phoenix::eval(
 | 
						|
                            proto::child_c<0>(
 | 
						|
                                fusion::deref(
 | 
						|
                                    fusion::advance_c<
 | 
						|
                                        6
 | 
						|
                                    >(fusion::begin(flat_view))
 | 
						|
                                )
 | 
						|
                            )
 | 
						|
                            , ctx
 | 
						|
                        );
 | 
						|
                }
 | 
						|
            }
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<8>
 | 
						|
              , mpl::false_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 4 >::type >::type case4; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case4 , 0 >::type >::type >::type case_label4; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 5 >::type >::type case5; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case5 , 0 >::type >::type >::type case_label5; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 6 >::type >::type case6; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case6 , 0 >::type >::type >::type case_label6; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 7 >::type >::type case7; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case7 , 0 >::type >::type >::type case_label7;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label4::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 4>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label5::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 5>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label6::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 6>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label7::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 7>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<8>
 | 
						|
              , mpl::true_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 4 >::type >::type case4; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case4 , 0 >::type >::type >::type case_label4; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 5 >::type >::type case5; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case5 , 0 >::type >::type >::type case_label5; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 6 >::type >::type case6; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case6 , 0 >::type >::type >::type case_label6;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label4::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 4>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label5::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 5>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label6::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 6>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                    default:
 | 
						|
                        boost::phoenix::eval(
 | 
						|
                            proto::child_c<0>(
 | 
						|
                                fusion::deref(
 | 
						|
                                    fusion::advance_c<
 | 
						|
                                        7
 | 
						|
                                    >(fusion::begin(flat_view))
 | 
						|
                                )
 | 
						|
                            )
 | 
						|
                            , ctx
 | 
						|
                        );
 | 
						|
                }
 | 
						|
            }
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<9>
 | 
						|
              , mpl::false_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 4 >::type >::type case4; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case4 , 0 >::type >::type >::type case_label4; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 5 >::type >::type case5; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case5 , 0 >::type >::type >::type case_label5; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 6 >::type >::type case6; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case6 , 0 >::type >::type >::type case_label6; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 7 >::type >::type case7; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case7 , 0 >::type >::type >::type case_label7; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 8 >::type >::type case8; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case8 , 0 >::type >::type >::type case_label8;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label4::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 4>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label5::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 5>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label6::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 6>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label7::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 7>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label8::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 8>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<9>
 | 
						|
              , mpl::true_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 4 >::type >::type case4; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case4 , 0 >::type >::type >::type case_label4; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 5 >::type >::type case5; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case5 , 0 >::type >::type >::type case_label5; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 6 >::type >::type case6; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case6 , 0 >::type >::type >::type case_label6; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 7 >::type >::type case7; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case7 , 0 >::type >::type >::type case_label7;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label4::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 4>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label5::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 5>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label6::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 6>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label7::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 7>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                    default:
 | 
						|
                        boost::phoenix::eval(
 | 
						|
                            proto::child_c<0>(
 | 
						|
                                fusion::deref(
 | 
						|
                                    fusion::advance_c<
 | 
						|
                                        8
 | 
						|
                                    >(fusion::begin(flat_view))
 | 
						|
                                )
 | 
						|
                            )
 | 
						|
                            , ctx
 | 
						|
                        );
 | 
						|
                }
 | 
						|
            }
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
    
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<10>
 | 
						|
              , mpl::false_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 4 >::type >::type case4; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case4 , 0 >::type >::type >::type case_label4; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 5 >::type >::type case5; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case5 , 0 >::type >::type >::type case_label5; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 6 >::type >::type case6; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case6 , 0 >::type >::type >::type case_label6; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 7 >::type >::type case7; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case7 , 0 >::type >::type >::type case_label7; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 8 >::type >::type case8; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case8 , 0 >::type >::type >::type case_label8; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 9 >::type >::type case9; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case9 , 0 >::type >::type >::type case_label9;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label4::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 4>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label5::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 5>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label6::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 6>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label7::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 7>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label8::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 8>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label9::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 9>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            template <typename Context, typename Cond, typename Cases>
 | 
						|
            result_type
 | 
						|
            evaluate(
 | 
						|
                Context const & ctx
 | 
						|
              , Cond const & cond
 | 
						|
              , Cases const & cases
 | 
						|
              , mpl::int_<10>
 | 
						|
              , mpl::true_
 | 
						|
            ) const
 | 
						|
            {
 | 
						|
                typedef 
 | 
						|
                    typename proto::result_of::flatten<Cases const&>::type
 | 
						|
                    flat_view_type;
 | 
						|
                typedef
 | 
						|
                    typename fusion::result_of::begin<flat_view_type>::type
 | 
						|
                    flat_view_begin;
 | 
						|
                flat_view_type flat_view(proto::flatten(cases));
 | 
						|
                typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 0 >::type >::type case0; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case0 , 0 >::type >::type >::type case_label0; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 1 >::type >::type case1; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case1 , 0 >::type >::type >::type case_label1; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 2 >::type >::type case2; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case2 , 0 >::type >::type >::type case_label2; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 3 >::type >::type case3; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case3 , 0 >::type >::type >::type case_label3; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 4 >::type >::type case4; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case4 , 0 >::type >::type >::type case_label4; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 5 >::type >::type case5; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case5 , 0 >::type >::type >::type case_label5; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 6 >::type >::type case6; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case6 , 0 >::type >::type >::type case_label6; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 7 >::type >::type case7; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case7 , 0 >::type >::type >::type case_label7; typedef typename fusion::result_of::deref< typename fusion::result_of::advance_c< flat_view_begin , 8 >::type >::type case8; typedef typename proto::detail::uncvref< typename proto::result_of::value< typename proto::result_of::child_c< case8 , 0 >::type >::type >::type case_label8;
 | 
						|
                switch(boost::phoenix::eval(cond, ctx))
 | 
						|
                {
 | 
						|
                    case case_label0::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 0>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label1::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 1>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label2::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 2>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label3::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 3>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label4::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 4>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label5::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 5>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label6::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 6>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label7::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 7>(fusion::begin(flat_view)) ) ) , ctx ); break; case case_label8::value : boost::phoenix::eval( proto::child_c<1>( fusion::deref( fusion::advance_c< 8>(fusion::begin(flat_view)) ) ) , ctx ); break;
 | 
						|
                    default:
 | 
						|
                        boost::phoenix::eval(
 | 
						|
                            proto::child_c<0>(
 | 
						|
                                fusion::deref(
 | 
						|
                                    fusion::advance_c<
 | 
						|
                                        9
 | 
						|
                                    >(fusion::begin(flat_view))
 | 
						|
                                )
 | 
						|
                            )
 | 
						|
                            , ctx
 | 
						|
                        );
 | 
						|
                }
 | 
						|
            }
 |