166 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| #if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
 | |
| #ifndef BOOST_PHOENIX_STATEMENT_DETAIL_SWITCH_HPP
 | |
| #define BOOST_PHOENIX_STATEMENT_DETAIL_SWITCH_HPP
 | |
| 
 | |
| #include <boost/phoenix/support/iterate.hpp>
 | |
| 
 | |
| #include <boost/phoenix/statement/detail/preprocessed/switch.hpp>
 | |
| 
 | |
| #endif
 | |
| #else
 | |
| 
 | |
| #if !BOOST_PHOENIX_IS_ITERATING
 | |
| 
 | |
| #ifndef BOOST_PHOENIX_STATEMENT_DETAIL_SWITCH_HPP
 | |
| #define BOOST_PHOENIX_STATEMENT_DETAIL_SWITCH_HPP
 | |
| 
 | |
| #include <boost/phoenix/support/iterate.hpp>
 | |
| 
 | |
| #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
 | |
| #pragma wave option(preserve: 2, line: 0, output: "preprocessed/switch_" BOOST_PHOENIX_LIMIT_STR ".hpp")
 | |
| #endif
 | |
| 
 | |
| /*==============================================================================
 | |
|     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)
 | |
| ==============================================================================*/
 | |
| 
 | |
| #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
 | |
| #pragma wave option(preserve: 1)
 | |
| #endif
 | |
| 
 | |
|         #define BOOST_PHOENIX_SWITCH_EVAL_TYPEDEF_R(Z, N, DATA)                 \
 | |
|             typedef                                                             \
 | |
|                 typename fusion::result_of::deref<                              \
 | |
|                     typename fusion::result_of::advance_c<                      \
 | |
|                         flat_view_begin                                         \
 | |
|                       , N                                                       \
 | |
|                     >::type                                                     \
 | |
|                 >::type                                                         \
 | |
|                 BOOST_PP_CAT(case, N);                                          \
 | |
|             typedef                                                             \
 | |
|                 typename proto::detail::uncvref<                                \
 | |
|                     typename proto::result_of::value<                           \
 | |
|                       typename proto::result_of::child_c<                       \
 | |
|                             BOOST_PP_CAT(case, N)                               \
 | |
|                           , 0                                                   \
 | |
|                         >::type                                                 \
 | |
|                     >::type                                                     \
 | |
|                 >::type                                                         \
 | |
|                 BOOST_PP_CAT(case_label, N);                                    \
 | |
|     /**/
 | |
| 
 | |
|     #define BOOST_PHOENIX_SWITCH_EVAL_R(Z, N, DATA)                             \
 | |
|         case BOOST_PP_CAT(case_label, N)::value :                               \
 | |
|             boost::phoenix::eval(                                               \
 | |
|                 proto::child_c<1>(                                              \
 | |
|                     fusion::deref(                                              \
 | |
|                         fusion::advance_c<N>(fusion::begin(flat_view))          \
 | |
|                     )                                                           \
 | |
|                 )                                                               \
 | |
|               , ctx                                                             \
 | |
|             );                                                                  \
 | |
|             break;                                                              \
 | |
|     /**/
 | |
| 
 | |
| #define BOOST_PHOENIX_ITERATION_PARAMS                                          \
 | |
|         (3, (2, BOOST_PHOENIX_LIMIT,                                            \
 | |
|         <boost/phoenix/statement/detail/switch.hpp>))
 | |
| #include BOOST_PHOENIX_ITERATE()
 | |
| 
 | |
|         #undef BOOST_PHOENIX_SWITCH_EVAL_R
 | |
|         #undef BOOST_PHOENIX_SWITCH_EVAL_TYPEDEF
 | |
| 
 | |
| #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
 | |
| #pragma wave option(output: null)
 | |
| #endif
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #else
 | |
|             template <typename Context, typename Cond, typename Cases>
 | |
|             result_type
 | |
|             evaluate(
 | |
|                 Context const & ctx
 | |
|               , Cond const & cond
 | |
|               , Cases const & cases
 | |
|               , mpl::int_<BOOST_PHOENIX_ITERATION>
 | |
|               , 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));
 | |
| 
 | |
|                 BOOST_PP_REPEAT(
 | |
|                     BOOST_PHOENIX_ITERATION
 | |
|                   , BOOST_PHOENIX_SWITCH_EVAL_TYPEDEF_R
 | |
|                   , BOOST_PHOENIX_ITERATION
 | |
|                 )
 | |
| 
 | |
|                 switch(boost::phoenix::eval(cond, ctx))
 | |
|                 {
 | |
|                     BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, BOOST_PHOENIX_SWITCH_EVAL_R, _)
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             template <typename Context, typename Cond, typename Cases>
 | |
|             result_type
 | |
|             evaluate(
 | |
|                 Context const & ctx
 | |
|               , Cond const & cond
 | |
|               , Cases const & cases
 | |
|               , mpl::int_<BOOST_PHOENIX_ITERATION>
 | |
|               , 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));
 | |
| 
 | |
|                 BOOST_PP_REPEAT(
 | |
|                     BOOST_PP_DEC(BOOST_PHOENIX_ITERATION)
 | |
|                   , BOOST_PHOENIX_SWITCH_EVAL_TYPEDEF_R
 | |
|                   , BOOST_PHOENIX_ITERATION
 | |
|                 )
 | |
| 
 | |
|                 switch(boost::phoenix::eval(cond, ctx))
 | |
|                 {
 | |
|                     BOOST_PP_REPEAT(
 | |
|                         BOOST_PP_DEC(BOOST_PHOENIX_ITERATION)
 | |
|                       , BOOST_PHOENIX_SWITCH_EVAL_R, _
 | |
|                     )
 | |
|                     default:
 | |
|                         boost::phoenix::eval(
 | |
|                             proto::child_c<0>(
 | |
|                                 fusion::deref(
 | |
|                                     fusion::advance_c<
 | |
|                                         BOOST_PP_DEC(BOOST_PHOENIX_ITERATION)
 | |
|                                     >(fusion::begin(flat_view))
 | |
|                                 )
 | |
|                             )
 | |
|                             , ctx
 | |
|                         );
 | |
|                 }
 | |
|             }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #endif // BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES
 | 
