31 #ifndef TWEENY_EASINGRESOLVE_H
32 #define TWEENY_EASINGRESOLVE_H
41 template<
int I,
typename TypeTuple,
typename FunctionTuple,
typename... Fs>
42 struct easingresolve {
43 static void impl(FunctionTuple &b, Fs... fs) {
44 if (
sizeof...(Fs) == 0)
return;
45 easingresolve<I, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...);
49 template<
int I,
typename TypeTuple,
typename FunctionTuple,
typename F1,
typename... Fs>
50 struct easingresolve<I, TypeTuple, FunctionTuple, F1, Fs...> {
51 static void impl(FunctionTuple &b, F1 f1, Fs... fs) {
53 easingresolve<I + 1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...);
57 template<
int I,
typename TypeTuple,
typename FunctionTuple,
typename... Fs>
58 struct easingresolve<I, TypeTuple, FunctionTuple, easing::steppedEasing, Fs...> {
59 typedef typename std::tuple_element<I, TypeTuple>::type ArgType;
61 static void impl(FunctionTuple &b, easing::steppedEasing, Fs... fs) {
62 get<I>(b) = easing::stepped.run<ArgType>;
63 easingresolve<I + 1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...);
67 template<
int I,
typename TypeTuple,
typename FunctionTuple,
typename... Fs>
68 struct easingresolve<I, TypeTuple, FunctionTuple, easing::linearEasing, Fs...> {
69 typedef typename std::tuple_element<I, TypeTuple>::type ArgType;
71 static void impl(FunctionTuple &b, easing::linearEasing, Fs... fs) {
72 get<I>(b) = easing::linear.run<ArgType>;
73 easingresolve<I + 1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...);
76 template<
int I,
typename TypeTuple,
typename FunctionTuple,
typename... Fs>
77 struct easingresolve<I, TypeTuple, FunctionTuple, easing::defaultEasing, Fs...> {
78 typedef typename std::tuple_element<I, TypeTuple>::type ArgType;
80 static void impl(FunctionTuple &b, easing::defaultEasing, Fs... fs) {
81 get<I>(b) = easing::def.run<ArgType>;
82 easingresolve<I + 1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...);
86 #define DECLARE_EASING_RESOLVE(__EASING_TYPE__) \
87 template <int I, typename TypeTuple, typename FunctionTuple, typename... Fs> \
88 struct easingresolve<I, TypeTuple, FunctionTuple, easing::__EASING_TYPE__ ## InEasing, Fs...> { \
89 typedef typename std::tuple_element<I, TypeTuple>::type ArgType; \
90 static void impl(FunctionTuple & b, decltype(easing::__EASING_TYPE__ ## In), Fs... fs) { \
91 get<I>(b) = easing::__EASING_TYPE__ ## In.run<ArgType>; \
92 easingresolve<I+1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...); \
96 template <int I, typename TypeTuple, typename FunctionTuple, typename... Fs> \
97 struct easingresolve<I, TypeTuple, FunctionTuple, easing::__EASING_TYPE__ ## OutEasing, Fs...> { \
98 typedef typename std::tuple_element<I, TypeTuple>::type ArgType; \
99 static void impl(FunctionTuple & b, decltype(easing::__EASING_TYPE__ ## Out), Fs... fs) { \
100 get<I>(b) = easing::__EASING_TYPE__ ## Out.run<ArgType>; \
101 easingresolve<I+1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...); \
105 template <int I, typename TypeTuple, typename FunctionTuple, typename... Fs> \
106 struct easingresolve<I, TypeTuple, FunctionTuple, easing::__EASING_TYPE__ ## InOutEasing, Fs...> { \
107 typedef typename std::tuple_element<I, TypeTuple>::type ArgType; \
108 static void impl(FunctionTuple & b, decltype(easing::__EASING_TYPE__ ## InOut), Fs... fs) { \
109 get<I>(b) = easing::__EASING_TYPE__ ## InOut.run<ArgType>; \
110 easingresolve<I+1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...); \
114 DECLARE_EASING_RESOLVE(quadratic);
115 DECLARE_EASING_RESOLVE(cubic);
116 DECLARE_EASING_RESOLVE(quartic);
117 DECLARE_EASING_RESOLVE(quintic);
118 DECLARE_EASING_RESOLVE(sinusoidal);
119 DECLARE_EASING_RESOLVE(exponential);
120 DECLARE_EASING_RESOLVE(circular);
121 DECLARE_EASING_RESOLVE(bounce);
122 DECLARE_EASING_RESOLVE(elastic);
123 DECLARE_EASING_RESOLVE(back);
The tweeny namespace contains all symbols and names for the Tweeny library.
Definition: MANUAL.dox:1