Iros
Loading...
Searching...
No Matches
count_if.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/identity.h
"
6
#include "
di/function/invoke.h
"
7
#include "
di/util/reference_wrapper.h
"
8
9
namespace
di::container
{
10
namespace
detail
{
11
struct
CountIfFunction
{
12
template
<concepts::InputIterator Iter, concepts::SentinelFor<Iter> Sent,
typename
Proj = function::Identity,
13
concepts::IndirectUnaryPredicate<meta::Projected<Iter, Proj>> Pred>
14
constexpr
auto
operator()
(Iter first, Sent last, Pred pred, Proj projection = {})
const
15
->
meta::IteratorSSizeType<Iter>
{
16
auto
result =
meta::IteratorSSizeType<Iter>
{ 0 };
17
for
(; first != last; ++first) {
18
if
(
function::invoke
(pred,
function::invoke
(projection, *first))) {
19
result++;
20
}
21
}
22
return
result;
23
}
24
25
template
<concepts::InputContainer Con,
typename
Proj = function::Identity,
26
concepts::IndirectUnaryPredicate<meta::Projected<meta::ContainerIterator<Con>, Proj>> Pred>
27
constexpr
auto
operator()
(Con&&
container
, Pred pred, Proj
proj
= {})
const
->
meta::ContainerSSizeType<Con>
{
28
return
(*
this
)(
container::begin
(
container
),
container::end
(
container
),
util::ref
(pred),
util::ref
(
proj
));
29
}
30
};
31
}
32
33
constexpr
inline
auto
count_if
=
detail::CountIfFunction
{};
34
}
35
36
namespace
di
{
37
using
container::count_if
;
38
}
identity.h
prelude.h
prelude.h
invoke.h
di::container::detail
Definition
sequence.h:13
di::container
Definition
sequence.h:12
di::container::end
constexpr auto end
Definition
end.h:47
di::container::count_if
constexpr auto count_if
Definition
count_if.h:33
di::container::begin
constexpr auto begin
Definition
begin.h:44
di::function::invoke
constexpr auto invoke
Definition
invoke.h:100
di::meta::ContainerSSizeType
IteratorSSizeType< ContainerIterator< T > > ContainerSSizeType
Definition
container_ssize_type.h:8
di::meta::IteratorSSizeType
decltype(container::iterator_ssize_type(types::in_place_type< meta::RemoveCVRef< T > >)) IteratorSSizeType
Definition
iterator_ssize_type.h:8
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::CountIfFunction
Definition
count_if.h:11
di::container::detail::CountIfFunction::operator()
constexpr auto operator()(Con &&container, Pred pred, Proj proj={}) const -> meta::ContainerSSizeType< Con >
Definition
count_if.h:27
di::container::detail::CountIfFunction::operator()
constexpr auto operator()(Iter first, Sent last, Pred pred, Proj projection={}) const -> meta::IteratorSSizeType< Iter >
Definition
count_if.h:14
libs
di
include
di
container
algorithm
count_if.h
Generated by
1.13.0