di
0.1.0
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
}
prelude.h
prelude.h
compare.h
identity.h
di::function::invoke
constexpr auto invoke
Definition
invoke.h:100
di::function::value
constexpr auto value
Definition
value.h:34
di::util
Definition
vocab.h:96
di::util::clamp
constexpr auto clamp
Definition
clamp.h:30
di
Definition
any_storable.h:9
di::min
constexpr auto min
Definition
min.h:49
di::proj
constexpr auto proj
Definition
proj.h:59
di::max
constexpr auto max
Definition
max.h:49
di
util
clamp.h
Generated by
1.13.2