@@ -30,36 +30,37 @@ namespace utils {
3030// ///////////////////////
3131
3232/* *
33- * @brief Get 11th macro.
33+ * @brief Get 20th macro.
3434 *
3535 * @note This macro is used in \c COUNT_ARGUMENT macro.
3636 */
37- #define _ELEVENTH_ARGUMENT (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, ...) \
38- a11
37+ #define _TWENTIETH_ARGUMENT (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, \
38+ ...) \
39+ a20
3940
4041/* *
41- * @brief Count number of arguments in a variadic macro with maximum 9 variables
42+ * @brief Count number of arguments in a variadic macro with maximum 18 variables
4243 *
4344 * @note This is an auxiliary macro that encapsulates the funtionality of \c COUNT_ARGUMENTS so that macro
4445 * could be changed to a higher value without breaking API.
4546 *
4647 * @note \c dummy value is required to non argument calls.
4748 */
48- #define _COUNT_ARGUMENTS__UP_TO_NINE (...) \
49- _ELEVENTH_ARGUMENT (dummy, ## __VA_ARGS__, 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 )
49+ #define _COUNT_ARGUMENTS__UP_TO_EIGHTEEN (...) \
50+ _TWENTIETH_ARGUMENT (dummy, ## __VA_ARGS__, 18 , 17 , 16 , 15 , 14 , 13 , 12 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 )
5051
5152/* *
5253 * @brief Count number of arguments in a variadic macro
5354 *
54- * @warning This macro only allows up to 9 values.
55+ * @warning This macro only allows up to 18 values.
5556 *
56- * @note if more arguments required, change \c _ELEVENTH_ARGUMENT for a higher one.
57+ * @note if more arguments required, change \c _TWENTIETH_ARGUMENT for a higher one.
5758 *
5859 * @example
5960 * COUNT_ARGUMENTS(el1, el2, el3) = 3
6061 */
6162#define COUNT_ARGUMENTS (...) \
62- _COUNT_ARGUMENTS__UP_TO_NINE (__VA_ARGS__)
63+ _COUNT_ARGUMENTS__UP_TO_EIGHTEEN (__VA_ARGS__)
6364
6465
6566// ///////////////////////
@@ -80,33 +81,42 @@ namespace utils {
8081#define _FE_7 (ACTION , X, ...) ACTION (X) _FE_6(ACTION , __VA_ARGS__)
8182#define _FE_8 (ACTION , X, ...) ACTION (X) _FE_7(ACTION , __VA_ARGS__)
8283#define _FE_9 (ACTION , X, ...) ACTION (X) _FE_8(ACTION , __VA_ARGS__)
84+ #define _FE_10 (ACTION , X, ...) ACTION (X) _FE_9(ACTION , __VA_ARGS__)
85+ #define _FE_11 (ACTION , X, ...) ACTION (X) _FE_10(ACTION , __VA_ARGS__)
86+ #define _FE_12 (ACTION , X, ...) ACTION (X) _FE_11(ACTION , __VA_ARGS__)
87+ #define _FE_13 (ACTION , X, ...) ACTION (X) _FE_12(ACTION , __VA_ARGS__)
88+ #define _FE_14 (ACTION , X, ...) ACTION (X) _FE_13(ACTION , __VA_ARGS__)
89+ #define _FE_15 (ACTION , X, ...) ACTION (X) _FE_14(ACTION , __VA_ARGS__)
90+ #define _FE_16 (ACTION , X, ...) ACTION (X) _FE_15(ACTION , __VA_ARGS__)
91+ #define _FE_17 (ACTION , X, ...) ACTION (X) _FE_16(ACTION , __VA_ARGS__)
92+ #define _FE_18 (ACTION , X, ...) ACTION (X) _FE_17(ACTION , __VA_ARGS__)
8393// ... repeat as needed
8494
8595/* *
86- * @brief Get the 9th argument
96+ * @brief Get the 18th argument
8797 *
8898 * @note this is useful for \c APPLY_MACRO_FOR_EACH macro.
8999 */
90- #define _GET_NINTH_ARGUMENT (_1, _2, _3, _4, _5, _6, _7, _8, _9, NAME , ...) \
100+ #define _GET_EIGHTEENTH_ARGUMENT (_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, NAME , \
101+ ...) \
91102 NAME
92103
93- #define _APPLY_MACRO_FOR_EACH__UP_TO_NINE (action, ...) \
94- _GET_NINTH_ARGUMENT (__VA_ARGS__, _FE_9, _FE_8, _FE_7, _FE_6, _FE_5, _FE_4, _FE_3, _FE_2, _FE_1)(action, __VA_ARGS__)
104+ #define _APPLY_MACRO_FOR_EACH__UP_TO_EIGHTEEN (action, ...) \
105+ _GET_EIGHTEENTH_ARGUMENT (__VA_ARGS__, _FE_18, _FE_17, _FE_16, _FE_15, _FE_14, _FE_13, _FE_12, _FE_11, _FE_10, _FE_9, \
106+ _FE_8, _FE_7, _FE_6, _FE_5, _FE_4, _FE_3, _FE_2, _FE_1)(action, __VA_ARGS__)
95107
96108/* *
97109 * @brief Execute \c action (must be a macro) for every argument after it.
98110 *
99- * @warning This macro only allows up to 9 values.
111+ * @warning This macro only allows up to 18 values.
100112 *
101- * @note if more arguments required, change \c _APPLY_MACRO_FOR_EACH__UP_TO_NINE for a higher one.
113+ * @note if more arguments required, change \c _APPLY_MACRO_FOR_EACH__UP_TO_EIGHTEEN for a higher one.
102114 *
103115 * @example
104116 * APPLY_MACRO_FOR_EACH(print, el1, el2, el3) => print(el1); print(el2); print(el3);
105117 */
106118#define APPLY_MACRO_FOR_EACH (action, ...) \
107- _APPLY_MACRO_FOR_EACH__UP_TO_NINE (action, __VA_ARGS__)
119+ _APPLY_MACRO_FOR_EACH__UP_TO_EIGHTEEN (action, __VA_ARGS__)
108120
109121} /* namespace utils */
110122} /* namespace eprosima */
111-
112-
0 commit comments