Iros
Loading...
Searching...
No Matches
clamp.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/compare.h
"
6
#include "
di/function/identity.h
"
7
8
namespace
di::util
{
9
namespace
detail
{
10
struct
ClampFunction
{
11
template
<
typename
T,
typename
Proj =
function::Identity
,
12
concepts::IndirectStrictWeakOrder<meta::Projected<T const*, Proj>
> Comp =
function::Compare
>
13
constexpr
auto
operator()
(T
const
& value, T
const
&
min
, T
const
&
max
, Comp comp = {}, Proj
proj
= {})
const
14
-> T
const
& {
15
auto
&& projected_value =
function::invoke
(
proj
, value);
16
17
// NOLINTBEGIN(bugprone-return-const-ref-from-parameter)
18
if
(
function::invoke
(comp, projected_value,
function::invoke
(
proj
,
min
)) < 0) {
19
return
min
;
20
}
21
if
(
function::invoke
(comp, projected_value,
function::invoke
(
proj
,
max
)) > 0) {
22
return
max
;
23
}
24
return
value;
25
// NOLINTEND(bugprone-return-const-ref-from-parameter)
26
}
27
};
28
}
29
30
constexpr
inline
auto
clamp
=
detail::ClampFunction
{};
31
}
32
33
namespace
di
{
34
using
util::clamp
;
35
}
di::concepts::IndirectStrictWeakOrder
Definition
indirect_strict_weak_order.h:12
compare.h
identity.h
prelude.h
prelude.h
di::function::invoke
constexpr auto invoke
Definition
invoke.h:100
di::util::detail
Definition
clamp.h:9
di::util
Definition
vocab.h:96
di::util::clamp
constexpr auto clamp
Definition
clamp.h:30
di
Definition
zstring_parser.h:9
di::min
constexpr auto min
Definition
min.h:47
di::proj
constexpr auto proj
Definition
proj.h:59
di::max
constexpr auto max
Definition
max.h:47
di::function::Compare
Definition
compare.h:8
di::function::Identity
Definition
identity.h:7
di::util::detail::ClampFunction
Definition
clamp.h:10
di::util::detail::ClampFunction::operator()
constexpr auto operator()(T const &value, T const &min, T const &max, Comp comp={}, Proj proj={}) const -> T const &
Definition
clamp.h:13
libs
di
include
di
util
clamp.h
Generated by
1.13.0