Enhance VAR_ARGS_SIZE to be aware of empty __VA_ARGS__ 07/103707/2
authorJaemin Ryu <jm77.ryu@samsung.com>
Fri, 9 Dec 2016 07:27:46 +0000 (16:27 +0900)
committerJaemin Ryu <jm77.ryu@samsung.com>
Mon, 19 Dec 2016 04:11:58 +0000 (13:11 +0900)
Change-Id: I1c08f8ddf36131290447ec072ea591e488077a1e
Signed-off-by: Jaemin Ryu <jm77.ryu@samsung.com>
include/klay/preprocessor.h

index ab653ba7b137ab41b3191fb801d5be41da42978a..c3121fa2ee67876bb756c0a8623b7972bcc736e3 100644 (file)
 #define CONCATENATE1(arg1, arg2)  CONCATENATE2(arg1, arg2)
 #define CONCATENATE2(arg1, arg2)  arg1##arg2
 
-#define VAR_ARGS_SIZE(...)     VAR_ARGS_SIZE_(__VA_ARGS__, FOR_EACH_VAR_ARGS_RSEQ_N())
-#define VAR_ARGS_SIZE_(...)    FOR_EACH_VAR_ARGS_ARG_N(__VA_ARGS__)
+#define VAR_ARGS_SIZE(...)  VAR_ARGS_SIZE_((VAR_ARGS_EMPTY ## __VA_ARGS__ , FOR_EACH_VAR_ARGS_RSEQ_N()))
+#define VAR_ARGS_SIZE_(ARGS) FOR_EACH_VAR_ARGS_ARG_N ARGS
+#define VAR_ARGS_EMPTY FOR_EACH_VAR_ARGS_RSEQ_N()
 
-#define FOR_EACH_VAR_ARGS_ARG_N(_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, N, ...) N
+#define FOR_EACH_VAR_ARGS_ARG_N(_0, _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, N, ...) N
 #define FOR_EACH_VAR_ARGS_RSEQ_N() 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
 
 #define FOR_EACH_VAR_ARGS_1(what, x, ...)  what(x)