File indexing completed on 2025-01-18 09:53:36
0001
0002
0003
0004
0005
0006
0007 #if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_HPP)
0008 #define BOOST_VMD_DETAIL_DATA_EQUAL_HPP
0009
0010 #include <boost/vmd/detail/recurse/data_equal/data_equal_1.hpp>
0011 #include <boost/vmd/detail/recurse/data_equal/data_equal_2.hpp>
0012 #include <boost/vmd/detail/recurse/data_equal/data_equal_3.hpp>
0013 #include <boost/vmd/detail/recurse/data_equal/data_equal_4.hpp>
0014 #include <boost/vmd/detail/recurse/data_equal/data_equal_5.hpp>
0015 #include <boost/vmd/detail/recurse/data_equal/data_equal_6.hpp>
0016 #include <boost/vmd/detail/recurse/data_equal/data_equal_7.hpp>
0017 #include <boost/vmd/detail/recurse/data_equal/data_equal_8.hpp>
0018 #include <boost/vmd/detail/recurse/data_equal/data_equal_9.hpp>
0019 #include <boost/vmd/detail/recurse/data_equal/data_equal_10.hpp>
0020 #include <boost/vmd/detail/recurse/data_equal/data_equal_11.hpp>
0021 #include <boost/vmd/detail/recurse/data_equal/data_equal_12.hpp>
0022 #include <boost/vmd/detail/recurse/data_equal/data_equal_13.hpp>
0023 #include <boost/vmd/detail/recurse/data_equal/data_equal_14.hpp>
0024 #include <boost/vmd/detail/recurse/data_equal/data_equal_15.hpp>
0025 #include <boost/vmd/detail/recurse/data_equal/data_equal_16.hpp>
0026
0027 #include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
0028
0029 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS(d,em1,em2) \
0030 BOOST_VMD_IDENTITY_RESULT \
0031 ( \
0032 BOOST_PP_IIF \
0033 ( \
0034 BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
0035 BOOST_VMD_IDENTITY(2), \
0036 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
0037 ) \
0038 (d,em1,em2) \
0039 ) \
0040
0041
0042 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
0043 BOOST_VMD_IDENTITY_RESULT \
0044 ( \
0045 BOOST_PP_IIF \
0046 ( \
0047 BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
0048 BOOST_VMD_IDENTITY(2), \
0049 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
0050 ) \
0051 (d,em1,em2) \
0052 ) \
0053
0054
0055 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP(d,state,em1,em2) \
0056 BOOST_PP_IIF \
0057 ( \
0058 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
0059 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
0060 BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS \
0061 ) \
0062 (d,em1,em2) \
0063
0064
0065 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_D(d,state,em1,em2) \
0066 BOOST_PP_IIF \
0067 ( \
0068 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
0069 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
0070 BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS_D \
0071 ) \
0072 (d,em1,em2) \
0073
0074
0075 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ(d,state) \
0076 BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP \
0077 ( \
0078 d, \
0079 state, \
0080 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
0081 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
0082 ) \
0083
0084
0085 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_D(d,state) \
0086 BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_D \
0087 ( \
0088 d, \
0089 state, \
0090 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
0091 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
0092 ) \
0093
0094
0095 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP(d,state) \
0096 BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
0097 ( \
0098 d, \
0099 state, \
0100 BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ(d,state) \
0101 ) \
0102
0103
0104 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_D(d,state) \
0105 BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
0106 ( \
0107 d, \
0108 state, \
0109 BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_D(d,state) \
0110 ) \
0111
0112
0113 #define BOOST_VMD_DETAIL_DATA_EQUAL_LOOP(dataf,datas,sz,vtype) \
0114 BOOST_PP_TUPLE_ELEM \
0115 ( \
0116 0, \
0117 BOOST_PP_WHILE \
0118 ( \
0119 BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
0120 BOOST_VMD_DETAIL_DATA_EQUAL_OP, \
0121 ( \
0122 1, \
0123 dataf, \
0124 datas, \
0125 sz, \
0126 vtype, \
0127 0, \
0128 ) \
0129 ) \
0130 ) \
0131
0132
0133 #define BOOST_VMD_DETAIL_DATA_EQUAL_LOOP_D(d,dataf,datas,sz,vtype) \
0134 BOOST_PP_TUPLE_ELEM \
0135 ( \
0136 0, \
0137 BOOST_PP_WHILE_ ## d \
0138 ( \
0139 BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
0140 BOOST_VMD_DETAIL_DATA_EQUAL_OP_D, \
0141 ( \
0142 1, \
0143 dataf, \
0144 datas, \
0145 sz, \
0146 vtype, \
0147 0, \
0148 ) \
0149 ) \
0150 ) \
0151
0152
0153 #define BOOST_VMD_DETAIL_DATA_EQUAL_SZ(dataf,datas,szf,szs,vtype) \
0154 BOOST_VMD_IDENTITY_RESULT \
0155 ( \
0156 BOOST_PP_IIF \
0157 ( \
0158 BOOST_PP_EQUAL(szf,szs), \
0159 BOOST_VMD_DETAIL_DATA_EQUAL_LOOP, \
0160 BOOST_VMD_IDENTITY(0) \
0161 ) \
0162 (dataf,datas,szf,vtype) \
0163 ) \
0164
0165
0166 #define BOOST_VMD_DETAIL_DATA_EQUAL_SZ_D(d,dataf,datas,szf,szs,vtype) \
0167 BOOST_VMD_IDENTITY_RESULT \
0168 ( \
0169 BOOST_PP_IIF \
0170 ( \
0171 BOOST_PP_EQUAL_D(d,szf,szs), \
0172 BOOST_VMD_DETAIL_DATA_EQUAL_LOOP_D, \
0173 BOOST_VMD_IDENTITY(0) \
0174 ) \
0175 (d,dataf,datas,szf,vtype) \
0176 ) \
0177
0178
0179 #define BOOST_VMD_DETAIL_DATA_EQUAL(dataf,datas,vtype) \
0180 BOOST_VMD_DETAIL_DATA_EQUAL_SZ \
0181 ( \
0182 dataf, \
0183 datas, \
0184 BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
0185 BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
0186 vtype \
0187 ) \
0188
0189
0190 #define BOOST_VMD_DETAIL_DATA_EQUAL_D(d,dataf,datas,vtype) \
0191 BOOST_VMD_DETAIL_DATA_EQUAL_SZ_D \
0192 ( \
0193 d, \
0194 dataf, \
0195 datas, \
0196 BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
0197 BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
0198 vtype \
0199 ) \
0200
0201
0202 #endif