1#ifndef GAMROOT_UTILS_TUPLES_HH
2#define GAMROOT_UTILS_TUPLES_HH
4#pragma GCC diagnostic push
5#pragma GCC diagnostic ignored "-Wunused-variable"
19#ifndef DOXYGEN_SHOULD_SKIP_THIS
25 template <
int N,
int... Is>
26 struct gen_seq : gen_seq<N - 1, N - 1, Is...> {
30 struct gen_seq<0, Is...> : seq<Is...> {
33 template <
typename T,
typename F,
int... Is>
34 void for_each(T &&t, F f, seq<Is...>)
36 auto l = {(f(std::get<Is>(t)), 0)...};
40 template <
typename T1,
typename T2,
typename F,
int... Is>
41 void for_both(T1 &&t1, T2 &&t2, F f, seq<Is...>)
43 auto l = {(f(std::get<Is>(t1), std::get<Is>(t2)), 0)...};
46 template <
typename T1,
typename T2,
typename F,
int... Is,
typename N>
47 void for_both(T1 &&t1, T2 &&t2, F f, seq<Is...>, N n)
49 auto l = {(f(std::get<Is>(t1), std::get<Is>(t2), n), 0)...};
66 template <
typename... Ts,
typename F>
69 for_each(t, f, gen_seq<
sizeof...(Ts)>());
82 template <
typename T1,
typename T2,
typename F>
85 for_both(t1, t2, f, gen_seq<std::tuple_size<T1>::value>());
88 template <
typename T1,
typename T2,
typename F,
typename N>
91 for_both(t1, t2, f, gen_seq<std::tuple_size<T1>::value>(), n);
97#pragma GCC diagnostic pop
void for_each_in_tuple(std::tuple< Ts... > &t, F f)
Applies function on each element of tuple.
void for_both_in_tuple(T1 &t1, T2 &t2, F f)
Applies function taking both elements of tuple as arguments.