di 0.1.0
Loading...
Searching...
No Matches
copy_if.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace di::container {
9namespace detail {
10 struct CopyIfFunction {
11 template<concepts::InputIterator It, concepts::SentinelFor<It> Sent, concepts::WeaklyIncrementable Out,
12 typename Proj = function::Identity, concepts::IndirectUnaryPredicate<meta::Projected<It, Proj>> Pred>
13 requires(concepts::IndirectlyCopyable<It, Out>)
14 constexpr auto operator()(It first, Sent last, Out output, Pred pred, Proj proj = {}) const
15 -> InOutResult<It, Out> {
16 for (; first != last; ++first) {
17 if (function::invoke(pred, function::invoke(proj, *first))) {
18 *output = *first;
19 ++output;
20 }
21 }
22 return { util::move(first), util::move(output) };
23 }
24
25 template<concepts::InputContainer Con, concepts::WeaklyIncrementable Out, typename Proj = function::Identity,
26 concepts::IndirectUnaryPredicate<meta::Projected<meta::ContainerIterator<Con>, Proj>> Pred>
27 requires(concepts::IndirectlyCopyable<meta::ContainerIterator<Con>, Out>)
28 constexpr auto operator()(Con&& container, Out output, Pred pred, Proj proj = {}) const
29 -> InOutResult<meta::BorrowedIterator<Con>, Out> {
30 return (*this)(container::begin(container), container::end(container), util::move(output), util::ref(pred),
32 }
33 };
34}
35
36constexpr inline auto copy_if = detail::CopyIfFunction {};
37}
38
39namespace di {
41}
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 copy_if
Definition copy_if.h:36
constexpr auto end
Definition end.h:55
constexpr auto begin
Definition begin.h:52
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 any_storable.h:9
constexpr auto proj
Definition proj.h:59