di 0.1.0
Loading...
Searching...
No Matches
find.h
Go to the documentation of this file.
1#pragma once
2
5#include "di/function/equal.h"
9
10namespace di::container {
11namespace detail {
12 struct FindFunction {
13 template<concepts::InputIterator Iter, concepts::SentinelFor<Iter> Sent, typename T,
14 typename Proj = function::Identity>
15 requires(concepts::IndirectBinaryPredicate<function::Equal, meta::Projected<Iter, Proj>, T const*>)
16 constexpr auto operator()(Iter first, Sent last, T const& needle, Proj proj = {}) const -> Iter {
17 for (; first != last; ++first) {
18 if (function::invoke(proj, *first) == needle) {
19 break;
20 }
21 }
22 return first;
23 }
24
25 template<concepts::InputContainer Con, typename T, typename Proj = function::Identity>
26 requires(concepts::IndirectBinaryPredicate<function::Equal, meta::Projected<meta::ContainerIterator<Con>, Proj>,
27 T const*>)
28 constexpr auto operator()(Con&& container, T const& needle, Proj proj = {}) const
30 return (*this)(container::begin(container), container::end(container), needle, util::ref(proj));
31 }
32 };
33}
34
35constexpr inline auto find = detail::FindFunction {};
36}
37
38namespace di {
39using container::find;
40}
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 find
Definition find.h:35
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