File indexing completed on 2025-01-30 10:02:16
0001
0002
0003
0004
0005
0006
0007 #if !defined(BOOST_VMD_DETAIL_SEQUENCE_ELEM_HPP)
0008 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HPP
0009
0010 #include <boost/preprocessor/arithmetic/dec.hpp>
0011 #include <boost/preprocessor/comparison/greater.hpp>
0012 #include <boost/preprocessor/control/expr_if.hpp>
0013 #include <boost/preprocessor/control/expr_iif.hpp>
0014 #include <boost/preprocessor/control/if.hpp>
0015 #include <boost/preprocessor/control/iif.hpp>
0016 #include <boost/preprocessor/logical/bitand.hpp>
0017 #include <boost/preprocessor/logical/bitor.hpp>
0018 #include <boost/preprocessor/logical/compl.hpp>
0019 #include <boost/preprocessor/seq/elem.hpp>
0020 #include <boost/preprocessor/seq/size.hpp>
0021 #include <boost/preprocessor/tuple/elem.hpp>
0022 #include <boost/preprocessor/tuple/push_back.hpp>
0023 #include <boost/preprocessor/tuple/replace.hpp>
0024 #include <boost/preprocessor/variadic/elem.hpp>
0025 #include <boost/vmd/empty.hpp>
0026 #include <boost/vmd/identity.hpp>
0027 #include <boost/vmd/is_empty.hpp>
0028 #include <boost/vmd/is_identifier.hpp>
0029 #include <boost/vmd/detail/empty_result.hpp>
0030 #include <boost/vmd/detail/equal_type.hpp>
0031 #include <boost/vmd/detail/match_identifier.hpp>
0032 #include <boost/vmd/detail/mods.hpp>
0033 #include <boost/vmd/detail/not_empty.hpp>
0034 #include <boost/vmd/detail/only_after.hpp>
0035 #include <boost/vmd/detail/sequence_common.hpp>
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type) \
0048 BOOST_PP_BITAND \
0049 ( \
0050 BOOST_VMD_DETAIL_EQUAL_TYPE \
0051 ( \
0052 type, \
0053 BOOST_VMD_TYPE_IDENTIFIER \
0054 ), \
0055 BOOST_VMD_DETAIL_NOT_EMPTY \
0056 ( \
0057 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0058 ) \
0059 ) \
0060
0061
0062 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type) \
0063 BOOST_PP_BITAND \
0064 ( \
0065 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0066 ( \
0067 d, \
0068 type, \
0069 BOOST_VMD_TYPE_IDENTIFIER \
0070 ), \
0071 BOOST_VMD_DETAIL_NOT_EMPTY \
0072 ( \
0073 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0074 ) \
0075 ) \
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT(nm) \
0088 BOOST_PP_BITAND \
0089 ( \
0090 BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
0091 BOOST_PP_BITAND \
0092 ( \
0093 BOOST_VMD_DETAIL_EQUAL_TYPE \
0094 ( \
0095 BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm), \
0096 BOOST_VMD_TYPE_IDENTIFIER \
0097 ), \
0098 BOOST_VMD_DETAIL_NOT_EMPTY \
0099 ( \
0100 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0101 ) \
0102 ) \
0103 ) \
0104
0105
0106 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT_D(d,nm) \
0107 BOOST_PP_BITAND \
0108 ( \
0109 BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
0110 BOOST_PP_BITAND \
0111 ( \
0112 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0113 ( \
0114 d, \
0115 BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm), \
0116 BOOST_VMD_TYPE_IDENTIFIER \
0117 ), \
0118 BOOST_VMD_DETAIL_NOT_EMPTY \
0119 ( \
0120 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0121 ) \
0122 ) \
0123 ) \
0124
0125
0126 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX(nm) \
0127 BOOST_PP_IIF \
0128 ( \
0129 BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(nm), \
0130 (,,), \
0131 (,) \
0132 ) \
0133
0134
0135 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX(nm) \
0136 BOOST_PP_EXPR_IIF \
0137 ( \
0138 BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(nm), \
0139 (,) \
0140 ) \
0141
0142
0143
0144
0145
0146
0147
0148
0149 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
0150 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN \
0151 ( \
0152 BOOST_PP_IIF \
0153 ( \
0154 BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT(nm), \
0155 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX, \
0156 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX \
0157 ) \
0158 (nm),nm, \
0159 ) \
0160
0161
0162 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
0163 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN \
0164 ( \
0165 BOOST_PP_IIF \
0166 ( \
0167 BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT_D(d,nm), \
0168 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX, \
0169 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX \
0170 ) \
0171 (nm),nm, \
0172 ) \
0173
0174
0175 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE(res) \
0176 BOOST_PP_TUPLE_ELEM \
0177 ( \
0178 0, \
0179 BOOST_PP_TUPLE_ELEM(0,res) \
0180 ) \
0181
0182
0183 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY(res) \
0184 BOOST_PP_TUPLE_ELEM(0,res) \
0185
0186
0187 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE(res) \
0188 BOOST_PP_TUPLE_ELEM \
0189 ( \
0190 1, \
0191 BOOST_PP_TUPLE_ELEM(0,res) \
0192 ) \
0193
0194
0195 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY(res) \
0196 BOOST_PP_TUPLE_ELEM(1,res) \
0197
0198
0199
0200
0201
0202
0203
0204
0205 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm) \
0206 BOOST_PP_IIF \
0207 ( \
0208 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0209 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE, \
0210 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY \
0211 ) \
0212 (res) \
0213
0214
0215 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm) \
0216 BOOST_PP_IIF \
0217 ( \
0218 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0219 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE, \
0220 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY \
0221 ) \
0222 (res) \
0223
0224
0225
0226
0227
0228
0229
0230
0231 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE(res,nm) \
0232 BOOST_PP_IIF \
0233 ( \
0234 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0235 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE, \
0236 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY \
0237 ) \
0238 (res) \
0239
0240
0241 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_D(d,res,nm) \
0242 BOOST_PP_IIF \
0243 ( \
0244 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0245 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE, \
0246 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY \
0247 ) \
0248 (res) \
0249
0250
0251 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE(res) \
0252 BOOST_VMD_IS_EMPTY \
0253 ( \
0254 BOOST_PP_TUPLE_ELEM(0,res) \
0255 ) \
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED(res,nm) \
0267 BOOST_PP_IIF \
0268 ( \
0269 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0270 BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE, \
0271 BOOST_VMD_IS_EMPTY \
0272 ) \
0273 (res) \
0274
0275
0276 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_D(d,res,nm) \
0277 BOOST_PP_IIF \
0278 ( \
0279 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0280 BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE, \
0281 BOOST_VMD_IS_EMPTY \
0282 ) \
0283 (res) \
0284
0285
0286 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM(seq,elem) \
0287 BOOST_PP_IIF \
0288 ( \
0289 BOOST_PP_GREATER(BOOST_PP_SEQ_SIZE(seq),elem), \
0290 BOOST_PP_SEQ_ELEM, \
0291 BOOST_VMD_EMPTY \
0292 ) \
0293 (elem,seq) \
0294
0295
0296 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM_D(d,seq,elem) \
0297 BOOST_PP_IIF \
0298 ( \
0299 BOOST_PP_GREATER_D(d,BOOST_PP_SEQ_SIZE(seq),elem), \
0300 BOOST_PP_SEQ_ELEM, \
0301 BOOST_VMD_EMPTY \
0302 ) \
0303 (elem,seq) \
0304
0305
0306 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES(data,elem) \
0307 ( \
0308 BOOST_PP_SEQ_ELEM(elem,BOOST_PP_TUPLE_ELEM(0,data)), \
0309 BOOST_PP_TUPLE_ELEM(1,data) \
0310 ) \
0311
0312
0313 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM(data,elem) \
0314 BOOST_PP_IIF \
0315 ( \
0316 BOOST_PP_GREATER(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(0,data)),elem), \
0317 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES, \
0318 BOOST_VMD_DETAIL_EMPTY_RESULT \
0319 ) \
0320 (data,elem) \
0321
0322
0323 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_D(d,data,elem) \
0324 BOOST_PP_IIF \
0325 ( \
0326 BOOST_PP_GREATER_D(d,BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(0,data)),elem), \
0327 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES, \
0328 BOOST_VMD_DETAIL_EMPTY_RESULT \
0329 ) \
0330 (data,elem) \
0331
0332
0333 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY(seq,elem) \
0334 BOOST_PP_IIF \
0335 ( \
0336 BOOST_VMD_IS_EMPTY(seq), \
0337 BOOST_VMD_EMPTY, \
0338 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM \
0339 ) \
0340 (seq,elem) \
0341
0342
0343 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_D(d,seq,elem) \
0344 BOOST_PP_IIF \
0345 ( \
0346 BOOST_VMD_IS_EMPTY(seq), \
0347 BOOST_VMD_EMPTY, \
0348 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM_D \
0349 ) \
0350 (d,seq,elem) \
0351
0352
0353 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER(data,elem) \
0354 BOOST_PP_IIF \
0355 ( \
0356 BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,data)), \
0357 BOOST_VMD_DETAIL_EMPTY_RESULT, \
0358 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM \
0359 ) \
0360 (data,elem) \
0361
0362
0363 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_D(d,data,elem) \
0364 BOOST_PP_IIF \
0365 ( \
0366 BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,data)), \
0367 BOOST_VMD_DETAIL_EMPTY_RESULT, \
0368 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_D \
0369 ) \
0370 (d,data,elem) \
0371
0372
0373 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ(seq,elem,nm) \
0374 BOOST_PP_IIF \
0375 ( \
0376 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0377 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER, \
0378 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY \
0379 ) \
0380 (seq,elem) \
0381
0382
0383 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_D(d,seq,elem,nm) \
0384 BOOST_PP_IIF \
0385 ( \
0386 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0387 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_D, \
0388 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_D \
0389 ) \
0390 (d,seq,elem) \
0391
0392
0393 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(...) \
0394 BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__) \
0395
0396
0397 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS(elem,vseq,nm) \
0398 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ \
0399 ( \
0400 BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE \
0401 ( \
0402 vseq, \
0403 elem, \
0404 BOOST_VMD_TYPE_SEQ, \
0405 nm \
0406 ), \
0407 elem, \
0408 nm \
0409 ) \
0410
0411
0412 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS_D(d,elem,vseq,nm) \
0413 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_D \
0414 ( \
0415 d, \
0416 BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_D \
0417 ( \
0418 d, \
0419 vseq, \
0420 elem, \
0421 BOOST_VMD_TYPE_SEQ, \
0422 nm \
0423 ), \
0424 elem, \
0425 nm \
0426 ) \
0427
0428
0429 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY(elem,vseq,nm) \
0430 BOOST_PP_EXPR_IIF \
0431 ( \
0432 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0433 (,) \
0434 ) \
0435
0436
0437 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY_D(d,elem,vseq,nm) \
0438 BOOST_PP_EXPR_IIF \
0439 ( \
0440 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0441 (,) \
0442 ) \
0443
0444
0445 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE(elem,vseq,nm) \
0446 BOOST_PP_IIF \
0447 ( \
0448 BOOST_VMD_DETAIL_NOT_EMPTY(vseq), \
0449 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS, \
0450 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY \
0451 ) \
0452 (elem,vseq,nm) \
0453
0454
0455 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE_D(d,elem,vseq,nm) \
0456 BOOST_PP_IIF \
0457 ( \
0458 BOOST_VMD_DETAIL_NOT_EMPTY(vseq), \
0459 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS_D, \
0460 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY_D \
0461 ) \
0462 (d,elem,vseq,nm) \
0463
0464
0465 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D(d,res,nm,type) \
0466 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN(res,nm,type) \
0467
0468
0469 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN(res,nm,type) \
0470 BOOST_VMD_IDENTITY_RESULT \
0471 ( \
0472 BOOST_PP_IIF \
0473 ( \
0474 BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \
0475 BOOST_PP_TUPLE_ELEM, \
0476 BOOST_VMD_IDENTITY(res) \
0477 ) \
0478 (1,res) \
0479 ) \
0480
0481
0482 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_INDEX_JRES(data,index) \
0483 BOOST_PP_IF \
0484 ( \
0485 index, \
0486 (data,BOOST_PP_DEC(index)), \
0487 (,) \
0488 ) \
0489
0490
0491 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_JRES(data,index) \
0492 BOOST_PP_EXPR_IF \
0493 ( \
0494 index, \
0495 data \
0496 ) \
0497
0498
0499 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH(data,nm,index) \
0500 BOOST_PP_IIF \
0501 ( \
0502 BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
0503 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_INDEX_JRES, \
0504 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_JRES \
0505 ) \
0506 (data,index) \
0507
0508
0509 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP(data,nm) \
0510 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH \
0511 ( \
0512 data, \
0513 nm, \
0514 BOOST_VMD_DETAIL_MATCH_IDENTIFIER \
0515 ( \
0516 data, \
0517 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0518 ) \
0519 ) \
0520
0521
0522 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP_D(d,data,nm) \
0523 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH \
0524 ( \
0525 data, \
0526 nm, \
0527 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_D \
0528 ( \
0529 d, \
0530 data, \
0531 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0532 ) \
0533 ) \
0534
0535
0536 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID(data,nm,type) \
0537 BOOST_VMD_IDENTITY_RESULT \
0538 ( \
0539 BOOST_PP_IIF \
0540 ( \
0541 BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type), \
0542 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP, \
0543 BOOST_VMD_IDENTITY(data) \
0544 ) \
0545 (data,nm) \
0546 ) \
0547
0548
0549 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_D(d,data,nm,type) \
0550 BOOST_VMD_IDENTITY_RESULT \
0551 ( \
0552 BOOST_PP_IIF \
0553 ( \
0554 BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type), \
0555 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP_D, \
0556 BOOST_VMD_IDENTITY(data) \
0557 ) \
0558 (d,data,nm) \
0559 ) \
0560
0561
0562 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY(res,nm,type) \
0563 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID \
0564 ( \
0565 BOOST_PP_TUPLE_ELEM(1,res), \
0566 nm, \
0567 type \
0568 ) \
0569
0570
0571 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_D(d,res,nm,type) \
0572 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_D \
0573 ( \
0574 d, \
0575 BOOST_PP_TUPLE_ELEM(1,res), \
0576 nm, \
0577 type \
0578 ) \
0579
0580
0581 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE(res,nm,type) \
0582 BOOST_PP_TUPLE_REPLACE \
0583 ( \
0584 res, \
0585 0, \
0586 BOOST_PP_TUPLE_ELEM \
0587 ( \
0588 1, \
0589 BOOST_PP_TUPLE_ELEM(0,res) \
0590 ) \
0591 ) \
0592
0593
0594 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE_D(d,res,nm,type) \
0595 BOOST_PP_TUPLE_REPLACE_D \
0596 ( \
0597 d, \
0598 res, \
0599 0, \
0600 BOOST_PP_TUPLE_ELEM \
0601 ( \
0602 1, \
0603 BOOST_PP_TUPLE_ELEM(0,res) \
0604 ) \
0605 ) \
0606
0607
0608 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER(res,nm,type) \
0609 BOOST_PP_IIF \
0610 ( \
0611 BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \
0612 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN, \
0613 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE \
0614 ) \
0615 (res,nm,type) \
0616
0617
0618 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D(d,res,nm,type) \
0619 BOOST_PP_IIF \
0620 ( \
0621 BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \
0622 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D, \
0623 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE_D \
0624 ) \
0625 (d,res,nm,type) \
0626
0627
0628 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS(res,nm,type,index) \
0629 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER \
0630 ( \
0631 BOOST_PP_TUPLE_PUSH_BACK(res,BOOST_PP_DEC(index)), \
0632 nm, \
0633 type \
0634 ) \
0635
0636
0637 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS_D(d,res,nm,type,index) \
0638 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D \
0639 ( \
0640 d, \
0641 BOOST_PP_TUPLE_PUSH_BACK(res,BOOST_PP_DEC(index)), \
0642 nm, \
0643 type \
0644 ) \
0645
0646
0647 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE(res,nm,type,index) \
0648 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
0649
0650
0651 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE_D(d,res,nm,type,index) \
0652 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
0653
0654
0655 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES(res,nm,type,index) \
0656 BOOST_PP_IF \
0657 ( \
0658 index, \
0659 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS, \
0660 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE \
0661 ) \
0662 (res,nm,type,index) \
0663
0664
0665 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES_D(d,res,nm,type,index) \
0666 BOOST_PP_IF \
0667 ( \
0668 index, \
0669 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS_D, \
0670 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE_D \
0671 ) \
0672 (d,res,nm,type,index) \
0673
0674
0675 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE(res,nm,type) \
0676 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
0677
0678
0679 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE_D(d,res,nm,type) \
0680 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
0681
0682
0683 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES(res,nm,type,index) \
0684 BOOST_PP_IF \
0685 ( \
0686 index, \
0687 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER, \
0688 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE \
0689 ) \
0690 (res,nm,type) \
0691
0692
0693 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_D(d,res,nm,type,index) \
0694 BOOST_PP_IF \
0695 ( \
0696 index, \
0697 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D, \
0698 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE_D \
0699 ) \
0700 (d,res,nm,type) \
0701
0702
0703 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES(res,nm,type,index) \
0704 BOOST_PP_IIF \
0705 ( \
0706 BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
0707 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES, \
0708 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES \
0709 ) \
0710 (res,nm,type,index) \
0711
0712
0713 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES_D(d,res,nm,type,index) \
0714 BOOST_PP_IIF \
0715 ( \
0716 BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
0717 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES_D, \
0718 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_D \
0719 ) \
0720 (d,res,nm,type,index) \
0721
0722
0723 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID(res,nm,type) \
0724 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES \
0725 ( \
0726 res, \
0727 nm, \
0728 type, \
0729 BOOST_VMD_DETAIL_MATCH_IDENTIFIER \
0730 ( \
0731 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm), \
0732 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0733 ) \
0734 ) \
0735
0736
0737 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_D(d,res,nm,type) \
0738 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES_D \
0739 ( \
0740 d, \
0741 res, \
0742 nm, \
0743 type, \
0744 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_D \
0745 ( \
0746 d, \
0747 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm), \
0748 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0749 ) \
0750 ) \
0751
0752
0753 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT(res,nm,type) \
0754 BOOST_PP_IIF \
0755 ( \
0756 BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type), \
0757 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID, \
0758 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER \
0759 ) \
0760 (res,nm,type) \
0761
0762
0763 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_D(d,res,nm,type) \
0764 BOOST_PP_IIF \
0765 ( \
0766 BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type), \
0767 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_D, \
0768 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D \
0769 ) \
0770 (d,res,nm,type) \
0771
0772
0773 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK(res,nm,type) \
0774 BOOST_PP_IIF \
0775 ( \
0776 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0777 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT, \
0778 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY \
0779 ) \
0780 (res,nm,type) \
0781
0782
0783 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_D(d,res,nm,type) \
0784 BOOST_PP_IIF \
0785 ( \
0786 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0787 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_D, \
0788 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_D \
0789 ) \
0790 (d,res,nm,type) \
0791
0792
0793 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED(res,nm,type) \
0794 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
0795
0796
0797 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED_D(d,res,nm,type) \
0798 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
0799
0800
0801 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID(res,nm,type) \
0802 BOOST_VMD_IS_IDENTIFIER \
0803 ( \
0804 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm) \
0805 ) \
0806
0807
0808 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID_D(d,res,nm,type) \
0809 BOOST_VMD_IS_IDENTIFIER_D \
0810 ( \
0811 d, \
0812 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm) \
0813 ) \
0814
0815
0816 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER(res,nm,type) \
0817 BOOST_VMD_DETAIL_EQUAL_TYPE \
0818 ( \
0819 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE(res,nm), \
0820 type \
0821 ) \
0822
0823
0824 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER_D(d,res,nm,type) \
0825 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0826 ( \
0827 d, \
0828 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_D(d,res,nm), \
0829 type \
0830 ) \
0831
0832
0833 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE(res,nm,type) \
0834 BOOST_PP_IIF \
0835 ( \
0836 BOOST_VMD_DETAIL_EQUAL_TYPE \
0837 ( \
0838 BOOST_VMD_TYPE_IDENTIFIER, \
0839 type \
0840 ), \
0841 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID, \
0842 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER \
0843 ) \
0844 (res,nm,type) \
0845
0846
0847 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_D(d,res,nm,type) \
0848 BOOST_PP_IIF \
0849 ( \
0850 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0851 ( \
0852 d, \
0853 BOOST_VMD_TYPE_IDENTIFIER, \
0854 type \
0855 ), \
0856 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID_D, \
0857 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER_D \
0858 ) \
0859 (d,res,nm,type) \
0860
0861
0862 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT(res,nm,type) \
0863 BOOST_PP_IIF \
0864 ( \
0865 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE(res,nm,type), \
0866 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK, \
0867 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED \
0868 ) \
0869 (res,nm,type) \
0870
0871
0872 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_D(d,res,nm,type) \
0873 BOOST_PP_IIF \
0874 ( \
0875 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_D(d,res,nm,type), \
0876 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_D, \
0877 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED_D \
0878 ) \
0879 (d,res,nm,type) \
0880
0881
0882 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF(res,nm,type) \
0883 BOOST_PP_IIF \
0884 ( \
0885 BOOST_VMD_IS_EMPTY(type), \
0886 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN, \
0887 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT \
0888 ) \
0889 (res,nm,type) \
0890
0891
0892 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF_D(d,res,nm,type) \
0893 BOOST_PP_IIF \
0894 ( \
0895 BOOST_VMD_IS_EMPTY(type), \
0896 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D, \
0897 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_D \
0898 ) \
0899 (d,res,nm,type) \
0900
0901
0902 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED(res,nm,type) \
0903 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
0904
0905
0906 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED_D(d,res,nm,type) \
0907 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
0908
0909
0910 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE(res,nm,type) \
0911 BOOST_PP_IIF \
0912 ( \
0913 BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED(res,nm), \
0914 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED, \
0915 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF \
0916 ) \
0917 (res,nm,type) \
0918
0919
0920 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_D(d,res,nm,type) \
0921 BOOST_PP_IIF \
0922 ( \
0923 BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_D(d,res,nm), \
0924 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED_D, \
0925 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF_D \
0926 ) \
0927 (d,res,nm,type) \
0928
0929
0930 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA(res,nm) \
0931 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE \
0932 ( \
0933 res, \
0934 nm, \
0935 BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm) \
0936 ) \
0937
0938
0939 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA_D(d,res,nm) \
0940 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_D \
0941 ( \
0942 d, \
0943 res, \
0944 nm, \
0945 BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm) \
0946 ) \
0947
0948
0949 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM(elem,vseq,nm) \
0950 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA \
0951 ( \
0952 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE(elem,vseq,nm), \
0953 nm \
0954 ) \
0955
0956
0957 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_D(d,elem,vseq,nm) \
0958 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA_D \
0959 ( \
0960 d, \
0961 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE_D(d,elem,vseq,nm), \
0962 nm \
0963 ) \
0964
0965
0966 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM(allow,elem,...) \
0967 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM \
0968 ( \
0969 elem, \
0970 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
0971 BOOST_VMD_DETAIL_NEW_MODS(allow,__VA_ARGS__) \
0972 ) \
0973
0974
0975 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_D(d,allow,elem,...) \
0976 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_D \
0977 ( \
0978 d, \
0979 elem, \
0980 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
0981 BOOST_VMD_DETAIL_NEW_MODS_D(d,allow,__VA_ARGS__) \
0982 ) \
0983
0984
0985 #endif