1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
//---------------------------------------------------------------------------
#define REP_LIST_ARRAY_ELEMS(z, n, array) \
BOOST_PP_ARRAY_ELEM(n, array) \
BOOST_PP_COMMA_IF( \
BOOST_PP_GREATER( \
BOOST_PP_DEC( \
BOOST_PP_ARRAY_SIZE(array) \
), \
n \
) \
) \
#define LIST_ARRAY_ELEMS(array) \
BOOST_PP_REPEAT( \
BOOST_PP_ARRAY_SIZE(array), \
REP_LIST_ARRAY_ELEMS, \
array \
) \
#define ADD_ARRAY_SIZES(arrayA, arrayB) \
BOOST_PP_ADD( \
BOOST_PP_ARRAY_SIZE(arrayA), \
BOOST_PP_ARRAY_SIZE(arrayB) \
) \
#define MERGE_ARRAYS_APPEND(arrayA, arrayB) \
(ADD_ARRAY_SIZES(arrayA, arrayB), \
(LIST_ARRAY_ELEMS(arrayA) \
BOOST_PP_COMMA_IF(BOOST_PP_ARRAY_SIZE(arrayB)) \
LIST_ARRAY_ELEMS(arrayB)) \
) \
//---------------------------------------------------------------------------
//Testing macros
#define REP_ARRAY_OF_SUBARRAYS(z, n, array) \
BOOST_PP_COMMA_IF(n) \
(1, BOOST_PP_ARRAY_ELEM(n, array)) \
#define GEN_ARRAY_OF_SUBARRAYS(array) \
(BOOST_PP_ARRAY_SIZE(array), \
(BOOST_PP_REPEAT( \
BOOST_PP_ARRAY_SIZE(array), \
REP_ARRAY_OF_SUBARRAYS, \
array \
) ) ) \
//-----------------------------
#define SUB_REP_COMBINE_2_ARRAYS(arrayA, arrayB) \
MERGE_ARRAYS_APPEND(arrayA, arrayB) \
#define SUB_REP_COMBINE_ARRAY_OF_SUB_B(n, arrayA, arrayofsubB) \
( SUB_REP_COMBINE_2_ARRAYS(arrayA, \
BOOST_PP_ARRAY_ELEM(n, arrayofsubB) \
) ) \
#define REP_COMBINE_ARRAY_OF_SUB_B(z, n, param) \
SUB_REP_COMBINE_ARRAY_OF_SUB_B(n, \
BOOST_PP_TUPLE_ELEM(2, 0, param), \
BOOST_PP_TUPLE_ELEM(2, 1, param) \
) \
#define SUB_REP_COMBINE_ARRAYS_OF_SUB_A(n, arrayofsubA, arrayofsubB) \
BOOST_PP_REPEAT( \
BOOST_PP_ARRAY_SIZE(arrayofsubB), \
REP_COMBINE_ARRAY_OF_SUB_B, \
(BOOST_PP_ARRAY_ELEM(n, arrayofsubA), arrayofsubB) \
) \
#define REP_COMBINE_ARRAYS_OF_SUB_A(z, n, param) \
SUB_REP_COMBINE_ARRAYS_OF_SUB_A(n, \
BOOST_PP_TUPLE_ELEM(2, 0, param), \
BOOST_PP_TUPLE_ELEM(2, 1, param) \
) \
#define CROSS_COMBINE_ARRAYS_OF_SUB(arrayofsubA, arrayofsubB) \
BOOST_PP_EXPAND(BOOST_PP_SEQ_TO_ARRAY( \
BOOST_PP_REPEAT( \
BOOST_PP_ARRAY_SIZE(arrayofsubA), \
REP_COMBINE_ARRAYS_OF_SUB_A, \
(arrayofsubA, arrayofsubB) \
) \
)) \
//-----------------------------
#define SELF_CROSS_COMBINE_ARRAYS_OF_SUB_2(array) \
CROSS_COMBINE_ARRAYS_OF_SUB(array, array) \
#define SELF_CROSS_COMBINE_ARRAYS_OF_SUB_3(array) \
CROSS_COMBINE_ARRAYS_OF_SUB( \
BOOST_PP_EXPAND(SELF_CROSS_COMBINE_ARRAYS_OF_SUB_2(array)), \
array \
) \
#define SELF_CROSS_COMBINE_ARRAYS_OF_SUB_4(array) \
CROSS_COMBINE_ARRAYS_OF_SUB( \
BOOST_PP_EXPAND(SELF_CROSS_COMBINE_ARRAYS_OF_SUB_2(array)), \
BOOST_PP_EXPAND(SELF_CROSS_COMBINE_ARRAYS_OF_SUB_2(array)) \
) \
#define SELF_CROSS_COMBINE_ARRAYS_OF_SUB(times, array) \
BOOST_PP_CAT(SELF_CROSS_COMBINE_ARRAYS_OF_SUB_, times)(array) \ |
Partager