data_equal_11.hpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. // (C) Copyright Edward Diener 2011-2015
  2. // Use, modification and distribution are subject to the Boost Software License,
  3. // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  4. // http://www.boost.org/LICENSE_1_0.txt).
  5. #if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_11_HPP)
  6. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_HPP
  7. #include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
  8. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_PARENS(d,em1,em2) \
  9. BOOST_VMD_IDENTITY_RESULT \
  10. ( \
  11. BOOST_PP_IIF \
  12. ( \
  13. BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
  14. BOOST_VMD_IDENTITY(2), \
  15. BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
  16. ) \
  17. (d,em1,em2) \
  18. ) \
  19. /**/
  20. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
  21. BOOST_VMD_IDENTITY_RESULT \
  22. ( \
  23. BOOST_PP_IIF \
  24. ( \
  25. BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
  26. BOOST_VMD_IDENTITY(2), \
  27. BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
  28. ) \
  29. (d,em1,em2) \
  30. ) \
  31. /**/
  32. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP(d,state,em1,em2) \
  33. BOOST_PP_IIF \
  34. ( \
  35. BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
  36. BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
  37. BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_PARENS \
  38. ) \
  39. (d,em1,em2) \
  40. /**/
  41. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_D(d,state,em1,em2) \
  42. BOOST_PP_IIF \
  43. ( \
  44. BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
  45. BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
  46. BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_PARENS_D \
  47. ) \
  48. (d,em1,em2) \
  49. /**/
  50. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ(d,state) \
  51. BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP \
  52. ( \
  53. d, \
  54. state, \
  55. BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
  56. BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
  57. ) \
  58. /**/
  59. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_D(d,state) \
  60. BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_D \
  61. ( \
  62. d, \
  63. state, \
  64. BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
  65. BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
  66. ) \
  67. /**/
  68. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP(d,state) \
  69. BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
  70. ( \
  71. d, \
  72. state, \
  73. BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ(d,state) \
  74. ) \
  75. /**/
  76. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_D(d,state) \
  77. BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
  78. ( \
  79. d, \
  80. state, \
  81. BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_D(d,state) \
  82. ) \
  83. /**/
  84. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_LOOP(dataf,datas,sz,vtype) \
  85. BOOST_PP_TUPLE_ELEM \
  86. ( \
  87. 0, \
  88. BOOST_PP_WHILE \
  89. ( \
  90. BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
  91. BOOST_VMD_DETAIL_DATA_EQUAL_11_OP, \
  92. ( \
  93. 1, \
  94. dataf, \
  95. datas, \
  96. sz, \
  97. vtype, \
  98. 0, \
  99. ) \
  100. ) \
  101. ) \
  102. /**/
  103. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_LOOP_D(d,dataf,datas,sz,vtype) \
  104. BOOST_PP_TUPLE_ELEM \
  105. ( \
  106. 0, \
  107. BOOST_PP_WHILE_ ## d \
  108. ( \
  109. BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
  110. BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_D, \
  111. ( \
  112. 1, \
  113. dataf, \
  114. datas, \
  115. sz, \
  116. vtype, \
  117. 0, \
  118. ) \
  119. ) \
  120. ) \
  121. /**/
  122. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_SZ(dataf,datas,szf,szs,vtype) \
  123. BOOST_VMD_IDENTITY_RESULT \
  124. ( \
  125. BOOST_PP_IIF \
  126. ( \
  127. BOOST_PP_EQUAL(szf,szs), \
  128. BOOST_VMD_DETAIL_DATA_EQUAL_11_LOOP, \
  129. BOOST_VMD_IDENTITY(0) \
  130. ) \
  131. (dataf,datas,szf,vtype) \
  132. ) \
  133. /**/
  134. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_SZ_D(d,dataf,datas,szf,szs,vtype) \
  135. BOOST_VMD_IDENTITY_RESULT \
  136. ( \
  137. BOOST_PP_IIF \
  138. ( \
  139. BOOST_PP_EQUAL_D(d,szf,szs), \
  140. BOOST_VMD_DETAIL_DATA_EQUAL_11_LOOP_D, \
  141. BOOST_VMD_IDENTITY(0) \
  142. ) \
  143. (d,dataf,datas,szf,vtype) \
  144. ) \
  145. /**/
  146. #define BOOST_VMD_DETAIL_DATA_EQUAL_11(dataf,datas,vtype) \
  147. BOOST_VMD_DETAIL_DATA_EQUAL_11_SZ \
  148. ( \
  149. dataf, \
  150. datas, \
  151. BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
  152. BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
  153. vtype \
  154. ) \
  155. /**/
  156. #define BOOST_VMD_DETAIL_DATA_EQUAL_11_D(d,dataf,datas,vtype) \
  157. BOOST_VMD_DETAIL_DATA_EQUAL_11_SZ_D \
  158. ( \
  159. d, \
  160. dataf, \
  161. datas, \
  162. BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
  163. BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
  164. vtype \
  165. ) \
  166. /**/
  167. #endif /* BOOST_VMD_DETAIL_DATA_EQUAL_11_HPP */