di 0.1.0
Loading...
Searching...
No Matches
tuple_for_each.h
Go to the documentation of this file.
1#pragma once
2
8
9namespace di::vocab {
10namespace detail {
11 template<typename F, typename Tup, typename Ind>
12 struct TupleForEachValid;
13
14 template<size_t... indices, typename F, typename Tup>
15 struct TupleForEachValid<F, Tup, meta::ListV<indices...>> {
16 constexpr static bool value = (concepts::Invocable<F&, meta::TupleValue<Tup, indices>> && ...);
17 };
18}
19
20template<typename F, concepts::TupleLike Tup>
21requires(detail::TupleForEachValid<F, Tup, meta::MakeIndexSequence<meta::TupleSize<Tup>>>::value)
22constexpr void tuple_for_each(F&& function, Tup&& tuple) {
23 return apply(
24 [&]<typename... Types>(Types&&... values) {
25 (void) (function::invoke(function, util::forward<Types>(values)), ...);
26 },
27 util::forward<Tup>(tuple));
28}
29
30template<typename F, concepts::TupleLike Tup>
31requires(detail::TupleForEachValid<F, Tup, meta::MakeIndexSequence<meta::TupleSize<Tup>>>::value)
32constexpr void tuple_for_each_reverse(F&& function, Tup&& tuple) {
33 return apply_reverse(
34 [&]<typename... Types>(Types&&... values) {
35 (void) (function::invoke(function, util::forward<Types>(values)), ...);
36 },
37 util::forward<Tup>(tuple));
38}
39}
40
41namespace di {
44}
Definition as_bool.h:8
constexpr auto invoke
Definition invoke.h:100
constexpr auto value
Definition value.h:34
Definition lazy.h:165
constexpr auto apply(F &&f, Tup &&tuple) -> decltype(detail::apply_impl(meta::MakeIndexSequence< meta::TupleSize< Tup > > {}, util::forward< F >(f), util::forward< Tup >(tuple)))
Definition apply.h:22
constexpr void tuple_for_each_reverse(F &&function, Tup &&tuple)
Definition tuple_for_each.h:32
constexpr void tuple_for_each(F &&function, Tup &&tuple)
Definition tuple_for_each.h:22
constexpr auto apply_reverse(F &&f, Tup &&tuple) -> decltype(detail::apply_impl(meta::MakeReverseIndexSequence< meta::TupleSize< Tup > > {}, util::forward< F >(f), util::forward< Tup >(tuple)))
Definition apply.h:30
Definition any_storable.h:9