41#ifndef _DWMTUPLEHELPERS_HH_
42#define _DWMTUPLEHELPERS_HH_
49 namespace TupleHelpers {
54 template <
class Tuple,
class Func, std::size_t... I>
55 constexpr Func ForEachImpl(Tuple && t, Func && f, std::index_sequence<I...>)
57 return (
void)std::initializer_list<int>{(std::forward<Func>(f)(std::get<I>(std::forward<Tuple>(t))),0)...}, f;
63 template <
class Tuple,
class Func>
64 constexpr Func ForEach(Tuple && t, Func && f)
66 return ForEachImpl(std::forward<Tuple>(t), std::forward<Func>(f),
67 std::make_index_sequence<std::tuple_size<std::remove_reference_t<Tuple>>::value>{});
73 template<
typename Tuple,
typename Pred>
74 constexpr size_t FindIf(Tuple && tuple, Pred pred)
76 size_t index = std::tuple_size<std::remove_reference_t<Tuple>>::value;
77 size_t currentIndex = 0;
79 ForEach(tuple, [&](
auto&& value)
81 if (!found && pred(value)) {
93 template<
typename Tuple,
typename Action>
94 void Perform(Tuple && tpl,
size_t index, Action action)
96 size_t currentIndex = 0;
98 [action = std::move(action), index, ¤tIndex]
101 if (currentIndex == index) {
102 action(std::forward<
decltype(value)>(value));