di 0.1.0
Loading...
Searching...
No Matches
transform.h
Go to the documentation of this file.
1#pragma once
2
6#include "di/util/forward.h"
7
8namespace di::container::view {
9namespace detail {
10 template<typename Con, typename F>
11 concept RegularTransform = requires(Con&& container, F&& function) {
12 TransformView { util::forward<Con>(container), util::forward<F>(function) };
13 };
14
15 struct TransformFunction {
16 template<typename Con, typename F>
17 requires(concepts::TagInvocable<TransformFunction, Con, F> || RegularTransform<Con, F>)
18 constexpr auto operator()(Con&& container, F&& function) const {
19 if constexpr (concepts::TagInvocable<TransformFunction, Con, F>) {
20 return function::tag_invoke(*this, util::forward<Con>(container), util::forward<F>(function));
21 } else {
22 return TransformView { util::forward<Con>(container), util::forward<F>(function) };
23 }
24 }
25 };
26}
27
28constexpr inline auto transform = function::curry_back(detail::TransformFunction {}, meta::c_<2ZU>);
29}
30
31namespace di {
32using view::transform;
33}
Definition adjacent.h:8
constexpr auto transform
Definition transform.h:28
TransformView(Con &&, F) -> TransformView< meta::AsView< Con >, F >
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto curry_back
Definition curry_back.h:141
constexpr auto c_
A value of type Constexpr<val>.
Definition constexpr.h:252
Definition any_storable.h:9