Iros
 
Loading...
Searching...
No Matches
replace_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 {
12 template<concepts::InputIterator It, concepts::SentinelFor<It> Sent, typename T, typename U,
13 concepts::OutputIterator<U const&> Out, typename Proj = function::Identity>
16 constexpr auto operator()(It first, Sent last, Out output, T const& old_value, U const& new_value,
17 Proj proj = {}) const -> InOutResult<It, Out> {
18 for (; first != last; ++first, ++output) {
19 if (old_value == function::invoke(proj, *first)) {
20 *output = new_value;
21 } else {
22 *output = *first;
23 }
24 }
25 return { util::move(first), util::move(output) };
26 }
27
28 template<concepts::ForwardContainer Con, typename T, typename U, concepts::OutputIterator<U const&> Out,
29 typename Proj = function::Identity>
30 requires(concepts::IndirectlyCopyable<meta::ContainerIterator<Con>, Out> &&
31 concepts::IndirectBinaryPredicate<function::Equal, meta::Projected<meta::ContainerIterator<Con>, Proj>,
32 T const*>)
33 constexpr auto operator()(Con&& container, Out output, T const& old_value, U const& new_value,
34 Proj proj = {}) const -> InOutResult<meta::BorrowedIterator<Con>, Out> {
35 return (*this)(container::begin(container), container::end(container), util::move(output), old_value,
36 new_value, util::ref(proj));
37 }
38 };
39}
40
41constexpr inline auto replace_copy = detail::ReplaceCopyFunction {};
42}
43
44namespace di {
46}
Definition indirect_binary_predicate.h:12
Definition indirectly_copyable.h:9
Definition sequence.h:13
Definition sequence.h:12
constexpr auto replace_copy
Definition replace_copy.h:41
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 >, 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
@ T
Definition key.h:29
Definition in_out_result.h:8
Definition replace_copy.h:11