Iros
Loading...
Searching...
No Matches
find.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/concepts/prelude.h
"
4
#include "
di/container/meta/prelude.h
"
5
#include "
di/function/equal.h
"
6
#include "
di/function/identity.h
"
7
#include "
di/function/invoke.h
"
8
#include "
di/util/reference_wrapper.h
"
9
10
namespace
di::container
{
11
namespace
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
29
->
meta::BorrowedIterator<Con>
{
30
return
(*
this
)(
container::begin
(
container
),
container::end
(
container
), needle,
util::ref
(
proj
));
31
}
32
};
33
}
34
35
constexpr
inline
auto
find
=
detail::FindFunction
{};
36
}
37
38
namespace
di
{
39
using
container::find
;
40
}
di::concepts::IndirectBinaryPredicate
Definition
indirect_binary_predicate.h:12
equal.h
identity.h
prelude.h
prelude.h
invoke.h
di::container::detail
Definition
sequence.h:13
di::container
Definition
sequence.h:12
di::container::find
constexpr auto find
Definition
find.h:35
di::container::end
constexpr auto end
Definition
end.h:47
di::container::begin
constexpr auto begin
Definition
begin.h:44
di::function::invoke
constexpr auto invoke
Definition
invoke.h:100
di::meta::BorrowedIterator
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition
borrowed_iterator.h:11
di::util::ref
constexpr auto ref
Definition
reference_wrapper.h:98
di
Definition
zstring_parser.h:9
di::proj
constexpr auto proj
Definition
proj.h:59
reference_wrapper.h
di::container::detail::FindFunction
Definition
find.h:12
libs
di
include
di
container
algorithm
find.h
Generated by
1.13.0