di 0.1.0
Loading...
Searching...
No Matches
is_partitioned.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace di::container {
7namespace detail {
8 struct IsPartitionedFunction {
9 template<concepts::InputIterator It, concepts::SentinelFor<It> Sent, typename Proj = function::Identity,
10 concepts::IndirectUnaryPredicate<meta::Projected<It, Proj>> Pred>
11 constexpr auto operator()(It first, Sent last, Pred pred, Proj proj = {}) const -> bool {
12 auto mid = container::find_if_not(util::move(first), last, util::ref(pred), util::ref(proj));
13 return container::find_if(util::move(mid), last, util::ref(pred), util::ref(proj)) == last;
14 }
15
16 template<concepts::InputContainer Con, typename Proj = function::Identity,
17 concepts::IndirectUnaryPredicate<meta::Projected<meta::ContainerIterator<Con>, Proj>> Pred>
18 constexpr auto operator()(Con&& container, Pred pred, Proj proj = {}) const -> bool {
19 return (*this)(container::begin(container), container::end(container), util::ref(pred), util::ref(proj));
20 }
21 };
22}
23
24constexpr inline auto is_partitioned = detail::IsPartitionedFunction {};
25}
26
27namespace di {
29}
constexpr auto last(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_last.h:13
Definition sequence.h:12
constexpr auto find_if
Definition find_if.h:31
constexpr auto find_if_not
Definition find_if_not.h:31
constexpr auto is_partitioned
Definition is_partitioned.h:24
constexpr auto end
Definition end.h:55
constexpr auto begin
Definition begin.h:52
constexpr auto ref
Definition reference_wrapper.h:98
Definition any_storable.h:9
constexpr auto proj
Definition proj.h:59