11constexpr std::int64_t
saturating_add(std::int64_t lhs, std::int64_t rhs)
noexcept {
12 if (rhs > 0 && lhs > std::numeric_limits<std::int64_t>::max() - rhs)
13 return std::numeric_limits<std::int64_t>::max();
14 if (rhs < 0 && lhs < std::numeric_limits<std::int64_t>::min() - rhs)
15 return std::numeric_limits<std::int64_t>::min();
20 if (rhs > 0 && lhs < std::numeric_limits<std::int64_t>::min() + rhs)
21 return std::numeric_limits<std::int64_t>::min();
22 if (rhs < 0 && lhs > std::numeric_limits<std::int64_t>::max() + rhs)
23 return std::numeric_limits<std::int64_t>::max();
28 constexpr std::int64_t max = std::numeric_limits<std::int64_t>::max();
29 constexpr std::int64_t min = std::numeric_limits<std::int64_t>::min();
30 if (lhs == 0 || rhs == 0)
40 return (rhs == min) ? max : -rhs;
42 return (lhs == min) ? max : -lhs;
43 if ((lhs < 0) != (rhs < 0)) {
44 if (lhs > 0 ? (rhs < min / lhs) : (lhs < min / rhs))
46 }
else if (lhs > 0 ? (lhs > max / rhs) : (lhs < max / rhs)) {
Definition beat_division.hpp:52
constexpr std::int64_t saturating_multiply(std::int64_t lhs, std::int64_t rhs) noexcept
Definition tick.hpp:27
constexpr std::int64_t saturating_add(std::int64_t lhs, std::int64_t rhs) noexcept
Definition tick.hpp:11
constexpr std::int64_t saturating_subtract(std::int64_t lhs, std::int64_t rhs) noexcept
Definition tick.hpp:19
Definition beat_division.hpp:11
constexpr std::int64_t kTicksPerQuarter
Definition tick.hpp:54
constexpr TickPosition operator+(TickPosition position, TickDuration duration) noexcept
Definition tick.hpp:79
constexpr TickPosition operator-(TickPosition position, TickDuration duration) noexcept
Definition tick.hpp:83
constexpr auto operator<=>(const MonotonicBeat &) const =default
TickPosition position
Definition tick.hpp:72
std::int64_t value
Definition tick.hpp:57
constexpr auto operator<=>(const TickDuration &) const =default
std::int64_t value
Definition tick.hpp:62
constexpr auto operator<=>(const TickPosition &) const =default