From 65c43a680ef1f9779472bc69bb2f2b5fe2343ff0 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 15 Jul 2014 16:23:13 +0200 Subject: [PATCH] utils: add _NM_UTILS_MACRO_FIRST and _NM_UTILS_MACRO_REST macros Signed-off-by: Thomas Haller --- include/nm-utils-internal.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/include/nm-utils-internal.h b/include/nm-utils-internal.h index 5d35225d0f..1c746beac3 100644 --- a/include/nm-utils-internal.h +++ b/include/nm-utils-internal.h @@ -23,5 +23,22 @@ #define __NM_UTILS_INTERNAL_H__ +/* http://stackoverflow.com/a/11172679 */ +#define _NM_UTILS_MACRO_FIRST(...) __NM_UTILS_MACRO_FIRST_HELPER(__VA_ARGS__, throwaway) +#define __NM_UTILS_MACRO_FIRST_HELPER(first, ...) first + +#define _NM_UTILS_MACRO_REST(...) __NM_UTILS_MACRO_REST_HELPER(__NM_UTILS_MACRO_REST_NUM(__VA_ARGS__), __VA_ARGS__) +#define __NM_UTILS_MACRO_REST_HELPER(qty, ...) __NM_UTILS_MACRO_REST_HELPER2(qty, __VA_ARGS__) +#define __NM_UTILS_MACRO_REST_HELPER2(qty, ...) __NM_UTILS_MACRO_REST_HELPER_##qty(__VA_ARGS__) +#define __NM_UTILS_MACRO_REST_HELPER_ONE(first) +#define __NM_UTILS_MACRO_REST_HELPER_TWOORMORE(first, ...) , __VA_ARGS__ +#define __NM_UTILS_MACRO_REST_NUM(...) \ + __NM_UTILS_MACRO_REST_SELECT_20TH(__VA_ARGS__, \ + TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE,\ + TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE,\ + TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE,\ + TWOORMORE, TWOORMORE, TWOORMORE, ONE, throwaway) +#define __NM_UTILS_MACRO_REST_SELECT_20TH(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, ...) a20 + #endif