Commit fe4ea0f3 authored by Krzysztof Chruściński's avatar Krzysztof Chruściński Committed by Carles Cufi
Browse files

sys: util: Rework CONCAT to support variable length arguments



Rework CONCAT to accept multiple arugments which are concatenated
together. Number of arguments is limited to 8.

Signed-off-by: default avatarKrzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
parent 0ee1e28a
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -269,13 +269,18 @@ extern "C" {
	})

/**
 * @brief Concatenate two tokens into one
 * @brief Concatenate input arguments
 *
 * Concatenate two tokens,  @p x and @p y, into a combined token during the preprocessor pass.
 * This can be used to, for ex., build an identifier out of two parts,
 * Concatenate provided tokens into a combined token during the preprocessor pass.
 * This can be used to, for ex., build an identifier out of multiple parts,
 * where one of those parts may be, for ex, a number, another macro, or a macro argument.
 *
 * @param ... Tokens to concatencate
 *
 * @return Concatenated token.
 */
#define CONCAT(x, y) _DO_CONCAT(x, y)
#define CONCAT(...) \
	UTIL_CAT(_CONCAT_, NUM_VA_ARGS_LESS_1(__VA_ARGS__))(__VA_ARGS__)

/**
 * @brief Value of @p x rounded up to the next multiple of @p align.
+9 −0
Original line number Diff line number Diff line
@@ -116,6 +116,15 @@
#define UTIL_EXPAND(...) __VA_ARGS__
#define UTIL_REPEAT(...) UTIL_LISTIFY(__VA_ARGS__)

#define _CONCAT_0(arg, ...) arg
#define _CONCAT_1(arg, ...) UTIL_CAT(arg, _CONCAT_0(__VA_ARGS__))
#define _CONCAT_2(arg, ...) UTIL_CAT(arg, _CONCAT_1(__VA_ARGS__))
#define _CONCAT_3(arg, ...) UTIL_CAT(arg, _CONCAT_2(__VA_ARGS__))
#define _CONCAT_4(arg, ...) UTIL_CAT(arg, _CONCAT_3(__VA_ARGS__))
#define _CONCAT_5(arg, ...) UTIL_CAT(arg, _CONCAT_4(__VA_ARGS__))
#define _CONCAT_6(arg, ...) UTIL_CAT(arg, _CONCAT_5(__VA_ARGS__))
#define _CONCAT_7(arg, ...) UTIL_CAT(arg, _CONCAT_6(__VA_ARGS__))

/* Implementation details for NUM_VA_ARGS_LESS_1 */
#define NUM_VA_ARGS_LESS_1_IMPL(				\
	_ignored,						\