Improve handling the async wake interval
[alure.git] / src / main.h
blob10c66a56c1617420d952b9e981e4ddf01732bc77
1 #ifndef ALURE_MAIN_H
2 #define ALURE_MAIN_H
4 #include "alure2.h"
7 #define DECL_THUNK0(ret, C, Name, cv) \
8 ret C::Name() cv { return pImpl->Name(); }
9 #define DECL_THUNK1(ret, C, Name, cv, T1) \
10 ret C::Name(T1 a) cv \
11 { \
12 using _t1 = T1; \
13 return pImpl->Name(std::forward<_t1&&>(a)); \
15 #define DECL_THUNK2(ret, C, Name, cv, T1, T2) \
16 ret C::Name(T1 a, T2 b) cv \
17 { \
18 using _t1 = T1; using _t2 = T2; \
19 return pImpl->Name(std::forward<_t1&&>(a), std::forward<_t2&&>(b)); \
21 #define DECL_THUNK3(ret, C, Name, cv, T1, T2, T3) \
22 ret C::Name(T1 a, T2 b, T3 c) cv \
23 { \
24 using _t1 = T1; using _t2 = T2; using _t3 = T3; \
25 return pImpl->Name(std::forward<_t1&&>(a), std::forward<_t2&&>(b), \
26 std::forward<_t3&&>(c)); \
28 #define DECL_THUNK6(ret, C, Name, cv, T1, T2, T3, T4, T5, T6) \
29 ret C::Name(T1 a, T2 b, T3 c, T4 d, T5 e, T6 f) cv \
30 { \
31 using _t1 = T1; using _t2 = T2; using _t3 = T3; \
32 using _t4 = T4; using _t5 = T5; using _t6 = T6; \
33 return pImpl->Name(std::forward<_t1&&>(a), std::forward<_t2&&>(b), \
34 std::forward<_t3&&>(c), std::forward<_t4&&>(d), \
35 std::forward<_t5&&>(e), std::forward<_t6&&>(f)); \
38 #ifdef __GNUC__
39 #define EXPECT(x, y) __builtin_expect((x), (y))
40 #else
41 #define EXPECT(x, y) (x)
42 #endif
44 #endif /* ALURE_MAIN_H */