1f92157deSopenharmony_ci#ifndef GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_PP_H_ 2f92157deSopenharmony_ci#define GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_PP_H_ 3f92157deSopenharmony_ci 4f92157deSopenharmony_ci// Expands and concatenates the arguments. Constructed macros reevaluate. 5f92157deSopenharmony_ci#define GMOCK_PP_CAT(_1, _2) GMOCK_PP_INTERNAL_CAT(_1, _2) 6f92157deSopenharmony_ci 7f92157deSopenharmony_ci// Expands and stringifies the only argument. 8f92157deSopenharmony_ci#define GMOCK_PP_STRINGIZE(...) GMOCK_PP_INTERNAL_STRINGIZE(__VA_ARGS__) 9f92157deSopenharmony_ci 10f92157deSopenharmony_ci// Returns empty. Given a variadic number of arguments. 11f92157deSopenharmony_ci#define GMOCK_PP_EMPTY(...) 12f92157deSopenharmony_ci 13f92157deSopenharmony_ci// Returns a comma. Given a variadic number of arguments. 14f92157deSopenharmony_ci#define GMOCK_PP_COMMA(...) , 15f92157deSopenharmony_ci 16f92157deSopenharmony_ci// Returns the only argument. 17f92157deSopenharmony_ci#define GMOCK_PP_IDENTITY(_1) _1 18f92157deSopenharmony_ci 19f92157deSopenharmony_ci// Evaluates to the number of arguments after expansion. 20f92157deSopenharmony_ci// 21f92157deSopenharmony_ci// #define PAIR x, y 22f92157deSopenharmony_ci// 23f92157deSopenharmony_ci// GMOCK_PP_NARG() => 1 24f92157deSopenharmony_ci// GMOCK_PP_NARG(x) => 1 25f92157deSopenharmony_ci// GMOCK_PP_NARG(x, y) => 2 26f92157deSopenharmony_ci// GMOCK_PP_NARG(PAIR) => 2 27f92157deSopenharmony_ci// 28f92157deSopenharmony_ci// Requires: the number of arguments after expansion is at most 15. 29f92157deSopenharmony_ci#define GMOCK_PP_NARG(...) \ 30f92157deSopenharmony_ci GMOCK_PP_INTERNAL_16TH( \ 31f92157deSopenharmony_ci (__VA_ARGS__, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)) 32f92157deSopenharmony_ci 33f92157deSopenharmony_ci// Returns 1 if the expansion of arguments has an unprotected comma. Otherwise 34f92157deSopenharmony_ci// returns 0. Requires no more than 15 unprotected commas. 35f92157deSopenharmony_ci#define GMOCK_PP_HAS_COMMA(...) \ 36f92157deSopenharmony_ci GMOCK_PP_INTERNAL_16TH( \ 37f92157deSopenharmony_ci (__VA_ARGS__, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0)) 38f92157deSopenharmony_ci 39f92157deSopenharmony_ci// Returns the first argument. 40f92157deSopenharmony_ci#define GMOCK_PP_HEAD(...) GMOCK_PP_INTERNAL_HEAD((__VA_ARGS__, unusedArg)) 41f92157deSopenharmony_ci 42f92157deSopenharmony_ci// Returns the tail. A variadic list of all arguments minus the first. Requires 43f92157deSopenharmony_ci// at least one argument. 44f92157deSopenharmony_ci#define GMOCK_PP_TAIL(...) GMOCK_PP_INTERNAL_TAIL((__VA_ARGS__)) 45f92157deSopenharmony_ci 46f92157deSopenharmony_ci// Calls CAT(_Macro, NARG(__VA_ARGS__))(__VA_ARGS__) 47f92157deSopenharmony_ci#define GMOCK_PP_VARIADIC_CALL(_Macro, ...) \ 48f92157deSopenharmony_ci GMOCK_PP_IDENTITY( \ 49f92157deSopenharmony_ci GMOCK_PP_CAT(_Macro, GMOCK_PP_NARG(__VA_ARGS__))(__VA_ARGS__)) 50f92157deSopenharmony_ci 51f92157deSopenharmony_ci// If the arguments after expansion have no tokens, evaluates to `1`. Otherwise 52f92157deSopenharmony_ci// evaluates to `0`. 53f92157deSopenharmony_ci// 54f92157deSopenharmony_ci// Requires: * the number of arguments after expansion is at most 15. 55f92157deSopenharmony_ci// * If the argument is a macro, it must be able to be called with one 56f92157deSopenharmony_ci// argument. 57f92157deSopenharmony_ci// 58f92157deSopenharmony_ci// Implementation details: 59f92157deSopenharmony_ci// 60f92157deSopenharmony_ci// There is one case when it generates a compile error: if the argument is macro 61f92157deSopenharmony_ci// that cannot be called with one argument. 62f92157deSopenharmony_ci// 63f92157deSopenharmony_ci// #define M(a, b) // it doesn't matter what it expands to 64f92157deSopenharmony_ci// 65f92157deSopenharmony_ci// // Expected: expands to `0`. 66f92157deSopenharmony_ci// // Actual: compile error. 67f92157deSopenharmony_ci// GMOCK_PP_IS_EMPTY(M) 68f92157deSopenharmony_ci// 69f92157deSopenharmony_ci// There are 4 cases tested: 70f92157deSopenharmony_ci// 71f92157deSopenharmony_ci// * __VA_ARGS__ possible expansion has no unparen'd commas. Expected 0. 72f92157deSopenharmony_ci// * __VA_ARGS__ possible expansion is not enclosed in parenthesis. Expected 0. 73f92157deSopenharmony_ci// * __VA_ARGS__ possible expansion is not a macro that ()-evaluates to a comma. 74f92157deSopenharmony_ci// Expected 0 75f92157deSopenharmony_ci// * __VA_ARGS__ is empty, or has unparen'd commas, or is enclosed in 76f92157deSopenharmony_ci// parenthesis, or is a macro that ()-evaluates to comma. Expected 1. 77f92157deSopenharmony_ci// 78f92157deSopenharmony_ci// We trigger detection on '0001', i.e. on empty. 79f92157deSopenharmony_ci#define GMOCK_PP_IS_EMPTY(...) \ 80f92157deSopenharmony_ci GMOCK_PP_INTERNAL_IS_EMPTY(GMOCK_PP_HAS_COMMA(__VA_ARGS__), \ 81f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_PP_COMMA __VA_ARGS__), \ 82f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(__VA_ARGS__()), \ 83f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_PP_COMMA __VA_ARGS__())) 84f92157deSopenharmony_ci 85f92157deSopenharmony_ci// Evaluates to _Then if _Cond is 1 and _Else if _Cond is 0. 86f92157deSopenharmony_ci#define GMOCK_PP_IF(_Cond, _Then, _Else) \ 87f92157deSopenharmony_ci GMOCK_PP_CAT(GMOCK_PP_INTERNAL_IF_, _Cond)(_Then, _Else) 88f92157deSopenharmony_ci 89f92157deSopenharmony_ci// Similar to GMOCK_PP_IF but takes _Then and _Else in parentheses. 90f92157deSopenharmony_ci// 91f92157deSopenharmony_ci// GMOCK_PP_GENERIC_IF(1, (a, b, c), (d, e, f)) => a, b, c 92f92157deSopenharmony_ci// GMOCK_PP_GENERIC_IF(0, (a, b, c), (d, e, f)) => d, e, f 93f92157deSopenharmony_ci// 94f92157deSopenharmony_ci#define GMOCK_PP_GENERIC_IF(_Cond, _Then, _Else) \ 95f92157deSopenharmony_ci GMOCK_PP_REMOVE_PARENS(GMOCK_PP_IF(_Cond, _Then, _Else)) 96f92157deSopenharmony_ci 97f92157deSopenharmony_ci// Evaluates to the number of arguments after expansion. Identifies 'empty' as 98f92157deSopenharmony_ci// 0. 99f92157deSopenharmony_ci// 100f92157deSopenharmony_ci// #define PAIR x, y 101f92157deSopenharmony_ci// 102f92157deSopenharmony_ci// GMOCK_PP_NARG0() => 0 103f92157deSopenharmony_ci// GMOCK_PP_NARG0(x) => 1 104f92157deSopenharmony_ci// GMOCK_PP_NARG0(x, y) => 2 105f92157deSopenharmony_ci// GMOCK_PP_NARG0(PAIR) => 2 106f92157deSopenharmony_ci// 107f92157deSopenharmony_ci// Requires: * the number of arguments after expansion is at most 15. 108f92157deSopenharmony_ci// * If the argument is a macro, it must be able to be called with one 109f92157deSopenharmony_ci// argument. 110f92157deSopenharmony_ci#define GMOCK_PP_NARG0(...) \ 111f92157deSopenharmony_ci GMOCK_PP_IF(GMOCK_PP_IS_EMPTY(__VA_ARGS__), 0, GMOCK_PP_NARG(__VA_ARGS__)) 112f92157deSopenharmony_ci 113f92157deSopenharmony_ci// Expands to 1 if the first argument starts with something in parentheses, 114f92157deSopenharmony_ci// otherwise to 0. 115f92157deSopenharmony_ci#define GMOCK_PP_IS_BEGIN_PARENS(...) \ 116f92157deSopenharmony_ci GMOCK_PP_HEAD(GMOCK_PP_CAT(GMOCK_PP_INTERNAL_IBP_IS_VARIADIC_R_, \ 117f92157deSopenharmony_ci GMOCK_PP_INTERNAL_IBP_IS_VARIADIC_C __VA_ARGS__)) 118f92157deSopenharmony_ci 119f92157deSopenharmony_ci// Expands to 1 is there is only one argument and it is enclosed in parentheses. 120f92157deSopenharmony_ci#define GMOCK_PP_IS_ENCLOSED_PARENS(...) \ 121f92157deSopenharmony_ci GMOCK_PP_IF(GMOCK_PP_IS_BEGIN_PARENS(__VA_ARGS__), \ 122f92157deSopenharmony_ci GMOCK_PP_IS_EMPTY(GMOCK_PP_EMPTY __VA_ARGS__), 0) 123f92157deSopenharmony_ci 124f92157deSopenharmony_ci// Remove the parens, requires GMOCK_PP_IS_ENCLOSED_PARENS(args) => 1. 125f92157deSopenharmony_ci#define GMOCK_PP_REMOVE_PARENS(...) GMOCK_PP_INTERNAL_REMOVE_PARENS __VA_ARGS__ 126f92157deSopenharmony_ci 127f92157deSopenharmony_ci// Expands to _Macro(0, _Data, e1) _Macro(1, _Data, e2) ... _Macro(K -1, _Data, 128f92157deSopenharmony_ci// eK) as many of GMOCK_INTERNAL_NARG0 _Tuple. 129f92157deSopenharmony_ci// Requires: * |_Macro| can be called with 3 arguments. 130f92157deSopenharmony_ci// * |_Tuple| expansion has no more than 15 elements. 131f92157deSopenharmony_ci#define GMOCK_PP_FOR_EACH(_Macro, _Data, _Tuple) \ 132f92157deSopenharmony_ci GMOCK_PP_CAT(GMOCK_PP_INTERNAL_FOR_EACH_IMPL_, GMOCK_PP_NARG0 _Tuple) \ 133f92157deSopenharmony_ci (0, _Macro, _Data, _Tuple) 134f92157deSopenharmony_ci 135f92157deSopenharmony_ci// Expands to _Macro(0, _Data, ) _Macro(1, _Data, ) ... _Macro(K - 1, _Data, ) 136f92157deSopenharmony_ci// Empty if _K = 0. 137f92157deSopenharmony_ci// Requires: * |_Macro| can be called with 3 arguments. 138f92157deSopenharmony_ci// * |_K| literal between 0 and 15 139f92157deSopenharmony_ci#define GMOCK_PP_REPEAT(_Macro, _Data, _N) \ 140f92157deSopenharmony_ci GMOCK_PP_CAT(GMOCK_PP_INTERNAL_FOR_EACH_IMPL_, _N) \ 141f92157deSopenharmony_ci (0, _Macro, _Data, GMOCK_PP_INTENRAL_EMPTY_TUPLE) 142f92157deSopenharmony_ci 143f92157deSopenharmony_ci// Increments the argument, requires the argument to be between 0 and 15. 144f92157deSopenharmony_ci#define GMOCK_PP_INC(_i) GMOCK_PP_CAT(GMOCK_PP_INTERNAL_INC_, _i) 145f92157deSopenharmony_ci 146f92157deSopenharmony_ci// Returns comma if _i != 0. Requires _i to be between 0 and 15. 147f92157deSopenharmony_ci#define GMOCK_PP_COMMA_IF(_i) GMOCK_PP_CAT(GMOCK_PP_INTERNAL_COMMA_IF_, _i) 148f92157deSopenharmony_ci 149f92157deSopenharmony_ci// Internal details follow. Do not use any of these symbols outside of this 150f92157deSopenharmony_ci// file or we will break your code. 151f92157deSopenharmony_ci#define GMOCK_PP_INTENRAL_EMPTY_TUPLE (, , , , , , , , , , , , , , , ) 152f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_CAT(_1, _2) _1##_2 153f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_STRINGIZE(...) #__VA_ARGS__ 154f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_CAT_5(_1, _2, _3, _4, _5) _1##_2##_3##_4##_5 155f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_IS_EMPTY(_1, _2, _3, _4) \ 156f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_PP_INTERNAL_CAT_5(GMOCK_PP_INTERNAL_IS_EMPTY_CASE_, \ 157f92157deSopenharmony_ci _1, _2, _3, _4)) 158f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_IS_EMPTY_CASE_0001 , 159f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_IF_1(_Then, _Else) _Then 160f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_IF_0(_Then, _Else) _Else 161f92157deSopenharmony_ci 162f92157deSopenharmony_ci// Because of MSVC treating a token with a comma in it as a single token when 163f92157deSopenharmony_ci// passed to another macro, we need to force it to evaluate it as multiple 164f92157deSopenharmony_ci// tokens. We do that by using a "IDENTITY(MACRO PARENTHESIZED_ARGS)" macro. We 165f92157deSopenharmony_ci// define one per possible macro that relies on this behavior. Note "_Args" must 166f92157deSopenharmony_ci// be parenthesized. 167f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INTERNAL_16TH(_1, _2, _3, _4, _5, _6, _7, _8, _9, \ 168f92157deSopenharmony_ci _10, _11, _12, _13, _14, _15, _16, \ 169f92157deSopenharmony_ci ...) \ 170f92157deSopenharmony_ci _16 171f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_16TH(_Args) \ 172f92157deSopenharmony_ci GMOCK_PP_IDENTITY(GMOCK_PP_INTERNAL_INTERNAL_16TH _Args) 173f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INTERNAL_HEAD(_1, ...) _1 174f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_HEAD(_Args) \ 175f92157deSopenharmony_ci GMOCK_PP_IDENTITY(GMOCK_PP_INTERNAL_INTERNAL_HEAD _Args) 176f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INTERNAL_TAIL(_1, ...) __VA_ARGS__ 177f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_TAIL(_Args) \ 178f92157deSopenharmony_ci GMOCK_PP_IDENTITY(GMOCK_PP_INTERNAL_INTERNAL_TAIL _Args) 179f92157deSopenharmony_ci 180f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_IBP_IS_VARIADIC_C(...) 1 _ 181f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_IBP_IS_VARIADIC_R_1 1, 182f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_IBP_IS_VARIADIC_R_GMOCK_PP_INTERNAL_IBP_IS_VARIADIC_C \ 183f92157deSopenharmony_ci 0, 184f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_REMOVE_PARENS(...) __VA_ARGS__ 185f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_0 1 186f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_1 2 187f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_2 3 188f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_3 4 189f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_4 5 190f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_5 6 191f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_6 7 192f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_7 8 193f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_8 9 194f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_9 10 195f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_10 11 196f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_11 12 197f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_12 13 198f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_13 14 199f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_14 15 200f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_INC_15 16 201f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_0 202f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_1 , 203f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_2 , 204f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_3 , 205f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_4 , 206f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_5 , 207f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_6 , 208f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_7 , 209f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_8 , 210f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_9 , 211f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_10 , 212f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_11 , 213f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_12 , 214f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_13 , 215f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_14 , 216f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_COMMA_IF_15 , 217f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, _element) \ 218f92157deSopenharmony_ci _Macro(_i, _Data, _element) 219f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_0(_i, _Macro, _Data, _Tuple) 220f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_1(_i, _Macro, _Data, _Tuple) \ 221f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) 222f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_2(_i, _Macro, _Data, _Tuple) \ 223f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 224f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_1(GMOCK_PP_INC(_i), _Macro, _Data, \ 225f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 226f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_3(_i, _Macro, _Data, _Tuple) \ 227f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 228f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_2(GMOCK_PP_INC(_i), _Macro, _Data, \ 229f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 230f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_4(_i, _Macro, _Data, _Tuple) \ 231f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 232f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_3(GMOCK_PP_INC(_i), _Macro, _Data, \ 233f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 234f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_5(_i, _Macro, _Data, _Tuple) \ 235f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 236f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_4(GMOCK_PP_INC(_i), _Macro, _Data, \ 237f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 238f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_6(_i, _Macro, _Data, _Tuple) \ 239f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 240f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_5(GMOCK_PP_INC(_i), _Macro, _Data, \ 241f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 242f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_7(_i, _Macro, _Data, _Tuple) \ 243f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 244f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_6(GMOCK_PP_INC(_i), _Macro, _Data, \ 245f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 246f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_8(_i, _Macro, _Data, _Tuple) \ 247f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 248f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_7(GMOCK_PP_INC(_i), _Macro, _Data, \ 249f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 250f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_9(_i, _Macro, _Data, _Tuple) \ 251f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 252f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_8(GMOCK_PP_INC(_i), _Macro, _Data, \ 253f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 254f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_10(_i, _Macro, _Data, _Tuple) \ 255f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 256f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_9(GMOCK_PP_INC(_i), _Macro, _Data, \ 257f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 258f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_11(_i, _Macro, _Data, _Tuple) \ 259f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 260f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_10(GMOCK_PP_INC(_i), _Macro, _Data, \ 261f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 262f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_12(_i, _Macro, _Data, _Tuple) \ 263f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 264f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_11(GMOCK_PP_INC(_i), _Macro, _Data, \ 265f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 266f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_13(_i, _Macro, _Data, _Tuple) \ 267f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 268f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_12(GMOCK_PP_INC(_i), _Macro, _Data, \ 269f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 270f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_14(_i, _Macro, _Data, _Tuple) \ 271f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 272f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_13(GMOCK_PP_INC(_i), _Macro, _Data, \ 273f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 274f92157deSopenharmony_ci#define GMOCK_PP_INTERNAL_FOR_EACH_IMPL_15(_i, _Macro, _Data, _Tuple) \ 275f92157deSopenharmony_ci GMOCK_PP_INTERNAL_CALL_MACRO(_Macro, _i, _Data, GMOCK_PP_HEAD _Tuple) \ 276f92157deSopenharmony_ci GMOCK_PP_INTERNAL_FOR_EACH_IMPL_14(GMOCK_PP_INC(_i), _Macro, _Data, \ 277f92157deSopenharmony_ci (GMOCK_PP_TAIL _Tuple)) 278f92157deSopenharmony_ci 279f92157deSopenharmony_ci#endif // GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_PP_H_ 280