eet-cxx: add implementation for eet C++.
[platform/upstream/efl.git] / src / bindings / eet_cxx / eet_fold.hh
1 #ifndef EFL_EET_FOLD_HH_
2 #define EFL_EET_FOLD_HH_
3
4 #include <eet_tuple.hh>
5
6 namespace efl { namespace eet {
7
8 namespace _mpl {
9
10 template <typename T, typename F, typename A0, bool B = std::is_same<T, std::tuple<> >::value>
11 struct fold_impl
12 {
13   typedef typename F::template apply<A0, typename std::tuple_element<0, T>::type>::type result;
14   typedef typename fold_impl<typename pop_front<T>::type
15                              , F, result
16                              >::type
17   type;
18 };
19
20 template <typename T, typename F, typename A0>
21 struct fold_impl<T, F, A0, true>
22 {
23   typedef A0 type;
24 };
25
26 template <typename T, typename F, typename A0>
27 struct fold : fold_impl<T, F, A0>
28 {};
29
30 } } }
31
32 #endif