null_eval.hpp 4.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. ///////////////////////////////////////////////////////////////////////////////
  2. /// \file null_eval.hpp
  3. /// Contains specializations of the null_eval\<\> class template.
  4. //
  5. // Copyright 2008 Eric Niebler. Distributed under the Boost
  6. // Software License, Version 1.0. (See accompanying file
  7. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  8. template<typename Expr, typename Context>
  9. struct null_eval<Expr, Context, 1>
  10. {
  11. typedef void result_type;
  12. void operator ()(Expr &expr, Context &ctx) const
  13. {
  14. proto::eval(proto::child_c< 0>(expr), ctx);
  15. }
  16. };
  17. template<typename Expr, typename Context>
  18. struct null_eval<Expr, Context, 2>
  19. {
  20. typedef void result_type;
  21. void operator ()(Expr &expr, Context &ctx) const
  22. {
  23. proto::eval(proto::child_c< 0>(expr), ctx); proto::eval(proto::child_c< 1>(expr), ctx);
  24. }
  25. };
  26. template<typename Expr, typename Context>
  27. struct null_eval<Expr, Context, 3>
  28. {
  29. typedef void result_type;
  30. void operator ()(Expr &expr, Context &ctx) const
  31. {
  32. proto::eval(proto::child_c< 0>(expr), ctx); proto::eval(proto::child_c< 1>(expr), ctx); proto::eval(proto::child_c< 2>(expr), ctx);
  33. }
  34. };
  35. template<typename Expr, typename Context>
  36. struct null_eval<Expr, Context, 4>
  37. {
  38. typedef void result_type;
  39. void operator ()(Expr &expr, Context &ctx) const
  40. {
  41. proto::eval(proto::child_c< 0>(expr), ctx); proto::eval(proto::child_c< 1>(expr), ctx); proto::eval(proto::child_c< 2>(expr), ctx); proto::eval(proto::child_c< 3>(expr), ctx);
  42. }
  43. };
  44. template<typename Expr, typename Context>
  45. struct null_eval<Expr, Context, 5>
  46. {
  47. typedef void result_type;
  48. void operator ()(Expr &expr, Context &ctx) const
  49. {
  50. proto::eval(proto::child_c< 0>(expr), ctx); proto::eval(proto::child_c< 1>(expr), ctx); proto::eval(proto::child_c< 2>(expr), ctx); proto::eval(proto::child_c< 3>(expr), ctx); proto::eval(proto::child_c< 4>(expr), ctx);
  51. }
  52. };
  53. template<typename Expr, typename Context>
  54. struct null_eval<Expr, Context, 6>
  55. {
  56. typedef void result_type;
  57. void operator ()(Expr &expr, Context &ctx) const
  58. {
  59. proto::eval(proto::child_c< 0>(expr), ctx); proto::eval(proto::child_c< 1>(expr), ctx); proto::eval(proto::child_c< 2>(expr), ctx); proto::eval(proto::child_c< 3>(expr), ctx); proto::eval(proto::child_c< 4>(expr), ctx); proto::eval(proto::child_c< 5>(expr), ctx);
  60. }
  61. };
  62. template<typename Expr, typename Context>
  63. struct null_eval<Expr, Context, 7>
  64. {
  65. typedef void result_type;
  66. void operator ()(Expr &expr, Context &ctx) const
  67. {
  68. proto::eval(proto::child_c< 0>(expr), ctx); proto::eval(proto::child_c< 1>(expr), ctx); proto::eval(proto::child_c< 2>(expr), ctx); proto::eval(proto::child_c< 3>(expr), ctx); proto::eval(proto::child_c< 4>(expr), ctx); proto::eval(proto::child_c< 5>(expr), ctx); proto::eval(proto::child_c< 6>(expr), ctx);
  69. }
  70. };
  71. template<typename Expr, typename Context>
  72. struct null_eval<Expr, Context, 8>
  73. {
  74. typedef void result_type;
  75. void operator ()(Expr &expr, Context &ctx) const
  76. {
  77. proto::eval(proto::child_c< 0>(expr), ctx); proto::eval(proto::child_c< 1>(expr), ctx); proto::eval(proto::child_c< 2>(expr), ctx); proto::eval(proto::child_c< 3>(expr), ctx); proto::eval(proto::child_c< 4>(expr), ctx); proto::eval(proto::child_c< 5>(expr), ctx); proto::eval(proto::child_c< 6>(expr), ctx); proto::eval(proto::child_c< 7>(expr), ctx);
  78. }
  79. };
  80. template<typename Expr, typename Context>
  81. struct null_eval<Expr, Context, 9>
  82. {
  83. typedef void result_type;
  84. void operator ()(Expr &expr, Context &ctx) const
  85. {
  86. proto::eval(proto::child_c< 0>(expr), ctx); proto::eval(proto::child_c< 1>(expr), ctx); proto::eval(proto::child_c< 2>(expr), ctx); proto::eval(proto::child_c< 3>(expr), ctx); proto::eval(proto::child_c< 4>(expr), ctx); proto::eval(proto::child_c< 5>(expr), ctx); proto::eval(proto::child_c< 6>(expr), ctx); proto::eval(proto::child_c< 7>(expr), ctx); proto::eval(proto::child_c< 8>(expr), ctx);
  87. }
  88. };
  89. template<typename Expr, typename Context>
  90. struct null_eval<Expr, Context, 10>
  91. {
  92. typedef void result_type;
  93. void operator ()(Expr &expr, Context &ctx) const
  94. {
  95. proto::eval(proto::child_c< 0>(expr), ctx); proto::eval(proto::child_c< 1>(expr), ctx); proto::eval(proto::child_c< 2>(expr), ctx); proto::eval(proto::child_c< 3>(expr), ctx); proto::eval(proto::child_c< 4>(expr), ctx); proto::eval(proto::child_c< 5>(expr), ctx); proto::eval(proto::child_c< 6>(expr), ctx); proto::eval(proto::child_c< 7>(expr), ctx); proto::eval(proto::child_c< 8>(expr), ctx); proto::eval(proto::child_c< 9>(expr), ctx);
  96. }
  97. };