44 if (lhs.position != rhs.position)
45 return lhs.position < rhs.position;
46 return lhs.id < rhs.id;
62 float end_value,
float curvature)
noexcept;
88class AutomationCurve {
100 std::span<const AutomationPoint>
points() const noexcept {
130 explicit AutomationCurve(std::shared_ptr<
const std::vector<AutomationPoint>>
points)
133 std::shared_ptr<const std::vector<AutomationPoint>> points_;
Result<T, E> — either holds a T or an E, never both.
Definition result.hpp:76
runtime::Result< AutomationCurve, AutomationCurveError > erase_point(ItemId id) const
Returns a new curve without id, or MissingPoint when absent.
std::span< const AutomationPoint > points() const noexcept
Returns points in canonical position-then-identity order.
Definition automation_curve.hpp:100
runtime::Result< AutomationCurve, AutomationCurveError > replace_point(AutomationPoint point) const
Returns a new curve replacing the point with the same identity.
runtime::Result< AutomationCurve, AutomationCurveError > insert_point(AutomationPoint point) const
Returns a new curve containing point; this snapshot remains unchanged.
std::optional< float > value_at(timebase::TickPosition position) const noexcept
Random-access evaluation for control-thread and compile-time use.
const AutomationPoint * find_point(ItemId id) const noexcept
Finds a point by identity, or returns nullptr when absent.
static runtime::Result< AutomationCurve, AutomationCurveError > create(std::vector< AutomationPoint > points)
Validates, canonically orders, and immutably stores points.
float evaluate_continuous_automation_segment(timebase::TickPosition position, timebase::TickPosition start, timebase::TickPosition end, float start_value, float end_value, float curvature) noexcept
Evaluates one continuous segment and clamps outside it.
AutomationInterpolation
Interpolation applied from an automation point to its successor.
Definition automation_curve.hpp:20
AutomationCurveErrorCode
Validation failures returned by AutomationCurve factories and edits.
Definition automation_curve.hpp:65
@ Continuous
Definition automation_curve.hpp:22
@ Hold
Definition automation_curve.hpp:21
@ NonFiniteValue
Definition automation_curve.hpp:70
@ MissingPoint
Definition automation_curve.hpp:72
@ InvalidCurvature
Definition automation_curve.hpp:71
@ DuplicatePointId
Definition automation_curve.hpp:67
@ InvalidInterpolation
Definition automation_curve.hpp:69
@ InvalidPointId
Definition automation_curve.hpp:66
@ DuplicatePosition
Definition automation_curve.hpp:68
Definition program_compiler.hpp:18
Result<T, E> — success / failure union for fallible operations.
Automation curve failure with the offending and, when relevant, conflicting identities.
Definition automation_curve.hpp:76
AutomationCurveErrorCode code
Definition automation_curve.hpp:77
ItemId point
Definition automation_curve.hpp:78
ItemId related_point
Definition automation_curve.hpp:79
Canonical ordering for authored automation points and curve storage.
Definition automation_curve.hpp:40
constexpr bool operator()(const AutomationPoint &lhs, const AutomationPoint &rhs) const noexcept
Orders by position and then stable point identity.
Definition automation_curve.hpp:42
One identity-bearing automation value at a canonical musical tick.
Definition automation_curve.hpp:29
constexpr bool operator==(const AutomationPoint &) const =default
timebase::TickPosition position
Definition automation_curve.hpp:31
float curvature
Definition automation_curve.hpp:34
ItemId id
Definition automation_curve.hpp:30
float value
Definition automation_curve.hpp:32
AutomationInterpolation interpolation
Definition automation_curve.hpp:33
Nonzero monotonic identity for a Timeline-owned object.
Definition item_id.hpp:19