2 * Some macros for wrapper function implementation.
3 * @author Sebastian Hack
10 #define _MANGLE(prefix,name) prefix ## name
12 #define INTERNAL(name) _MANGLE(_, name)
15 #define _HEAD1(name,res,t1) \
18 #define _HEAD2(name,res,t1,t2) \
19 res (name)(t1 p1, t2 p2)
21 #define _HEAD3(name,res,t1,t2,t3) \
22 res (name)(t1 p1, t2 p2, t3 p3)
24 #define _HEAD4(name,res,t1,t2,t3,t4) \
25 res (name)(t1 p1, t2 p2, t3 p3, t4 p4)
28 #define _IMPL1(name,prefix,ret,res,t1) \
29 _HEAD1(name, res, t1) { \
30 ret prefix ## name (p1); \
33 #define _IMPL2(name,prefix,ret,res,t1,t2) \
34 _HEAD2(name, res, t1, t2) { \
35 ret prefix ## name (p1, p2); \
38 #define _IMPL3(name,prefix,ret,res,t1,t2,t3) \
39 _HEAD3(name, res, t1, t2, t3) { \
40 ret prefix ## name (p1, p2, p3); \
43 #define _IMPL4(name,prefix,ret,res,t1,t2,t3,t4) \
44 _HEAD4(name, res, t1, t2, t3, t4) { \
45 ret prefix ## name (p1, p2, p3, p4); \
48 #define IMPL1_VOID(name,prefix,t1) \
49 _IMPL1(name, prefix, (void), void, t1)
51 #define IMPL2_VOID(name,prefix,t1,t2) \
52 _IMPL2(name, prefix, (void), void, t1, t2)
54 #define IMPL3_VOID(name,prefix,t1,t2,t3) \
55 _IMPL3(name, prefix, (void), void, t1, t2, t3)
57 #define IMPL4_VOID(name,prefix,t1,t2,t3,t4) \
58 _IMPL4(name, prefix, (void), void, t1, t2, t3, t4)
61 #define IMPL1(name,type,prefix,t1) \
62 _IMPL1(name, prefix, return, type, t1)
64 #define IMPL2(name,type,prefix,t1,t2) \
65 _IMPL2(name, prefix, return, type, t1, t2)
67 #define IMPL3(name,type,prefix,t1,t2,t3) \
68 _IMPL3(name, prefix, return, type, t1, t2, t3)
70 #define IMPL4(name,type,prefix,t1,t2,t3,t4) \
71 _IMPL4(name, prefix, return, type, t1, t2, t3, t4)
74 #define FIRM_IMPL1(name,type,t1) \
75 _IMPL1(name, _, return, type, t1)
77 #define FIRM_IMPL2(name,type,t1,t2) \
78 _IMPL2(name, _, return, type, t1, t2)
80 #define FIRM_IMPL3(name,type,t1,t2,t3) \
81 _IMPL3(name, _, return, type, t1, t2, t3)
83 #define FIRM_IMPL4(name,type,t1,t2,t3,t4) \
84 _IMPL4(name, _, return, type, t1, t2, t3, t4)
87 #define FIRM_IMPL1_VOID(name,t1) \
88 _IMPL1(name, _, (void), void, t1)
90 #define FIRM_IMPL2_VOID(name,t1,t2) \
91 _IMPL2(name, _, (void), void, t1, t2)
93 #define FIRM_IMPL3_VOID(name,t1,t2,t3) \
94 _IMPL3(name, _, (void), void, t1, t2, t3)
96 #define FIRM_IMPL4_VOID(name,t1,t2,t3,t4) \
97 _IMPL4(name, _, (void), void, t1, t2, t3, t4)
99 #define FIRM_PROTO1(name,type,t1) _HEAD1(name, type, t1)
100 #define FIRM_PROTO2(name,type,t1,t2) _HEAD2(name, type, t1, t2)
101 #define FIRM_PROTO3(name,type,t1,t2,t3) _HEAD3(name, type, t1, t2, t3)
102 #define FIRM_PROTO4(name,type,t1,t2,t3,t4) _HEAD4(name, type, t1, t2, t3, t4)