or_n.hpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. ///////////////////////////////////////////////////////////////////////////////
  2. /// \file or_n.hpp
  3. /// Definitions of or_N
  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<bool B, typename Expr, typename BasicExpr, typename G0 , typename G1>
  9. struct or_2
  10. : mpl::bool_<matches_<Expr, BasicExpr, typename G1::proto_grammar>::value>
  11. {
  12. typedef G1 which;
  13. };
  14. template<typename Expr, typename BasicExpr , typename G0 , typename G1>
  15. struct or_2<true, Expr, BasicExpr, G0 , G1>
  16. : mpl::true_
  17. {
  18. typedef G0 which;
  19. };
  20. template<bool B, typename Expr, typename BasicExpr, typename G0 , typename G1 , typename G2>
  21. struct or_3
  22. : or_2<
  23. matches_<Expr, BasicExpr, typename G1::proto_grammar>::value
  24. , Expr, BasicExpr, G1 , G2
  25. >
  26. {};
  27. template<typename Expr, typename BasicExpr , typename G0 , typename G1 , typename G2>
  28. struct or_3<true, Expr, BasicExpr, G0 , G1 , G2>
  29. : mpl::true_
  30. {
  31. typedef G0 which;
  32. };
  33. template<bool B, typename Expr, typename BasicExpr, typename G0 , typename G1 , typename G2 , typename G3>
  34. struct or_4
  35. : or_3<
  36. matches_<Expr, BasicExpr, typename G1::proto_grammar>::value
  37. , Expr, BasicExpr, G1 , G2 , G3
  38. >
  39. {};
  40. template<typename Expr, typename BasicExpr , typename G0 , typename G1 , typename G2 , typename G3>
  41. struct or_4<true, Expr, BasicExpr, G0 , G1 , G2 , G3>
  42. : mpl::true_
  43. {
  44. typedef G0 which;
  45. };
  46. template<bool B, typename Expr, typename BasicExpr, typename G0 , typename G1 , typename G2 , typename G3 , typename G4>
  47. struct or_5
  48. : or_4<
  49. matches_<Expr, BasicExpr, typename G1::proto_grammar>::value
  50. , Expr, BasicExpr, G1 , G2 , G3 , G4
  51. >
  52. {};
  53. template<typename Expr, typename BasicExpr , typename G0 , typename G1 , typename G2 , typename G3 , typename G4>
  54. struct or_5<true, Expr, BasicExpr, G0 , G1 , G2 , G3 , G4>
  55. : mpl::true_
  56. {
  57. typedef G0 which;
  58. };
  59. template<bool B, typename Expr, typename BasicExpr, typename G0 , typename G1 , typename G2 , typename G3 , typename G4 , typename G5>
  60. struct or_6
  61. : or_5<
  62. matches_<Expr, BasicExpr, typename G1::proto_grammar>::value
  63. , Expr, BasicExpr, G1 , G2 , G3 , G4 , G5
  64. >
  65. {};
  66. template<typename Expr, typename BasicExpr , typename G0 , typename G1 , typename G2 , typename G3 , typename G4 , typename G5>
  67. struct or_6<true, Expr, BasicExpr, G0 , G1 , G2 , G3 , G4 , G5>
  68. : mpl::true_
  69. {
  70. typedef G0 which;
  71. };
  72. template<bool B, typename Expr, typename BasicExpr, typename G0 , typename G1 , typename G2 , typename G3 , typename G4 , typename G5 , typename G6>
  73. struct or_7
  74. : or_6<
  75. matches_<Expr, BasicExpr, typename G1::proto_grammar>::value
  76. , Expr, BasicExpr, G1 , G2 , G3 , G4 , G5 , G6
  77. >
  78. {};
  79. template<typename Expr, typename BasicExpr , typename G0 , typename G1 , typename G2 , typename G3 , typename G4 , typename G5 , typename G6>
  80. struct or_7<true, Expr, BasicExpr, G0 , G1 , G2 , G3 , G4 , G5 , G6>
  81. : mpl::true_
  82. {
  83. typedef G0 which;
  84. };
  85. template<bool B, typename Expr, typename BasicExpr, typename G0 , typename G1 , typename G2 , typename G3 , typename G4 , typename G5 , typename G6 , typename G7>
  86. struct or_8
  87. : or_7<
  88. matches_<Expr, BasicExpr, typename G1::proto_grammar>::value
  89. , Expr, BasicExpr, G1 , G2 , G3 , G4 , G5 , G6 , G7
  90. >
  91. {};
  92. template<typename Expr, typename BasicExpr , typename G0 , typename G1 , typename G2 , typename G3 , typename G4 , typename G5 , typename G6 , typename G7>
  93. struct or_8<true, Expr, BasicExpr, G0 , G1 , G2 , G3 , G4 , G5 , G6 , G7>
  94. : mpl::true_
  95. {
  96. typedef G0 which;
  97. };
  98. template<bool B, typename Expr, typename BasicExpr, typename G0 , typename G1 , typename G2 , typename G3 , typename G4 , typename G5 , typename G6 , typename G7 , typename G8>
  99. struct or_9
  100. : or_8<
  101. matches_<Expr, BasicExpr, typename G1::proto_grammar>::value
  102. , Expr, BasicExpr, G1 , G2 , G3 , G4 , G5 , G6 , G7 , G8
  103. >
  104. {};
  105. template<typename Expr, typename BasicExpr , typename G0 , typename G1 , typename G2 , typename G3 , typename G4 , typename G5 , typename G6 , typename G7 , typename G8>
  106. struct or_9<true, Expr, BasicExpr, G0 , G1 , G2 , G3 , G4 , G5 , G6 , G7 , G8>
  107. : mpl::true_
  108. {
  109. typedef G0 which;
  110. };
  111. template<bool B, typename Expr, typename BasicExpr, typename G0 , typename G1 , typename G2 , typename G3 , typename G4 , typename G5 , typename G6 , typename G7 , typename G8 , typename G9>
  112. struct or_10
  113. : or_9<
  114. matches_<Expr, BasicExpr, typename G1::proto_grammar>::value
  115. , Expr, BasicExpr, G1 , G2 , G3 , G4 , G5 , G6 , G7 , G8 , G9
  116. >
  117. {};
  118. template<typename Expr, typename BasicExpr , typename G0 , typename G1 , typename G2 , typename G3 , typename G4 , typename G5 , typename G6 , typename G7 , typename G8 , typename G9>
  119. struct or_10<true, Expr, BasicExpr, G0 , G1 , G2 , G3 , G4 , G5 , G6 , G7 , G8 , G9>
  120. : mpl::true_
  121. {
  122. typedef G0 which;
  123. };