12#include <initializer_list>
23 template<std::
signed_
integral T>
30 template<std::
floating_po
int T>
33 return std::fabs(
num);
39 {
abs(x) } -> std::same_as<T>;
43 template<HasAbsFunction T,
size_t N>
50 template<std::
floating_po
int T>
53 return std::floor(
num);
59 {
floor(x) } -> std::same_as<T>;
63 template<HasFloorFunction T,
size_t N>
70 template<std::
floating_po
int T>
73 return std::copysign(
mag,
sgn);
77 template<std::
integral T>
84 template<std::
floating_po
int T>
87 return std::fmod(x, y);
93 {
mod(x, y) } -> std::same_as<T>;
97 template<HasModFunction T,
size_t N>
106 {
min(x, y) } -> std::convertible_to<T>;
110 template<HasMinFunction T,
size_t N>
119 {
max(x, y) } -> std::convertible_to<T>;
123 template<HasMaxFunction T,
size_t N>
124 requires std::is_arithmetic_v<T>
133 {
clamp(
v,
lo,
hi) } -> std::convertible_to<T>;
137 template<HasClampFunction T,
size_t N>
144 template<HasClampFunction T,
size_t N>
151 template<std::
floating_po
int T>
154 return clamp(
num,
static_cast<T>(0),
static_cast<T>(1));
160 {
saturate(x) } -> std::convertible_to<T>;
164 template<HasSaturateFunction T,
size_t N>
177 std::is_arithmetic_v<Arithmetic1>
and
178 std::is_arithmetic_v<Arithmetic2>
and
179 std::is_arithmetic_v<Arithmetic3>
182 return std::lerp(a, b,
t);
186 template<
typename T,
typename TInterpolant>
188 {
lerp(a, b,
t) } -> std::convertible_to<T>;
192 template<
typename T,
size_t N,
typename TInterpolant>
200 template<std::equality_comparable T,
size_t N>
203 return map(x, y, std::equal_to<T>{});
209 { x < y } -> std::convertible_to<bool>;
213 template<LessThanComparable T,
size_t N>
216 return map(x, y, std::less<T>{});
220 template<LessThanComparable T,
size_t N>
223 return map(x, [&
v](
const T&
el) {
return std::less<T>{}(
el,
v); });
229 { x <= y } -> std::convertible_to<bool>;
233 template<LessThanOrEqualToComparable T,
size_t N>
236 return map(x, y, std::less_equal<T>{});
248 template<
typename T,
size_t N>
256 template<
typename T,
size_t N>
264 template<std::
floating_po
int T>
271 template<std::
floating_po
int T,
size_t N>
279 template<std::
floating_po
int T>
296 template<std::
floating_po
int T>
311 template<std::
floating_po
int T,
size_t N>
318 template<std::
floating_po
int T>
321 return std::isnan(
num);
325 template<std::
floating_po
int T,
size_t N>
332 template<std::
floating_po
int T>
335 return std::log(
num);
339 template<std::
floating_po
int T>
347 requires std::is_integral_v<T>
or std::is_floating_point_v<T>
or std::is_pointer_v<T>
350 return std::midpoint(a, b);
356 {
midpoint(x, y) } -> std::convertible_to<T>;
360 template<
typename T,
size_t N>
368 std::ranges::range
R,
369 typename T =
typename std::ranges::range_value_t<R>::value_type,
370 size_t N = std::tuple_size_v<typename std::ranges::range_value_t<R>>
372 requires std::is_arithmetic_v<T>
375 return std::reduce(std::ranges::begin(r), std::ranges::end(r)) /
static_cast<T>(std::ranges::size(r));
379 template<
typename T,
size_t N>
380 requires std::is_arithmetic_v<T>
Definition common_functions.h:38
Definition common_functions.h:132
Definition common_functions.h:58
Definition common_functions.h:187
Definition common_functions.h:118
Definition common_functions.h:355
Definition common_functions.h:105
Definition common_functions.h:92
Definition common_functions.h:159
Definition common_functions.h:208
Definition common_functions.h:228
Definition custom_decoration_generator.h:5
bool equal_within_epsilon(T x, T y)
Definition common_functions.h:265
constexpr auto min(Angle< Rep1, Units1 > x, Angle< Rep2, Units2 > y) -> std::common_type_t< decltype(x), decltype(y)>
Definition angle.h:267
constexpr Angle< Rep, Units > clamp(const Angle< Rep, Units > &v, const AngleMin &min, const AngleMax &max)
Definition angle.h:303
constexpr auto map(const Rgba< T > &x, UnaryOperation op) -> Rgba< decltype(std::invoke(op, x[0]))>
Definition rgba.h:208
constexpr Vector3 centroid_of(const AABB &aabb)
Definition aabb_functions.h:20
bool equal_within_reldiff(T x, T y, T reldiff)
Definition common_functions.h:297
constexpr auto max(Angle< Rep1, Units1 > x, Angle< Rep2, Units2 > y) -> std::common_type_t< decltype(x), decltype(y)>
Definition angle.h:283
constexpr Vector< T, N > elementwise_clamp(const Vector< T, N > &v, const Vector< T, N > &lo, const Vector< T, N > &hi)
Definition common_functions.h:138
constexpr auto lerp(const Rgba< T > &x, const Rgba< T > &y, TInterpolant t)
Definition rgba.h:230
and LessThanComparable< T > bool equal_within_absdiff(T x, T y, T absdiff)
Definition common_functions.h:242
constexpr Rgba< T > saturate(const Rgba< T > &x)
Definition rgba.h:237
T abs(T num)
Definition common_functions.h:24
auto mod(Angle< Rep1, Units1 > x, Angle< Rep2, Units2 > y) -> std::common_type_t< decltype(x), decltype(y)>
Definition angle.h:251
T pow(T base, T exp)
Definition common_functions.h:340
or std::is_floating_point_v< T > or std::is_pointer_v< T > constexpr T midpoint(T a, T b)
Definition common_functions.h:348
bool equal_within_scaled_epsilon(T x, T y)
Definition common_functions.h:280
constexpr U to(T &&value)
Definition conversion.h:56
constexpr Vector< bool, N > elementwise_less(const Vector< T, N > &x, const Vector< T, N > &y)
Definition common_functions.h:214
bool isnan(T num)
Definition common_functions.h:319
constexpr Vector< bool, N > elementwise_equal(const Vector< T, N > &x, const Vector< T, N > &y)
Definition common_functions.h:201
constexpr Vector< T, N > elementwise_max(const Vector< T, N > &x, const Vector< T, N > &y)
Definition common_functions.h:125
constexpr Vector< T, N > elementwise_min(const Vector< T, N > &x, const Vector< T, N > &y)
Definition common_functions.h:111
and
Definition algorithms.h:158
T copysign(T mag, T sgn)
Definition common_functions.h:71
T floor(T num)
Definition common_functions.h:51
T log(T num)
Definition common_functions.h:333
constexpr Vector< bool, N > elementwise_less_equal(const Vector< T, N > &x, const Vector< T, N > &y)
Definition common_functions.h:234