Loading [MathJax]/jax/input/TeX/config.js
Iros
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
Loading...
Searching...
No Matches
zip.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace di::container::view {
8namespace detail {
9 struct ZipFunction;
10
11 template<typename... Cons>
13
14 template<typename... Cons>
15 concept EmptyZip = sizeof...(Cons) == 0;
16
17 template<typename... Cons>
18 concept ViewZip =
19 requires(Cons&&... containers) { ZipView<meta::AsView<Cons>...>(util::forward<Cons>(containers)...); };
20
21 struct ZipFunction {
23 requires(CustomZip<Cons...> || EmptyZip<Cons...> || ViewZip<Cons...>)
24 constexpr auto operator()(Cons&&... containers) const -> concepts::View auto {
25 if constexpr (CustomZip<Cons...>) {
26 return function::tag_invoke(*this, util::forward<Cons>(containers)...);
27 } else if constexpr (EmptyZip<Cons...>) {
28 return empty<Tuple<>>;
29 } else {
30 return ZipView<meta::AsView<Cons>...>(util::forward<Cons>(containers)...);
31 }
32 }
33 };
34}
35
36constexpr inline auto zip = detail::ZipFunction {};
37}
38
39namespace di {
40using view::zip;
41}
Definition zip_view.h:24
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
Definition adjacent.h:8
constexpr auto zip
Definition zip.h:36
constexpr auto empty
Definition empty.h:7
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Definition zstring_parser.h:9