71 return (*view_)[index_];
75 *view_)[
static_cast<std::size_t
>(
static_cast<difference_type>(index_) + offset)];
96 index_ =
static_cast<std::size_t
>(
static_cast<difference_type>(index_) + offset);
100 return *
this += -offset;
103 return iterator += offset;
106 return iterator += offset;
109 return iterator -= offset;
120 : view_(
view), index_(index) {}
122 std::size_t index_ = 0;
128 return reader_(records_, index);
134 return (*
this)[count_ - 1u];
142 std::size_t
size() const noexcept {
149 return {
static_cast<const std::byte*
>(records_) + offset * record_stride_, count, reader_,
153 template <
typename Record>
156 return {records.data(), records.size(), reader,
sizeof(Record)};
161 std::size_t record_stride) noexcept
162 : records_(records), count_(count), reader_(reader), record_stride_(record_stride) {}
164 const void* records_ =
nullptr;
165 std::size_t count_ = 0;
167 std::size_t record_stride_ = 0;
189 return instance_token_;
201 return leading_value_;
204 return segments_.empty();
213 float leading_value_ = 0.0f;
228 std::span<AutomationBlockEvent> output,
229 std::uint32_t max_intersecting_segments =
230 std::numeric_limits<std::uint32_t>::max()) noexcept;
234 std::uint32_t max_intersecting_segments =
235 std::numeric_limits<
std::uint32_t>::max()) noexcept;
239 return active_key_.item_id;
242 return active_key_.generation;
248 bool has_block_index_ =
false;
249 std::uint64_t last_block_index_ = 0;
Allocation-free renderer for one immutable AutomationProgram.
Definition automation_cursor.hpp:221
static constexpr audio::RtSafetyClass process_rt_safety_class
Definition automation_cursor.hpp:223
AutomationCursorResult process(const AutomationProgram &program, const TransportSnapshot &transport, std::span< AutomationBlockEvent > output, std::uint32_t max_intersecting_segments=std::numeric_limits< std::uint32_t >::max()) noexcept
timeline::ItemId active_lane_id() const noexcept
Definition automation_cursor.hpp:238
ProgramGeneration active_generation() const noexcept
Definition automation_cursor.hpp:241
The identity, exact tempo-map object, and immutable segments consumed by AutomationCursor.
Definition automation_cursor.hpp:173
float leading_value() const noexcept
Definition automation_cursor.hpp:200
timeline::ItemId lane_id() const noexcept
Definition automation_cursor.hpp:191
AutomationProgramInstanceToken instance_token() const noexcept
Definition automation_cursor.hpp:188
const timebase::CompiledTempoMap & tempo_map() const noexcept
Definition automation_cursor.hpp:194
AutomationProgramView()=delete
static AutomationProgramView from(const AutomationProgram &program) noexcept
AutomationProgramView(ProgramGeneration generation, AutomationProgramInstanceToken instance_token, timeline::ItemId lane_id, const timebase::CompiledTempoMap &tempo_map, AutomationSegmentView segments, float leading_value) noexcept
Definition automation_cursor.hpp:176
ProgramGeneration generation() const noexcept
Definition automation_cursor.hpp:185
AutomationSegmentView segments() const noexcept
Definition automation_cursor.hpp:197
bool empty() const noexcept
Definition automation_cursor.hpp:203
Immutable tick- and sample-domain form of one automation lane.
Definition automation_program.hpp:55
Definition automation_cursor.hpp:62
Iterator & operator-=(difference_type offset) noexcept
Definition automation_cursor.hpp:99
Iterator operator++(int) noexcept
Definition automation_cursor.hpp:81
AutomationProgramSegment reference
Definition automation_cursor.hpp:68
friend Iterator operator+(Iterator iterator, difference_type offset) noexcept
Definition automation_cursor.hpp:102
friend Iterator operator+(difference_type offset, Iterator iterator) noexcept
Definition automation_cursor.hpp:105
Iterator & operator--() noexcept
Definition automation_cursor.hpp:86
Iterator operator--(int) noexcept
Definition automation_cursor.hpp:90
friend difference_type operator-(const Iterator &lhs, const Iterator &rhs) noexcept
Definition automation_cursor.hpp:111
reference operator[](difference_type offset) const noexcept
Definition automation_cursor.hpp:73
friend class AutomationSegmentView
Definition automation_cursor.hpp:118
std::ptrdiff_t difference_type
Definition automation_cursor.hpp:67
friend Iterator operator-(Iterator iterator, difference_type offset) noexcept
Definition automation_cursor.hpp:108
Iterator & operator+=(difference_type offset) noexcept
Definition automation_cursor.hpp:95
auto operator<=>(const Iterator &) const =default
AutomationProgramSegment value_type
Definition automation_cursor.hpp:66
reference operator*() const noexcept
Definition automation_cursor.hpp:70
std::random_access_iterator_tag iterator_category
Definition automation_cursor.hpp:64
Iterator & operator++() noexcept
Definition automation_cursor.hpp:77
std::random_access_iterator_tag iterator_concept
Definition automation_cursor.hpp:65
Random-access, immutable segment storage used by the production cursor.
Definition automation_cursor.hpp:58
bool empty() const noexcept
Definition automation_cursor.hpp:145
AutomationProgramSegment front() const noexcept
Definition automation_cursor.hpp:130
AutomationSegmentView subspan(std::size_t offset, std::size_t count) const noexcept
Definition automation_cursor.hpp:148
AutomationProgramSegment(*)(const void *, std::size_t) noexcept Reader
Definition automation_cursor.hpp:60
Iterator end() const noexcept
Definition automation_cursor.hpp:139
std::size_t size() const noexcept
Definition automation_cursor.hpp:142
constexpr AutomationSegmentView() noexcept=default
static AutomationSegmentView from_records(std::span< const Record > records, Reader reader) noexcept
Definition automation_cursor.hpp:154
Iterator begin() const noexcept
Definition automation_cursor.hpp:136
AutomationProgramSegment back() const noexcept
Definition automation_cursor.hpp:133
Definition compiled_tempo_map.hpp:91
RtSafetyClass
Definition rt_safety_contract.hpp:11
@ AudioCallbackSafeWithImmutableInputs
Definition rt_safety_contract.hpp:14
Definition audio_renderer.hpp:20
@ InvalidTransport
Definition audio_renderer.hpp:218
AutomationTransition
Definition automation_cursor.hpp:15
@ Immediate
Definition automation_cursor.hpp:17
@ LinearRamp
Definition automation_cursor.hpp:18
@ Seed
Definition automation_cursor.hpp:16
AutomationProgramAdoption
Definition automation_cursor.hpp:38
@ Unchanged
Definition automation_cursor.hpp:40
@ Adopted
Definition automation_cursor.hpp:39
@ Rejected
Definition automation_cursor.hpp:41
AutomationCursorCode
Definition automation_cursor.hpp:28
@ Coalesced
Definition automation_cursor.hpp:30
@ InsufficientCapacity
Definition automation_cursor.hpp:34
@ WorkCapacityExceeded
Definition automation_cursor.hpp:35
@ TempoMapMismatch
Definition automation_cursor.hpp:33
@ AdoptionRejected
Definition automation_cursor.hpp:31
@ Ok
Definition automation_cursor.hpp:29
std::uint64_t ProgramGeneration
Definition program_identity.hpp:10
Definition program_compiler.hpp:18
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
Definition automation_cursor.hpp:21
constexpr bool operator==(const AutomationBlockEvent &) const =default
float value
Definition automation_cursor.hpp:23
std::uint32_t sample_offset
Definition automation_cursor.hpp:22
AutomationTransition transition
Definition automation_cursor.hpp:24
Definition automation_cursor.hpp:44
AutomationProgramAdoption adoption
Definition automation_cursor.hpp:46
AutomationCursorCode code
Definition automation_cursor.hpp:45
std::uint32_t candidate_points
Distinct mandatory topology and continuous-refinement positions before applying the caller's output b...
Definition automation_cursor.hpp:50
std::uint32_t emitted_events
Definition automation_cursor.hpp:47
std::uint32_t intersecting_segments
Compiled segments intersecting the active transport ranges.
Definition automation_cursor.hpp:52
Definition automation_program.hpp:21
Definition automation_program.hpp:38
Definition program_identity.hpp:12
Definition transport.hpp:71
Nonzero monotonic identity for a Timeline-owned object.
Definition item_id.hpp:19