Use a separate function to remove a source from fading sources
[alure.git] / src / main.h
blob06dd204804826604f68b47b45566cc222d588cd0
1 #ifndef ALURE_MAIN_H
2 #define ALURE_MAIN_H
4 #include "alure2.h"
7 namespace alure {
9 #define DECL_THUNK0(ret, C, Name, cv) \
10 ret C::Name() cv { return pImpl->Name(); }
11 #define DECL_THUNK1(ret, C, Name, cv, T1) \
12 ret C::Name(T1 a) cv \
13 { \
14 using _t1 = T1; \
15 return pImpl->Name(std::forward<_t1&&>(a)); \
17 #define DECL_THUNK2(ret, C, Name, cv, T1, T2) \
18 ret C::Name(T1 a, T2 b) cv \
19 { \
20 using _t1 = T1; using _t2 = T2; \
21 return pImpl->Name(std::forward<_t1&&>(a), std::forward<_t2&&>(b)); \
23 #define DECL_THUNK3(ret, C, Name, cv, T1, T2, T3) \
24 ret C::Name(T1 a, T2 b, T3 c) cv \
25 { \
26 using _t1 = T1; using _t2 = T2; using _t3 = T3; \
27 return pImpl->Name(std::forward<_t1&&>(a), std::forward<_t2&&>(b), \
28 std::forward<_t3&&>(c)); \
30 #define DECL_THUNK6(ret, C, Name, cv, T1, T2, T3, T4, T5, T6) \
31 ret C::Name(T1 a, T2 b, T3 c, T4 d, T5 e, T6 f) cv \
32 { \
33 using _t1 = T1; using _t2 = T2; using _t3 = T3; \
34 using _t4 = T4; using _t5 = T5; using _t6 = T6; \
35 return pImpl->Name(std::forward<_t1&&>(a), std::forward<_t2&&>(b), \
36 std::forward<_t3&&>(c), std::forward<_t4&&>(d), \
37 std::forward<_t5&&>(e), std::forward<_t6&&>(f)); \
40 template<bool V, typename T, typename=EnableIfT<std::is_same<bool,RemoveRefT<T>>::value>>
41 inline T Expect(T&& arg)
43 #ifdef __GNUC__
44 return __builtin_expect(std::forward<T&&>(arg), V);
45 #else
46 return std::forward<T&&>(arg);
47 #endif
50 } // namespace alure
52 #endif /* ALURE_MAIN_H */