| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | 
#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
 |