| /*============================================================================= |
| Copyright (c) 2001-2007 Joel de Guzman |
| |
| 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) |
| ==============================================================================*/ |
| #ifndef PHOENIX_STATEMENT_DETAIL_SWITCH_EVAL_HPP |
| #define PHOENIX_STATEMENT_DETAIL_SWITCH_EVAL_HPP |
| |
| namespace boost { namespace phoenix { namespace detail |
| { |
| template <int N> |
| struct switch_eval; |
| |
| template <> |
| struct switch_eval<0> |
| { |
| template < |
| typename Env, typename Cond, typename Default |
| > |
| struct result |
| { |
| typedef void type; |
| }; |
| |
| template < |
| typename RT, typename Env, typename Cond, typename Default |
| > |
| static void |
| eval( |
| Env const& env, Cond& cond, Default& default_ |
| ) |
| { |
| default_.eval(env); |
| } |
| }; |
| |
| template <> |
| struct switch_eval<1> |
| { |
| template < |
| typename Env, typename Cond, typename Default |
| , typename Case0 |
| > |
| struct result |
| { |
| typedef void type; |
| }; |
| |
| template < |
| typename RT, typename Env, typename Cond, typename Default |
| , typename Case0 |
| > |
| static void |
| eval( |
| Env const& env, Cond& cond, Default& default_ |
| , Case0& _0 |
| ) |
| { |
| switch (cond.eval(env)) |
| { |
| case Case0::value: |
| _0.eval(env); |
| break; |
| default: |
| default_.eval(env); |
| } |
| } |
| }; |
| |
| template <> |
| struct switch_eval<2> |
| { |
| template < |
| typename Env, typename Cond, typename Default |
| , typename Case0, typename Case1 |
| > |
| struct result |
| { |
| typedef void type; |
| }; |
| |
| template < |
| typename RT, typename Env, typename Cond, typename Default |
| , typename Case0, typename Case1 |
| > |
| static void |
| eval( |
| Env const& env, Cond& cond, Default& default_ |
| , Case0& _0, Case1& _1 |
| ) |
| { |
| switch (cond.eval(env)) |
| { |
| case Case0::value: |
| _0.eval(env); |
| break; |
| case Case1::value: |
| _1.eval(env); |
| break; |
| default: |
| default_.eval(env); |
| } |
| } |
| }; |
| |
| // Bring in the rest of the switch_evals |
| #include <boost/spirit/home/phoenix/statement/detail/switch_eval.ipp> |
| }}} |
| |
| #endif |