Iros
 
Loading...
Searching...
No Matches
replace_copy_if.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace di::container {
9namespace detail {
11 template<concepts::InputIterator It, concepts::SentinelFor<It> Sent, typename U,
12 concepts::OutputIterator<U const&> Out, typename Proj = function::Identity,
13 concepts::IndirectUnaryPredicate<meta::Projected<It, Proj>> Pred>
15 constexpr auto operator()(It first, Sent last, Out output, Pred pred, U const& new_value, Proj proj = {}) const
17 for (; first != last; ++first, ++output) {
18 if (function::invoke(pred, function::invoke(proj, *first))) {
19 *output = new_value;
20 } else {
21 *output = *first;
22 }
23 }
24 return { util::move(first), util::move(output) };
25 }
26
27 template<concepts::ForwardContainer Con, typename U, concepts::OutputIterator<U const&> Out,
28 typename Proj = function::Identity,
29 concepts::IndirectUnaryPredicate<meta::Projected<meta::ContainerIterator<Con>, Proj>> Pred>
30 requires(concepts::IndirectlyCopyable<meta::ContainerIterator<Con>, Out>)
31 constexpr auto operator()(Con&& container, Out output, Pred pred, U const& new_value, Proj proj = {}) const
33 return (*this)(container::begin(container), container::end(container), util::move(output), util::ref(pred),
34 new_value, util::ref(proj));
35 }
36 };
37}
38
40}
41
42namespace di {
44}
Definition indirectly_copyable.h:9
Definition sequence.h:13
Definition sequence.h:12
constexpr auto end
Definition end.h:47
constexpr auto replace_copy_if
Definition replace_copy_if.h:39
constexpr auto begin
Definition begin.h:44
constexpr auto invoke
Definition invoke.h:100
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition borrowed_iterator.h:11
constexpr auto ref
Definition reference_wrapper.h:98
Definition zstring_parser.h:9
constexpr auto proj
Definition proj.h:59
Definition in_out_result.h:8
Definition replace_copy_if.h:10