Iros
 
Loading...
Searching...
No Matches
remove.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 T,
12 typename Proj = function::Identity>
14 constexpr auto operator()(It first, Sent last, T const& value, Proj proj = {}) const -> View<It> {
15 auto fast = container::find(util::move(first), last, value, util::ref(proj));
16 if (fast == last) {
17 return { fast, fast };
18 }
19
20 auto slow = fast++;
21 for (; fast != last; ++fast) {
22 if (value != function::invoke(proj, *fast)) {
23 *slow = container::iterator_move(fast);
24 ++slow;
25 }
26 }
27 return { util::move(slow), util::move(fast) };
28 }
29
30 template<concepts::ForwardContainer Con, typename T, typename Proj = function::Identity>
31 requires(concepts::Permutable<meta::ContainerIterator<Con>> &&
32 concepts::IndirectBinaryPredicate<function::Equal, meta::Projected<meta::ContainerIterator<Con>, Proj>,
33 T const*>)
34 constexpr auto operator()(Con&& container, T const& value, Proj proj = {}) const -> meta::BorrowedView<Con> {
36 }
37 };
38}
39
40constexpr inline auto remove = detail::RemoveFunction {};
41}
Definition view.h:35
Definition indirect_binary_predicate.h:12
Definition sequence.h:13
Definition sequence.h:12
constexpr auto find
Definition find.h:35
constexpr auto remove
Definition remove.h:40
constexpr auto iterator_move
Definition iterator_move.h:56
constexpr auto end
Definition end.h:47
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
@ T
Definition key.h:29