Iros
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
Loading...
Searching...
No Matches
remove_if.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace di::container {
9namespace detail {
11 template<concepts::Permutable It, concepts::SentinelFor<It> Sent, typename Proj = function::Identity,
12 concepts::IndirectUnaryPredicate<meta::Projected<It, Proj>> Pred>
13 constexpr auto operator()(It first, Sent last, Pred pred, Proj proj = {}) const -> View<It> {
14 auto fast = container::find_if(util::move(first), last, util::ref(pred), util::ref(proj));
15 if (fast == last) {
16 return { fast, fast };
17 }
18
19 auto slow = fast++;
20 for (; fast != last; ++fast) {
21 if (!function::invoke(pred, function::invoke(proj, *fast))) {
22 *slow = container::iterator_move(fast);
23 ++slow;
24 }
25 }
26 return { util::move(slow), util::move(fast) };
27 }
28
29 template<concepts::ForwardContainer Con, typename Proj = function::Identity,
30 concepts::IndirectUnaryPredicate<meta::Projected<meta::ContainerIterator<Con>, Proj>> Pred>
31 requires(concepts::Permutable<meta::ContainerIterator<Con>>)
32 constexpr auto operator()(Con&& container, Pred pred, Proj proj = {}) const -> meta::BorrowedView<Con> {
34 }
35 };
36}
37
38constexpr inline auto remove_if = detail::RemoveIfFunction {};
39}
Definition view.h:35
Definition sequence.h:13
Definition sequence.h:12
constexpr auto iterator_move
Definition iterator_move.h:56
constexpr auto find_if
Definition find_if.h:31
constexpr auto end
Definition end.h:47
constexpr auto remove_if
Definition remove_if.h:38
constexpr auto begin
Definition begin.h:44
constexpr auto invoke
Definition invoke.h:100
Conditional< concepts::BorrowedContainer< Con >, container::View< ContainerIterator< Con > >, container::Dangling > BorrowedView
Definition borrowed_view.h:12
constexpr auto ref
Definition reference_wrapper.h:98
constexpr auto proj
Definition proj.h:59
constexpr auto operator()(It first, Sent last, Pred pred, Proj proj={}) const -> View< It >
Definition remove_if.h:13