Iros
 
Loading...
Searching...
No Matches
clamp.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace di::util {
9namespace detail {
11 template<typename T, typename Proj = function::Identity,
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
30constexpr inline auto clamp = detail::ClampFunction {};
31}
32
33namespace di {
34using util::clamp;
35}
Definition indirect_strict_weak_order.h:12
constexpr auto invoke
Definition invoke.h:100
Definition clamp.h:9
Definition vocab.h:96
constexpr auto clamp
Definition clamp.h:30
Definition zstring_parser.h:9
constexpr auto min
Definition min.h:47
constexpr auto proj
Definition proj.h:59
constexpr auto max
Definition max.h:47
Definition compare.h:8
Definition identity.h:7
Definition clamp.h:10
constexpr auto operator()(T const &value, T const &min, T const &max, Comp comp={}, Proj proj={}) const -> T const &
Definition clamp.h:13