Iros
 
Loading...
Searching...
No Matches
zip_transform.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace di::container::view {
8namespace detail {
10
11 template<typename F, typename... Cons>
13
14 template<typename F, typename... Cons>
15 concept EmptyZipTransform = sizeof...(Cons) == 0 && concepts::Invocable<meta::Decay<F>&> &&
17
18 template<typename F, typename... Cons>
19 concept ViewZipTransform = sizeof...(Cons) > 0 && requires(F&& function, Cons&&... containers) {
20 ZipTransformView(util::forward<F>(function), util::forward<Cons>(containers)...);
21 };
22
24 template<typename F, concepts::ViewableContainer... Cons>
26 constexpr auto operator()(F&& function, Cons&&... containers) const -> concepts::View auto {
27 if constexpr (CustomZipTransform<F, Cons...>) {
28 return function::tag_invoke(*this, util::forward<F>(function), util::forward<Cons>(containers)...);
29 } else if constexpr (EmptyZipTransform<F, Cons...>) {
31 } else {
32 return ZipTransformView { util::forward<F>(function), util::forward<Cons>(containers)... };
33 }
34 }
35 };
36}
37
39}
40
41namespace di {
42using view::zip_transform;
43}
Definition zip_transform_view.h:14
Definition invoke.h:58
Definition language.h:370
Definition tag_invoke.h:33
Definition view.h:10
Definition viewable_container.h:14
Definition adjacent.h:9
concept Cons
Definition zip_transform.h:12
concept F
Definition zip_transform.h:12
Definition adjacent.h:8
constexpr auto zip_transform
Definition zip_transform.h:38
constexpr auto empty
Definition empty.h:7
ZipTransformView(F, Cons &&...) -> ZipTransformView< F, meta::AsView< Cons >... >
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Definition as_bool.h:8
Conditional< concepts::LanguageArray< RemoveReference< T > >, RemoveExtent< RemoveReference< T > > *, Conditional< concepts::LanguageFunction< RemoveReference< T > >, AddPointer< RemoveReference< T > >, RemoveCVRef< T > > > Decay
Definition language.h:574
decltype(function::detail::invoke_impl(util::declval< Ts >()...)) InvokeResult
Definition invoke.h:64
Definition zstring_parser.h:9