di 0.1.0
Loading...
Searching...
No Matches
remove_copy.h
Go to the documentation of this file.
1#pragma once
2
7#include "di/function/equal.h"
8
9namespace di::container {
10namespace detail {
11 struct RemoveCopyFunction {
12 template<concepts::InputIterator It, concepts::SentinelFor<It> Sent, concepts::WeaklyIncrementable Out,
13 typename T, typename Proj = function::Identity>
14 requires(concepts::IndirectlyCopyable<It, Out> &&
15 concepts::IndirectBinaryPredicate<function::Equal, meta::Projected<It, Proj>, T const*>)
16 constexpr auto operator()(It first, Sent last, Out output, T const& value, Proj proj = {}) const
17 -> InOutResult<It, Out> {
18 for (; first != last; ++first) {
19 if (value != function::invoke(proj, *first)) {
20 *output = *first;
21 ++output;
22 }
23 }
24 return { util::move(first), util::move(output) };
25 }
26
27 template<concepts::ForwardContainer Con, concepts::WeaklyIncrementable Out, typename T,
28 typename Proj = function::Identity>
29 requires(concepts::IndirectlyCopyable<meta::ContainerIterator<Con>, Out> &&
30 concepts::IndirectBinaryPredicate<function::Equal, meta::Projected<meta::ContainerIterator<Con>, Proj>,
31 T const*>)
32 constexpr auto operator()(Con&& container, Out output, T const& value, Proj proj = {}) const
33 -> InOutResult<meta::BorrowedIterator<Con>, Out> {
34 return (*this)(container::begin(container), container::end(container), util::move(output), value,
36 }
37 };
38}
39
40constexpr inline auto remove_copy = detail::RemoveCopyFunction {};
41}
42
43namespace di {
45}
constexpr auto last(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_last.h:13
constexpr auto first(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_first.h:13
Definition sequence.h:12
constexpr auto end
Definition end.h:55
constexpr auto remove_copy
Definition remove_copy.h:40
constexpr auto begin
Definition begin.h:52
constexpr auto invoke
Definition invoke.h:100
constexpr auto value
Definition value.h:34
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition borrowed_iterator.h:11
constexpr auto ref
Definition reference_wrapper.h:98
Definition any_storable.h:9
constexpr auto proj
Definition proj.h:59