This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit cc578e33a9c3e8766ce18b3207639e862800d0ff
Author: yinshengkai <[email protected]>
AuthorDate: Thu Sep 12 15:18:49 2024 +0800

    macro: FOREACH_ARG Add parameter field
    
    FOREACH_ARG Add parameter field.
    
    Signed-off-by: yinshengkai <[email protected]>
---
 include/nuttx/macro.h      | 82 ++++++++++++++++++++++++----------------------
 include/nuttx/sched_note.h |  4 +--
 2 files changed, 44 insertions(+), 42 deletions(-)

diff --git a/include/nuttx/macro.h b/include/nuttx/macro.h
index 0e838006d26..faac02dcff3 100644
--- a/include/nuttx/macro.h
+++ b/include/nuttx/macro.h
@@ -41,7 +41,10 @@
 
 /* Reverse the arguments */
 
-#define EXPAND(x) x
+#define _EXPAND(x...) x
+#define EXPAND(x...) _EXPAND(x)
+#define _PASTE(a,b) a##b
+#define PASTE(a,b) _PASTE(a,b)
 
 #define REVERSE_00()
 #define REVERSE_01(a)     a
@@ -90,51 +93,51 @@
 
 /* Apply the macro to each argument */
 
-#define FOREACH_00(action, count, ...)      0
-#define FOREACH_01(action, count, arg, ...) action(arg, count - 1 )
-#define FOREACH_02(action, count, arg, ...) action(arg, count - 2 ) 
FOREACH_01(action, count, __VA_ARGS__)
-#define FOREACH_03(action, count, arg, ...) action(arg, count - 3 ) 
FOREACH_02(action, count, __VA_ARGS__)
-#define FOREACH_04(action, count, arg, ...) action(arg, count - 4 ) 
FOREACH_03(action, count, __VA_ARGS__)
-#define FOREACH_05(action, count, arg, ...) action(arg, count - 5 ) 
FOREACH_04(action, count, __VA_ARGS__)
-#define FOREACH_06(action, count, arg, ...) action(arg, count - 6 ) 
FOREACH_05(action, count, __VA_ARGS__)
-#define FOREACH_07(action, count, arg, ...) action(arg, count - 7 ) 
FOREACH_06(action, count, __VA_ARGS__)
-#define FOREACH_08(action, count, arg, ...) action(arg, count - 8 ) 
FOREACH_07(action, count, __VA_ARGS__)
-#define FOREACH_09(action, count, arg, ...) action(arg, count - 9 ) 
FOREACH_08(action, count, __VA_ARGS__)
-#define FOREACH_10(action, count, arg, ...) action(arg, count - 10) 
FOREACH_09(action, count, __VA_ARGS__)
-#define FOREACH_11(action, count, arg, ...) action(arg, count - 11) 
FOREACH_10(action, count, __VA_ARGS__)
-#define FOREACH_12(action, count, arg, ...) action(arg, count - 12) 
FOREACH_11(action, count, __VA_ARGS__)
-#define FOREACH_13(action, count, arg, ...) action(arg, count - 13) 
FOREACH_12(action, count, __VA_ARGS__)
-#define FOREACH_14(action, count, arg, ...) action(arg, count - 14) 
FOREACH_13(action, count, __VA_ARGS__)
-#define FOREACH_15(action, count, arg, ...) action(arg, count - 15) 
FOREACH_14(action, count, __VA_ARGS__)
-#define FOREACH_16(action, count, arg, ...) action(arg, count - 16) 
FOREACH_15(action, count, __VA_ARGS__)
-#define FOREACH_17(action, count, arg, ...) action(arg, count - 17) 
FOREACH_16(action, count, __VA_ARGS__)
-#define FOREACH_18(action, count, arg, ...) action(arg, count - 18) 
FOREACH_17(action, count, __VA_ARGS__)
-#define FOREACH_19(action, count, arg, ...) action(arg, count - 19) 
FOREACH_18(action, count, __VA_ARGS__)
-#define FOREACH_20(action, count, arg, ...) action(arg, count - 20) 
FOREACH_19(action, count, __VA_ARGS__)
-#define FOREACH_21(action, count, arg, ...) action(arg, count - 21) 
FOREACH_20(action, count, __VA_ARGS__)
-#define FOREACH_22(action, count, arg, ...) action(arg, count - 22) 
FOREACH_21(action, count, __VA_ARGS__)
-#define FOREACH_23(action, count, arg, ...) action(arg, count - 23) 
FOREACH_22(action, count, __VA_ARGS__)
-#define FOREACH_24(action, count, arg, ...) action(arg, count - 24) 
FOREACH_23(action, count, __VA_ARGS__)
-#define FOREACH_25(action, count, arg, ...) action(arg, count - 25) 
FOREACH_24(action, count, __VA_ARGS__)
-#define FOREACH_26(action, count, arg, ...) action(arg, count - 26) 
FOREACH_25(action, count, __VA_ARGS__)
-#define FOREACH_27(action, count, arg, ...) action(arg, count - 27) 
FOREACH_26(action, count, __VA_ARGS__)
-#define FOREACH_28(action, count, arg, ...) action(arg, count - 28) 
FOREACH_27(action, count, __VA_ARGS__)
-#define FOREACH_29(action, count, arg, ...) action(arg, count - 29) 
FOREACH_28(action, count, __VA_ARGS__)
-#define FOREACH_30(action, count, arg, ...) action(arg, count - 30) 
FOREACH_29(action, count, __VA_ARGS__)
-#define FOREACH_31(action, count, arg, ...) action(arg, count - 31) 
FOREACH_30(action, count, __VA_ARGS__)
-#define FOREACH_32(action, count, arg, ...) action(arg, count - 32) 
FOREACH_31(action, count, __VA_ARGS__)
-
-#define FOREACH_ARG_(action, count, ...) \
+#define FOREACH_00(action, count, param, ...)      0
+#define FOREACH_01(action, count, param, arg, ...) action(param, arg, count - 
1 )
+#define FOREACH_02(action, count, param, arg, ...) action(param, arg, count - 
2 ) FOREACH_01(action, count, param, __VA_ARGS__)
+#define FOREACH_03(action, count, param, arg, ...) action(param, arg, count - 
3 ) FOREACH_02(action, count, param, __VA_ARGS__)
+#define FOREACH_04(action, count, param, arg, ...) action(param, arg, count - 
4 ) FOREACH_03(action, count, param, __VA_ARGS__)
+#define FOREACH_05(action, count, param, arg, ...) action(param, arg, count - 
5 ) FOREACH_04(action, count, param, __VA_ARGS__)
+#define FOREACH_06(action, count, param, arg, ...) action(param, arg, count - 
6 ) FOREACH_05(action, count, param, __VA_ARGS__)
+#define FOREACH_07(action, count, param, arg, ...) action(param, arg, count - 
7 ) FOREACH_06(action, count, param, __VA_ARGS__)
+#define FOREACH_08(action, count, param, arg, ...) action(param, arg, count - 
8 ) FOREACH_07(action, count, param, __VA_ARGS__)
+#define FOREACH_09(action, count, param, arg, ...) action(param, arg, count - 
9 ) FOREACH_08(action, count, param, __VA_ARGS__)
+#define FOREACH_10(action, count, param, arg, ...) action(param, arg, count - 
10) FOREACH_09(action, count, param, __VA_ARGS__)
+#define FOREACH_11(action, count, param, arg, ...) action(param, arg, count - 
11) FOREACH_10(action, count, param, __VA_ARGS__)
+#define FOREACH_12(action, count, param, arg, ...) action(param, arg, count - 
12) FOREACH_11(action, count, param, __VA_ARGS__)
+#define FOREACH_13(action, count, param, arg, ...) action(param, arg, count - 
13) FOREACH_12(action, count, param, __VA_ARGS__)
+#define FOREACH_14(action, count, param, arg, ...) action(param, arg, count - 
14) FOREACH_13(action, count, param, __VA_ARGS__)
+#define FOREACH_15(action, count, param, arg, ...) action(param, arg, count - 
15) FOREACH_14(action, count, param, __VA_ARGS__)
+#define FOREACH_16(action, count, param, arg, ...) action(param, arg, count - 
16) FOREACH_15(action, count, param, __VA_ARGS__)
+#define FOREACH_17(action, count, param, arg, ...) action(param, arg, count - 
17) FOREACH_16(action, count, param, __VA_ARGS__)
+#define FOREACH_18(action, count, param, arg, ...) action(param, arg, count - 
18) FOREACH_17(action, count, param, __VA_ARGS__)
+#define FOREACH_19(action, count, param, arg, ...) action(param, arg, count - 
19) FOREACH_18(action, count, param, __VA_ARGS__)
+#define FOREACH_20(action, count, param, arg, ...) action(param, arg, count - 
20) FOREACH_19(action, count, param, __VA_ARGS__)
+#define FOREACH_21(action, count, param, arg, ...) action(param, arg, count - 
21) FOREACH_20(action, count, param, __VA_ARGS__)
+#define FOREACH_22(action, count, param, arg, ...) action(param, arg, count - 
22) FOREACH_21(action, count, param, __VA_ARGS__)
+#define FOREACH_23(action, count, param, arg, ...) action(param, arg, count - 
23) FOREACH_22(action, count, param, __VA_ARGS__)
+#define FOREACH_24(action, count, param, arg, ...) action(param, arg, count - 
24) FOREACH_23(action, count, param, __VA_ARGS__)
+#define FOREACH_25(action, count, param, arg, ...) action(param, arg, count - 
25) FOREACH_24(action, count, param, __VA_ARGS__)
+#define FOREACH_26(action, count, param, arg, ...) action(param, arg, count - 
26) FOREACH_25(action, count, param, __VA_ARGS__)
+#define FOREACH_27(action, count, param, arg, ...) action(param, arg, count - 
27) FOREACH_26(action, count, param, __VA_ARGS__)
+#define FOREACH_28(action, count, param, arg, ...) action(param, arg, count - 
28) FOREACH_27(action, count, param, __VA_ARGS__)
+#define FOREACH_29(action, count, param, arg, ...) action(param, arg, count - 
29) FOREACH_28(action, count, param, __VA_ARGS__)
+#define FOREACH_30(action, count, param, arg, ...) action(param, arg, count - 
30) FOREACH_29(action, count, param, __VA_ARGS__)
+#define FOREACH_31(action, count, param, arg, ...) action(param, arg, count - 
31) FOREACH_30(action, count, param, __VA_ARGS__)
+#define FOREACH_32(action, count, param, arg, ...) action(param, arg, count - 
32) FOREACH_31(action, count, param, __VA_ARGS__)
+
+#define FOREACH_ARG_(action, count, param, ...) \
         GET_ARG_VALUE(0, ##__VA_ARGS__, \
         FOREACH_32, FOREACH_31, FOREACH_30, FOREACH_29, FOREACH_28, 
FOREACH_27, \
         FOREACH_26, FOREACH_25, FOREACH_24, FOREACH_23, FOREACH_22, 
FOREACH_21, \
         FOREACH_20, FOREACH_19, FOREACH_18, FOREACH_17, FOREACH_16, 
FOREACH_15, \
         FOREACH_14, FOREACH_13, FOREACH_12, FOREACH_11, FOREACH_10, 
FOREACH_09, \
         FOREACH_08, FOREACH_07, FOREACH_06, FOREACH_05, FOREACH_04, 
FOREACH_03, \
-        FOREACH_02, FOREACH_01, FOREACH_00)(action, count, ##__VA_ARGS__)
+        FOREACH_02, FOREACH_01, FOREACH_00)(action, count, param, 
##__VA_ARGS__)
 
-#define FOREACH_ARG(action, ...) \
-        FOREACH_ARG_(action, GET_ARG_COUNT(__VA_ARGS__), ##__VA_ARGS__)
+#define FOREACH_ARG(action, param, ...) \
+        FOREACH_ARG_(action, GET_ARG_COUNT(__VA_ARGS__), param, ##__VA_ARGS__)
 
 /* Stringify the arguments */
 
@@ -146,4 +149,3 @@
 #define CONCATENATE(a, b) a##b
 
 #endif /* __INCLUDE_NUTTX_MACRO_H */
-
diff --git a/include/nuttx/sched_note.h b/include/nuttx/sched_note.h
index 23b2982e7e0..93a43d22e78 100644
--- a/include/nuttx/sched_note.h
+++ b/include/nuttx/sched_note.h
@@ -168,8 +168,8 @@
 
 /* Set the type of each parameter */
 
-#define NOTE_PRINTF_TYPE(arg, index) + ((NOTE_PRINTF_ARG_TYPE(arg) << (index) 
* 2))
-#define NOTE_PRINTF_TYPES(...)       FOREACH_ARG(NOTE_PRINTF_TYPE, 
##__VA_ARGS__)
+#define NOTE_PRINTF_TYPE(_, arg, index) + ((NOTE_PRINTF_ARG_TYPE(arg) << 
(index) * 2))
+#define NOTE_PRINTF_TYPES(...)          FOREACH_ARG(NOTE_PRINTF_TYPE, _, 
##__VA_ARGS__)
 
 /* Using macro expansion to calculate the expression of tag, tag will
  * be a constant at compile time, which will reduce the number of

Reply via email to