/Src/Dependencies/Boost/boost/spirit/home/phoenix/statement/detail/switch_eval.hpp

http://hadesmem.googlecode.com/ · C++ Header · 111 lines · 95 code · 9 blank · 7 comment · 2 complexity · c6d6c9ac3b7a0645c5d73fc9cebb65b0 MD5 · raw file

  1. /*=============================================================================
  2. Copyright (c) 2001-2007 Joel de Guzman
  3. Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. ==============================================================================*/
  6. #ifndef PHOENIX_STATEMENT_DETAIL_SWITCH_EVAL_HPP
  7. #define PHOENIX_STATEMENT_DETAIL_SWITCH_EVAL_HPP
  8. namespace boost { namespace phoenix { namespace detail
  9. {
  10. template <int N>
  11. struct switch_eval;
  12. template <>
  13. struct switch_eval<0>
  14. {
  15. template <
  16. typename Env, typename Cond, typename Default
  17. >
  18. struct result
  19. {
  20. typedef void type;
  21. };
  22. template <
  23. typename RT, typename Env, typename Cond, typename Default
  24. >
  25. static void
  26. eval(
  27. Env const& env, Cond& cond, Default& default_
  28. )
  29. {
  30. default_.eval(env);
  31. }
  32. };
  33. template <>
  34. struct switch_eval<1>
  35. {
  36. template <
  37. typename Env, typename Cond, typename Default
  38. , typename Case0
  39. >
  40. struct result
  41. {
  42. typedef void type;
  43. };
  44. template <
  45. typename RT, typename Env, typename Cond, typename Default
  46. , typename Case0
  47. >
  48. static void
  49. eval(
  50. Env const& env, Cond& cond, Default& default_
  51. , Case0& _0
  52. )
  53. {
  54. switch (cond.eval(env))
  55. {
  56. case Case0::value:
  57. _0.eval(env);
  58. break;
  59. default:
  60. default_.eval(env);
  61. }
  62. }
  63. };
  64. template <>
  65. struct switch_eval<2>
  66. {
  67. template <
  68. typename Env, typename Cond, typename Default
  69. , typename Case0, typename Case1
  70. >
  71. struct result
  72. {
  73. typedef void type;
  74. };
  75. template <
  76. typename RT, typename Env, typename Cond, typename Default
  77. , typename Case0, typename Case1
  78. >
  79. static void
  80. eval(
  81. Env const& env, Cond& cond, Default& default_
  82. , Case0& _0, Case1& _1
  83. )
  84. {
  85. switch (cond.eval(env))
  86. {
  87. case Case0::value:
  88. _0.eval(env);
  89. break;
  90. case Case1::value:
  91. _1.eval(env);
  92. break;
  93. default:
  94. default_.eval(env);
  95. }
  96. }
  97. };
  98. // Bring in the rest of the switch_evals
  99. #include <boost/spirit/home/phoenix/statement/detail/switch_eval.ipp>
  100. }}}
  101. #endif