Iros
 
Loading...
Searching...
No Matches
find_last.h
Go to the documentation of this file.
1#pragma once
2
7#include "di/function/equal.h"
11
12namespace di::container {
13namespace detail {
15 template<concepts::InputIterator Iter, concepts::SentinelFor<Iter> Sent, typename T,
16 typename Proj = function::Identity>
18 constexpr auto operator()(Iter first, Sent last, T const& needle, Proj proj = {}) const -> View<Iter> {
20 auto rlast = make_reverse_iterator(first);
21 auto it = container::find(make_reverse_iterator(last), rlast, needle, util::ref(proj));
22 if (it == rlast) {
23 return { last, last };
24 }
25 return { container::prev(it.base()), last };
26 } else {
27 Iter result {};
28 for (; first != last; ++first) {
29 if (function::invoke(proj, *first) == needle) {
30 result = first;
31 }
32 }
33 return { result == Iter {} ? first : result, first };
34 }
35 }
36
37 template<concepts::InputContainer Con, typename T, typename Proj = function::Identity>
38 requires(concepts::IndirectBinaryPredicate<function::Equal, meta::Projected<meta::ContainerIterator<Con>, Proj>,
39 T const*>)
40 constexpr auto operator()(Con&& container, T const& needle, Proj proj = {}) const -> meta::BorrowedView<Con> {
42 }
43 };
44}
45
46constexpr inline auto find_last = detail::FindLastFunction {};
47}
48
49namespace di {
51}
Definition view.h:35
Definition bidirectional_iterator.h:8
Definition indirect_binary_predicate.h:12
Definition core.h:114
Definition sequence.h:13
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 prev
Definition prev.h:28
constexpr auto find
Definition find.h:35
constexpr auto find_last
Definition find_last.h:46
constexpr auto make_reverse_iterator(Iter iter)
Definition reverse_iterator.h:110
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
Definition zstring_parser.h:9
constexpr auto proj
Definition proj.h:59
@ T
Definition key.h:29