10template<concepts::MoveConstructible
F, concepts::InputContainer... Views>
11requires((concepts::View<Views> && ...) &&
sizeof...(Views) > 0 &&
12 concepts::Invocable<F&, meta::ContainerReference<Views>...> &&
13 concepts::CanReference<meta::InvokeResult<F&, meta::ContainerReference<Views>...>>)
16 using InnerView =
ZipView<Views...>;
18 template<
bool is_const>
21 template<
bool is_const>
24 template<
bool is_const>
27 template<
bool is_const>
30 template<
bool is_const>
32 :
public SentinelExtension<Sentinel<is_const>, Zentinel<is_const>, Iterator<is_const>, Ziperator<is_const>> {
38 constexpr explicit Sentinel(Zentinel<is_const> sentinel) : Base(sentinel) {}
41 constexpr Sentinel() =
default;
43 constexpr Sentinel(Sentinel<!is_const> other)
45 : Base(other.
base()) {}
48 template<
bool is_const>
51 Iterator<is_const>, Ziperator<is_const>,
52 meta::RemoveCVRef<meta::InvokeResult<meta::MaybeConst<is_const, F>&,
53 meta::ContainerReference<meta::MaybeConst<is_const, Views>>...>>> {
55 Iterator<is_const>, Ziperator<is_const>,
62 : Base(util::move(iterator)), m_parent(util::addressof(parent)) {}
69 constexpr Iterator(Iterator<!is_const> other)
71 : Base(util::move(other).base()), m_parent(other.m_parent) {}
73 constexpr auto operator*()
const ->
decltype(
auto) {
75 [&](
auto const&... iters) ->
decltype(
auto) {
78 this->base().iterators());
83 friend class Iterator;
87 return util::move(*self);
102 constexpr auto begin() {
return Iterator<false>(*
this, m_zip.begin()); }
105 requires(
concepts::Container<InnerView const> &&
106 concepts::Invocable<F const&,
meta::ContainerReference<Views const>...>)
108 return Iterator<true>(*
this, m_zip.begin());
113 return Iterator<false>(*
this, m_zip.end());
115 return Sentinel<false>(m_zip.end());
119 constexpr auto end() const
120 requires(
concepts::Container<InnerView const> &&
121 concepts::Invocable<F const&,
meta::ContainerReference<Views const>...>)
124 return Iterator<true>(*
this, m_zip.end());
126 return Sentinel<true>(m_zip.end());
137 requires(
concepts::SizedContainer<InnerView const>)
147template<
class F,
class... Cons>
Definition iterator_extension.h:19
Definition sentinel_extension.h:10
constexpr auto base() const -> Sent
Definition sentinel_extension.h:16
Definition view_interface.h:26
Definition rebindable_box.h:42
Definition common_container.h:10
Definition operations.h:99
Definition operations.h:27
Definition sized_container.h:8
Definition any_storable.h:9
concept F
Definition zip_transform.h:12
constexpr auto move
Definition move.h:38
ZipTransformView(F, Cons &&...) -> ZipTransformView< F, meta::AsView< Cons >... >
auto tag_invoke(types::Tag< util::deduce_create >, InPlaceTemplate< NodeHashMap >, Con &&) -> NodeHashMap< meta::TupleElement< T, 0 >, meta::TupleElement< T, 1 > >
constexpr auto invoke
Definition invoke.h:100
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
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