43using RangeLow = NamedType<float, struct RangeLowTag>;
44using RangeHigh = NamedType<float, struct RangeHighTag>;
55 explicit Range(nt::RangeLow low, nt::RangeHigh high)
56 : low(low.get() < high.get() ? low.get() : high.get())
57 , high(high.get() > low.get() ? high.get() : low.get())
61 Range(
const Range &other)
67 Range &operator=(
const Range &other)
77 nt::RangeLow get_low() const noexcept {
return low; }
79 nt::RangeHigh get_high() const noexcept {
return high; }
81 float length() const noexcept {
return high.get() - low.get(); }
83 bool contains(
float value)
const noexcept {
return value >= low.get() && value <= high.get(); }
85 float constrain(
float value)
const noexcept
89 if(value > high.get())
Type-safe wrapper utilities for the Deep Note synthesizer.