16#if __has_include(<version>)
20#ifdef __cpp_lib_saturation_arithmetic
36#include "pw_preprocessor/compiler.h"
49constexpr T
add_sat(T lhs, T rhs)
noexcept {
50 static_assert(std::is_integral_v<T>);
54 if constexpr (std::is_unsigned_v<T>) {
55 return std::numeric_limits<T>::max();
58 return std::numeric_limits<T>::min();
60 return std::numeric_limits<T>::max();
71constexpr T
mul_sat(T lhs, T rhs)
noexcept {
72 static_assert(std::is_integral_v<T>);
76 if constexpr (std::is_unsigned_v<T>) {
77 return std::numeric_limits<T>::max();
79 if ((lhs < 0) == (rhs < 0)) {
80 return std::numeric_limits<T>::max();
82 return std::numeric_limits<T>::min();
#define PW_ADD_OVERFLOW(a, b, out)
Definition: compiler.h:282
#define PW_MUL_OVERFLOW(a, b, out)
Definition: compiler.h:304
Provides basic helpers for reading and writing UTF-8 encoded strings.
Definition: alignment.h:27
constexpr T mul_sat(T lhs, T rhs) noexcept
Definition: saturating_arithmetic.h:71
constexpr T add_sat(T lhs, T rhs) noexcept
Definition: saturating_arithmetic.h:49