File indexing completed on 2025-01-18 09:53:36
0001
0002
0003
0004
0005
0006
0007 #if !defined(BOOST_VMD_DETAIL_EQUAL_HPP)
0008 #define BOOST_VMD_DETAIL_EQUAL_HPP
0009
0010 #include <boost/preprocessor/cat.hpp>
0011 #include <boost/preprocessor/detail/auto_rec.hpp>
0012 #include <boost/preprocessor/facilities/empty.hpp>
0013 #include <boost/preprocessor/facilities/overload.hpp>
0014 #include <boost/preprocessor/logical/compl.hpp>
0015 #include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
0016 #include <boost/vmd/is_identifier.hpp>
0017 #include <boost/vmd/is_empty_list.hpp>
0018 #include <boost/vmd/detail/not_empty.hpp>
0019
0020 #include <boost/vmd/detail/recurse/equal/equal_1.hpp>
0021 #include <boost/vmd/detail/recurse/equal/equal_2.hpp>
0022 #include <boost/vmd/detail/recurse/equal/equal_3.hpp>
0023 #include <boost/vmd/detail/recurse/equal/equal_4.hpp>
0024 #include <boost/vmd/detail/recurse/equal/equal_5.hpp>
0025 #include <boost/vmd/detail/recurse/equal/equal_6.hpp>
0026 #include <boost/vmd/detail/recurse/equal/equal_7.hpp>
0027 #include <boost/vmd/detail/recurse/equal/equal_8.hpp>
0028 #include <boost/vmd/detail/recurse/equal/equal_9.hpp>
0029 #include <boost/vmd/detail/recurse/equal/equal_10.hpp>
0030 #include <boost/vmd/detail/recurse/equal/equal_11.hpp>
0031 #include <boost/vmd/detail/recurse/equal/equal_12.hpp>
0032 #include <boost/vmd/detail/recurse/equal/equal_13.hpp>
0033 #include <boost/vmd/detail/recurse/equal/equal_14.hpp>
0034 #include <boost/vmd/detail/recurse/equal/equal_15.hpp>
0035 #include <boost/vmd/detail/recurse/equal/equal_16.hpp>
0036
0037 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_1(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_1_D(d,vseq1,vseq2)
0038 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_2(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_2_D(d,vseq1,vseq2)
0039 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_3(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_3_D(d,vseq1,vseq2)
0040 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_4(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_4_D(d,vseq1,vseq2)
0041 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_5(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_5_D(d,vseq1,vseq2)
0042 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_6(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_6_D(d,vseq1,vseq2)
0043 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_7(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_7_D(d,vseq1,vseq2)
0044 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_8(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_8_D(d,vseq1,vseq2)
0045 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_9(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_9_D(d,vseq1,vseq2)
0046 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_10(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_10_D(d,vseq1,vseq2)
0047 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_11(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_11_D(d,vseq1,vseq2)
0048 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_12(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_12_D(d,vseq1,vseq2)
0049 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_13(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_13_D(d,vseq1,vseq2)
0050 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_14(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_14_D(d,vseq1,vseq2)
0051 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_15(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_15_D(d,vseq1,vseq2)
0052 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_16(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_16_D(d,vseq1,vseq2)
0053
0054 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_AUTO_REC_D(n) \
0055 BOOST_VMD_DETAIL_EQUAL_IS_1 \
0056 ( \
0057 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_ ## n(1,,) \
0058 ) \
0059
0060
0061 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
0062 BOOST_PP_CAT \
0063 ( \
0064 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_, \
0065 BOOST_PP_AUTO_REC(BOOST_VMD_DETAIL_EQUAL_SIMPLE_AUTO_REC_D,16) \
0066 ) \
0067
0068
0069
0070 #define BOOST_VMD_DETAIL_EQUAL_CNI_CHK(vseq1,vseq2,vtype) \
0071 BOOST_PP_IIF \
0072 ( \
0073 BOOST_PP_BITOR \
0074 ( \
0075 BOOST_PP_BITOR \
0076 ( \
0077 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
0078 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
0079 ), \
0080 BOOST_PP_BITOR \
0081 ( \
0082 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
0083 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
0084 ) \
0085 ), \
0086 BOOST_VMD_DETAIL_DATA_EQUAL, \
0087 BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
0088 ) \
0089 (vseq1,vseq2,vtype) \
0090
0091
0092 #define BOOST_VMD_DETAIL_EQUAL_CNI_CHK_D(d,vseq1,vseq2,vtype) \
0093 BOOST_PP_IIF \
0094 ( \
0095 BOOST_PP_BITOR \
0096 ( \
0097 BOOST_PP_BITOR \
0098 ( \
0099 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
0100 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
0101 ), \
0102 BOOST_PP_BITOR \
0103 ( \
0104 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
0105 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
0106 ) \
0107 ), \
0108 BOOST_VMD_DETAIL_DATA_EQUAL_D, \
0109 BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
0110 ) \
0111 (d,vseq1,vseq2,vtype) \
0112
0113
0114 #define BOOST_VMD_DETAIL_EQUAL_VSEQ(vseq1,vseq2,vtype) \
0115 BOOST_VMD_DETAIL_DATA_EQUAL \
0116 ( \
0117 BOOST_VMD_TO_SEQ(vseq1), \
0118 BOOST_VMD_TO_SEQ(vseq2), \
0119 BOOST_VMD_TYPE_SEQ \
0120 ) \
0121
0122
0123 #define BOOST_VMD_DETAIL_EQUAL_VSEQ_D(d,vseq1,vseq2,vtype) \
0124 BOOST_VMD_DETAIL_DATA_EQUAL_D \
0125 ( \
0126 d, \
0127 BOOST_VMD_TO_SEQ_D(d,vseq1), \
0128 BOOST_VMD_TO_SEQ_D(d,vseq2), \
0129 BOOST_VMD_TYPE_SEQ \
0130 ) \
0131
0132
0133 #define BOOST_VMD_DETAIL_EQUAL_CNI(vseq1,vseq2,vtype) \
0134 BOOST_PP_IIF \
0135 ( \
0136 BOOST_VMD_DETAIL_EQUAL_TYPE \
0137 ( \
0138 vtype, \
0139 BOOST_VMD_TYPE_SEQUENCE \
0140 ), \
0141 BOOST_VMD_DETAIL_EQUAL_VSEQ, \
0142 BOOST_VMD_DETAIL_EQUAL_CNI_CHK \
0143 ) \
0144 (vseq1,vseq2,vtype) \
0145
0146
0147 #define BOOST_VMD_DETAIL_EQUAL_CNI_D(d,vseq1,vseq2,vtype) \
0148 BOOST_PP_IIF \
0149 ( \
0150 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0151 ( \
0152 d, \
0153 vtype, \
0154 BOOST_VMD_TYPE_SEQUENCE \
0155 ), \
0156 BOOST_VMD_DETAIL_EQUAL_VSEQ_D, \
0157 BOOST_VMD_DETAIL_EQUAL_CNI_CHK_D \
0158 ) \
0159 (d,vseq1,vseq2,vtype) \
0160
0161
0162 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE(vseq1,vtype1,type) \
0163 BOOST_PP_BITOR \
0164 ( \
0165 BOOST_VMD_DETAIL_EQUAL_TYPE \
0166 ( \
0167 BOOST_VMD_TYPE_ARRAY, \
0168 vtype1 \
0169 ), \
0170 BOOST_PP_BITAND \
0171 ( \
0172 BOOST_VMD_DETAIL_EQUAL_TYPE \
0173 ( \
0174 BOOST_VMD_TYPE_LIST, \
0175 vtype1 \
0176 ), \
0177 BOOST_PP_COMPL \
0178 ( \
0179 BOOST_VMD_IS_EMPTY_LIST(vseq1) \
0180 ) \
0181 ) \
0182 ) \
0183
0184
0185 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE_D(d,vseq1,vtype1,type) \
0186 BOOST_PP_BITOR \
0187 ( \
0188 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0189 ( \
0190 d, \
0191 BOOST_VMD_TYPE_ARRAY, \
0192 vtype1 \
0193 ), \
0194 BOOST_PP_BITAND \
0195 ( \
0196 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0197 ( \
0198 d, \
0199 BOOST_VMD_TYPE_LIST, \
0200 vtype1 \
0201 ), \
0202 BOOST_PP_COMPL \
0203 ( \
0204 BOOST_VMD_IS_EMPTY_LIST_D(d,vseq1) \
0205 ) \
0206 ) \
0207 ) \
0208
0209
0210 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER(vseq1,vtype1,type) \
0211 BOOST_VMD_IDENTITY_RESULT \
0212 ( \
0213 BOOST_PP_IIF \
0214 ( \
0215 BOOST_VMD_DETAIL_EQUAL_TYPE \
0216 ( \
0217 BOOST_VMD_TYPE_IDENTIFIER, \
0218 type \
0219 ), \
0220 BOOST_VMD_IS_IDENTIFIER, \
0221 BOOST_VMD_IDENTITY(0) \
0222 ) \
0223 (vseq1) \
0224 ) \
0225
0226
0227 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER_D(d,vseq1,vtype1,type) \
0228 BOOST_VMD_IDENTITY_RESULT \
0229 ( \
0230 BOOST_PP_IIF \
0231 ( \
0232 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0233 ( \
0234 d, \
0235 BOOST_VMD_TYPE_IDENTIFIER, \
0236 type \
0237 ), \
0238 BOOST_VMD_IS_IDENTIFIER_D, \
0239 BOOST_VMD_IDENTITY(0) \
0240 ) \
0241 (d,vseq1) \
0242 ) \
0243
0244
0245 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK(vseq1,vtype1,type) \
0246 BOOST_PP_IIF \
0247 ( \
0248 BOOST_VMD_DETAIL_EQUAL_TYPE \
0249 ( \
0250 BOOST_VMD_TYPE_TUPLE, \
0251 type \
0252 ), \
0253 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE, \
0254 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER \
0255 ) \
0256 (vseq1,vtype1,type) \
0257
0258
0259 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_D(d,vseq1,vtype1,type) \
0260 BOOST_PP_IIF \
0261 ( \
0262 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0263 ( \
0264 d, \
0265 BOOST_VMD_TYPE_TUPLE, \
0266 type \
0267 ), \
0268 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE_D, \
0269 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER_D \
0270 ) \
0271 (d,vseq1,vtype1,type) \
0272
0273
0274 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE(vseq1,vtype1,type) \
0275 BOOST_VMD_IDENTITY_RESULT \
0276 ( \
0277 BOOST_PP_IIF \
0278 ( \
0279 BOOST_VMD_DETAIL_EQUAL_TYPE \
0280 ( \
0281 vtype1, \
0282 type \
0283 ), \
0284 BOOST_VMD_IDENTITY(1), \
0285 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK \
0286 ) \
0287 (vseq1,vtype1,type) \
0288 ) \
0289
0290
0291 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_D(d,vseq1,vtype1,type) \
0292 BOOST_VMD_IDENTITY_RESULT \
0293 ( \
0294 BOOST_PP_IIF \
0295 ( \
0296 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0297 ( \
0298 d, \
0299 vtype1, \
0300 type \
0301 ), \
0302 BOOST_VMD_IDENTITY(1), \
0303 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_D \
0304 ) \
0305 (d,vseq1,vtype1,type) \
0306 ) \
0307
0308
0309 #define BOOST_VMD_DETAIL_EQUAL_WT_CHECK(vseq1,vseq2,vtype1,vtype2,type) \
0310 BOOST_VMD_IDENTITY_RESULT \
0311 ( \
0312 BOOST_PP_IIF \
0313 ( \
0314 BOOST_PP_BITAND \
0315 ( \
0316 BOOST_VMD_DETAIL_EQUAL_TYPE \
0317 ( \
0318 vtype1, \
0319 vtype2 \
0320 ), \
0321 BOOST_VMD_IDENTITY_RESULT \
0322 ( \
0323 BOOST_PP_IIF \
0324 ( \
0325 BOOST_VMD_DETAIL_NOT_EMPTY(type), \
0326 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE, \
0327 BOOST_VMD_IDENTITY(1) \
0328 ) \
0329 (vseq1,vtype1,type) \
0330 ) \
0331 ), \
0332 BOOST_VMD_DETAIL_EQUAL_CNI, \
0333 BOOST_VMD_IDENTITY(0) \
0334 ) \
0335 (vseq1,vseq2,vtype1) \
0336 ) \
0337
0338
0339 #define BOOST_VMD_DETAIL_EQUAL_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2,type) \
0340 BOOST_VMD_IDENTITY_RESULT \
0341 ( \
0342 BOOST_PP_IIF \
0343 ( \
0344 BOOST_PP_BITAND \
0345 ( \
0346 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0347 ( \
0348 d, \
0349 vtype1, \
0350 vtype2 \
0351 ), \
0352 BOOST_VMD_IDENTITY_RESULT \
0353 ( \
0354 BOOST_PP_IIF \
0355 ( \
0356 BOOST_VMD_DETAIL_NOT_EMPTY(type), \
0357 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_D, \
0358 BOOST_VMD_IDENTITY(1) \
0359 ) \
0360 (d,vseq1,vtype1,type) \
0361 ) \
0362 ), \
0363 BOOST_VMD_DETAIL_EQUAL_CNI_D, \
0364 BOOST_VMD_IDENTITY(0) \
0365 ) \
0366 (d,vseq1,vseq2,vtype1) \
0367 ) \
0368
0369
0370 #define BOOST_VMD_DETAIL_EQUAL_WT_CONVERT(vseq1,vseq2,vtype1,vtype2,type) \
0371 BOOST_VMD_DETAIL_EQUAL_WT_CHECK \
0372 ( \
0373 vseq1, \
0374 vseq2, \
0375 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
0376 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2), \
0377 type \
0378 ) \
0379
0380
0381 #define BOOST_VMD_DETAIL_EQUAL_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2,type) \
0382 BOOST_VMD_DETAIL_EQUAL_WT_CHECK_D \
0383 ( \
0384 d, \
0385 vseq1, \
0386 vseq2, \
0387 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
0388 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2), \
0389 type \
0390 ) \
0391
0392
0393 #define BOOST_VMD_DETAIL_EQUAL_WT(vseq1,vseq2,vtype1,vtype2,type) \
0394 BOOST_VMD_IDENTITY_RESULT \
0395 ( \
0396 BOOST_PP_IIF \
0397 ( \
0398 BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
0399 BOOST_VMD_IDENTITY(0), \
0400 BOOST_VMD_DETAIL_EQUAL_WT_CONVERT \
0401 ) \
0402 (vseq1,vseq2,vtype1,vtype2,type) \
0403 ) \
0404
0405
0406 #define BOOST_VMD_DETAIL_EQUAL_WT_D(d,vseq1,vseq2,vtype1,vtype2,type) \
0407 BOOST_VMD_IDENTITY_RESULT \
0408 ( \
0409 BOOST_PP_IIF \
0410 ( \
0411 BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
0412 BOOST_VMD_IDENTITY(0), \
0413 BOOST_VMD_DETAIL_EQUAL_WT_CONVERT_D \
0414 ) \
0415 (d,vseq1,vseq2,vtype1,vtype2,type) \
0416 ) \
0417
0418
0419 #define BOOST_VMD_DETAIL_EQUAL_GTYPE(vseq1,vseq2,type) \
0420 BOOST_VMD_DETAIL_EQUAL_WT \
0421 ( \
0422 vseq1, \
0423 vseq2, \
0424 BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
0425 BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE), \
0426 type \
0427 ) \
0428
0429
0430 #define BOOST_VMD_DETAIL_EQUAL_GTYPE_D(d,vseq1,vseq2,type) \
0431 BOOST_VMD_DETAIL_EQUAL_WT_D \
0432 ( \
0433 d, \
0434 vseq1, \
0435 vseq2, \
0436 BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
0437 BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE), \
0438 type \
0439 ) \
0440
0441
0442 #define BOOST_VMD_DETAIL_EQUAL_EBP(vseq1,vseq2,be1,be2,type) \
0443 BOOST_VMD_IDENTITY_RESULT \
0444 ( \
0445 BOOST_PP_IIF \
0446 ( \
0447 BOOST_PP_BITAND \
0448 ( \
0449 BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
0450 BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
0451 ), \
0452 BOOST_VMD_DETAIL_EQUAL_GTYPE, \
0453 BOOST_VMD_IDENTITY(0) \
0454 ) \
0455 (vseq1,vseq2,type) \
0456 ) \
0457
0458
0459 #define BOOST_VMD_DETAIL_EQUAL_EBP_D(d,vseq1,vseq2,be1,be2,type) \
0460 BOOST_VMD_IDENTITY_RESULT \
0461 ( \
0462 BOOST_PP_IIF \
0463 ( \
0464 BOOST_PP_BITAND \
0465 ( \
0466 BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
0467 BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
0468 ), \
0469 BOOST_VMD_DETAIL_EQUAL_GTYPE_D, \
0470 BOOST_VMD_IDENTITY(0) \
0471 ) \
0472 (d,vseq1,vseq2,type) \
0473 ) \
0474
0475
0476 #define BOOST_VMD_DETAIL_EQUAL_EMPTY(vseq1,vseq2,be1,be2,type) \
0477 BOOST_PP_IIF \
0478 ( \
0479 BOOST_PP_BITAND(be1,be2), \
0480 BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
0481 BOOST_VMD_DETAIL_EQUAL_EBP \
0482 ) \
0483 (vseq1,vseq2,be1,be2,type) \
0484
0485
0486 #define BOOST_VMD_DETAIL_EQUAL_EMPTY_D(d,vseq1,vseq2,be1,be2,type) \
0487 BOOST_PP_IIF \
0488 ( \
0489 BOOST_PP_BITAND(be1,be2), \
0490 BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
0491 BOOST_VMD_DETAIL_EQUAL_EBP_D \
0492 ) \
0493 (d,vseq1,vseq2,be1,be2,type) \
0494
0495
0496 #define BOOST_VMD_DETAIL_EQUAL_OV0(vseq1,vseq2) \
0497 BOOST_VMD_DETAIL_EQUAL_EMPTY \
0498 ( \
0499 vseq1, \
0500 , \
0501 BOOST_VMD_IS_EMPTY(vseq1), \
0502 1, \
0503 ) \
0504
0505
0506 #define BOOST_VMD_DETAIL_EQUAL_OV1(vseq1,vseq2) \
0507 BOOST_VMD_DETAIL_EQUAL_EMPTY \
0508 ( \
0509 vseq1, \
0510 vseq2, \
0511 BOOST_VMD_IS_EMPTY(vseq1), \
0512 BOOST_VMD_IS_EMPTY(vseq2), \
0513 ) \
0514
0515
0516 #define BOOST_VMD_DETAIL_EQUAL_OV2(vseq1,vseq2,type) \
0517 BOOST_VMD_DETAIL_EQUAL_EMPTY \
0518 ( \
0519 vseq1, \
0520 vseq2, \
0521 BOOST_VMD_IS_EMPTY(vseq1), \
0522 BOOST_VMD_IS_EMPTY(vseq2), \
0523 type \
0524 ) \
0525
0526
0527 #define BOOST_VMD_DETAIL_EQUAL_D_OV0(d,vseq1,vseq2) \
0528 BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
0529 ( \
0530 d, \
0531 vseq1, \
0532 , \
0533 BOOST_VMD_IS_EMPTY(vseq1), \
0534 1, \
0535 ) \
0536
0537
0538 #define BOOST_VMD_DETAIL_EQUAL_D_OV1(d,vseq1,vseq2) \
0539 BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
0540 ( \
0541 d, \
0542 vseq1, \
0543 vseq2, \
0544 BOOST_VMD_IS_EMPTY(vseq1), \
0545 BOOST_VMD_IS_EMPTY(vseq2), \
0546 ) \
0547
0548
0549 #define BOOST_VMD_DETAIL_EQUAL_D_OV2(d,vseq1,vseq2,type) \
0550 BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
0551 ( \
0552 d, \
0553 vseq1, \
0554 vseq2, \
0555 BOOST_VMD_IS_EMPTY(vseq1), \
0556 BOOST_VMD_IS_EMPTY(vseq2), \
0557 type \
0558 ) \
0559
0560
0561 #if BOOST_VMD_MSVC
0562
0563 #define BOOST_VMD_DETAIL_EQUAL(vseq1,...) \
0564 BOOST_PP_CAT(BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_OV,__VA_ARGS__)(vseq1,__VA_ARGS__),BOOST_PP_EMPTY()) \
0565
0566
0567 #define BOOST_VMD_DETAIL_EQUAL_D(d,vseq1,...) \
0568 BOOST_PP_CAT(BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_D_OV,__VA_ARGS__)(d,vseq1,__VA_ARGS__),BOOST_PP_EMPTY()) \
0569
0570
0571 #else
0572
0573 #define BOOST_VMD_DETAIL_EQUAL(vseq1,...) \
0574 BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_OV,__VA_ARGS__)(vseq1,__VA_ARGS__) \
0575
0576
0577 #define BOOST_VMD_DETAIL_EQUAL_D(d,vseq1,...) \
0578 BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_D_OV,__VA_ARGS__)(d,vseq1,__VA_ARGS__) \
0579
0580
0581 #endif
0582
0583 #endif