3 #include <initializer_list> 7 #include <amdis/common/Index.hpp> 8 #include <amdis/common/Range.hpp> 14 template <
class Functor,
class... Args>
15 constexpr
void forVariadic(
Functor&& f, Args&&... args)
20 template <std::size_t... I,
class Tuple,
class Functor>
21 constexpr
void forEach(std::index_sequence<I...>, Tuple&& tuple,
Functor&& f)
24 (f(get<I>(tuple)),...);
27 template <
class... T,
class Functor>
28 constexpr
void forEach(std::tuple<T...>
const& tuple,
Functor&& f)
30 Ranges::forEach(std::make_index_sequence<
sizeof...(T)>{}, tuple, FWD(f));
33 template <
class... T,
class Functor>
34 constexpr
void forEach(std::tuple<T...>& tuple,
Functor&& f)
36 Ranges::forEach(std::make_index_sequence<
sizeof...(T)>{}, tuple, FWD(f));
39 template <
class Range,
class Functor>
40 constexpr
auto forEach(Range&& r,
Functor&& f)
41 -> std::void_t<decltype((std::begin(r),std::end(r)))>
47 template <std::size_t I0 = 0, std::size_t... I,
class Functor>
48 constexpr
void forIndices(std::index_sequence<I...>,
Functor&& f)
50 (f(index_t<I0+I>{}),...);
53 template <std::
size_t I0, std::
size_t I1,
class Functor>
54 constexpr
void forIndices(index_t<I0>, index_t<I1>,
Functor&& f)
56 Ranges::forIndices<I0>(std::make_index_sequence<std::size_t(I1-I0)>{}, FWD(f));
59 template <std::
size_t N,
class Functor>
60 constexpr
void forIndices(index_t<N>,
Functor&& f)
62 Ranges::forIndices(std::make_index_sequence<N>{}, FWD(f));
65 template <std::
size_t I0, std::
size_t I1,
class Functor>
66 constexpr
void forIndices(
Functor&& f)
68 Ranges::forIndices<I0>(std::make_index_sequence<std::size_t(I1-I0)>{}, FWD(f));
71 template <std::
size_t N,
class Functor>
72 constexpr
void forIndices(
Functor&& f)
74 Ranges::forIndices<0>(std::make_index_sequence<N>{}, FWD(f));
constexpr bool Functor
A Functor is a function F with signature Signature.
Definition: Concepts.hpp:134
Definition: AdaptBase.hpp:6