di 0.1.0
Loading...
Searching...
No Matches
apply.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/algorithm.h"
5#include "di/types/size_t.h"
6#include "di/util/forward.h"
7#include "di/util/get.h"
10
11namespace di::vocab {
12namespace detail {
13 template<types::size_t... indices, typename F, concepts::TupleLike Tup>
14 constexpr auto apply_impl(meta::ListV<indices...>, F&& f, Tup&& tuple)
15 -> decltype(function::invoke(util::forward<F>(f), util::get<indices>(util::forward<Tup>(tuple))...)) {
16 // NOLINTNEXTLINE(bugprone-use-after-move)
17 return function::invoke(util::forward<F>(f), util::get<indices>(util::forward<Tup>(tuple))...);
18 }
19}
20
21template<typename F, concepts::TupleLike Tup>
22constexpr auto apply(F&& f, Tup&& tuple)
23 -> decltype(detail::apply_impl(meta::MakeIndexSequence<meta::TupleSize<Tup>> {}, util::forward<F>(f),
24 util::forward<Tup>(tuple))) {
25 return detail::apply_impl(meta::MakeIndexSequence<meta::TupleSize<Tup>> {}, util::forward<F>(f),
26 util::forward<Tup>(tuple));
27}
28
29template<typename F, concepts::TupleLike Tup>
30constexpr auto apply_reverse(F&& f, Tup&& tuple)
31 -> decltype(detail::apply_impl(meta::MakeReverseIndexSequence<meta::TupleSize<Tup>> {}, util::forward<F>(f),
32 util::forward<Tup>(tuple))) {
33 return detail::apply_impl(meta::MakeReverseIndexSequence<meta::TupleSize<Tup>> {}, util::forward<F>(f),
34 util::forward<Tup>(tuple));
35}
36}
37
38namespace di {
39using vocab::apply;
41}
constexpr auto invoke
Definition invoke.h:100
constexpr auto TupleSize
Definition tuple_size.h:23
ReverseV< MakeIntegerSequence< usize, count > > MakeReverseIndexSequence
Definition algorithm.h:336
MakeIntegerSequence< usize, count > MakeIndexSequence
Definition algorithm.h:333
std::size_t size_t
Definition size_t.h:12
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
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 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