54 if (size_ >= events_.size()) { ++dropped_events_;
return false; }
55 events_[size_++] = e;
return true;
57 void clear() { size_ = 0; dropped_events_ = 0; }
58 std::size_t
size()
const {
return size_; }
60 std::span<const ModulationEvent>
events()
const {
return {events_.data(), size_}; }
62 for (std::size_t i = 1; i < size_; ++i) {
63 auto current = events_[i];
auto j = i;
64 while (j > 0 && events_[j - 1].sample_offset > current.sample_offset) {
65 events_[j] = events_[j - 1]; --j;
71 std::array<ModulationEvent, kCapacity> events_{};
72 std::size_t size_ = 0;
73 std::uint32_t dropped_events_ = 0;
89 if (size_ >= events_.size()) {
101 bool empty()
const {
return size_ == 0; }
102 std::size_t
size()
const {
return size_; }
107 return overflow_count_.load(std::memory_order_relaxed);
110 overflow_count_.store(0, std::memory_order_relaxed);
124 return a.sample_offset < b.sample_offset;
132 void sort(std::span<ParameterEvent> scratch, std::span<std::uint32_t> offset_counts) {
133 const auto first = events_.begin();
134 const auto last = events_.begin() +
static_cast<std::ptrdiff_t
>(size_);
136 return a.sample_offset < b.sample_offset;
140 first, last, [](
const ParameterEvent& e) {
return e.sample_offset; }, scratch,
145 using iterator = std::array<ParameterEvent, kCapacity>::iterator;
149 iterator end() {
return events_.begin() +
static_cast<std::ptrdiff_t
>(size_); }
153 std::span<const ParameterEvent>
events()
const {
154 return {events_.data(), size_};
159 if (dropped_events_ < std::numeric_limits<std::uint32_t>::max()) {
162 overflow_count_.fetch_add(1, std::memory_order_relaxed);
165 std::array<ParameterEvent, kCapacity> events_{};
166 std::size_t size_ = 0;
167 std::uint32_t dropped_events_ = 0;
168 std::atomic<std::uint64_t> overflow_count_{0};
Definition parameter_event_queue.hpp:50
std::size_t size() const
Definition parameter_event_queue.hpp:58
void sort()
Definition parameter_event_queue.hpp:61
static constexpr std::size_t kCapacity
Definition parameter_event_queue.hpp:52
void clear()
Definition parameter_event_queue.hpp:57
bool push(const ModulationEvent &e)
Definition parameter_event_queue.hpp:53
std::span< const ModulationEvent > events() const
Definition parameter_event_queue.hpp:60
bool overflowed() const
Definition parameter_event_queue.hpp:59
ParameterEventQueueTelemetry telemetry() const
Definition parameter_event_queue.hpp:113
void sort()
Definition parameter_event_queue.hpp:121
iterator end()
Definition parameter_event_queue.hpp:149
const_iterator begin() const
Definition parameter_event_queue.hpp:150
static constexpr std::size_t kCapacity
Definition parameter_event_queue.hpp:84
std::uint64_t overflow_count() const
Definition parameter_event_queue.hpp:106
constexpr std::size_t capacity() const
Definition parameter_event_queue.hpp:103
void reset_overflow_count()
Definition parameter_event_queue.hpp:109
bool empty() const
Definition parameter_event_queue.hpp:101
std::array< ParameterEvent, kCapacity >::iterator iterator
Definition parameter_event_queue.hpp:145
std::uint32_t dropped_event_count() const
Definition parameter_event_queue.hpp:105
void clear()
Definition parameter_event_queue.hpp:97
bool overflowed() const
Definition parameter_event_queue.hpp:104
std::span< const ParameterEvent > events() const
Definition parameter_event_queue.hpp:153
iterator begin()
Definition parameter_event_queue.hpp:148
ParameterEventQueue()=default
std::size_t size() const
Definition parameter_event_queue.hpp:102
bool push(const ParameterEvent &e)
Definition parameter_event_queue.hpp:88
const_iterator end() const
Definition parameter_event_queue.hpp:151
std::array< ParameterEvent, kCapacity >::const_iterator const_iterator
Definition parameter_event_queue.hpp:146
void sort(std::span< ParameterEvent > scratch, std::span< std::uint32_t > offset_counts)
sort() for a caller that can lend scratch storage, typically sized once at prepare time: a stable cou...
Definition parameter_event_queue.hpp:132
SequencerStateChannel is the audio-safe transport for a plugin's structured NON-parameter state: the ...
Definition audio_device_manager.hpp:48
bool stable_counting_sort(It first, It last, Key key, std::span< Value > scratch, std::span< Count > counts)
Stable counting sort of [first, last) on a small non-negative integer key, O(n + counts....
Definition stable_sort.hpp:103
void stable_sort_in_place(It first, It last, Less less)
Sorts [first, last) by less, keeping equal elements in their original order, without allocating.
Definition stable_sort.hpp:85
uint32_t ParamID
Unique parameter identifier, stable across plugin versions.
Definition parameter.hpp:55
Timestamped host modulation event.
Definition parameter_event_queue.hpp:44
ParamID param_id
Definition parameter_event_queue.hpp:45
float amount
Definition parameter_event_queue.hpp:47
int32_t sample_offset
Definition parameter_event_queue.hpp:46
Definition parameter_event_queue.hpp:76
std::size_t size
Definition parameter_event_queue.hpp:77
std::uint64_t overflow_count
Definition parameter_event_queue.hpp:79
std::size_t capacity
Definition parameter_event_queue.hpp:78
Definition parameter_event_queue.hpp:34
float value
Definition parameter_event_queue.hpp:37
int32_t ramp_duration_sample_frames
Definition parameter_event_queue.hpp:38
ParamID param_id
Definition parameter_event_queue.hpp:35
int32_t sample_offset
Definition parameter_event_queue.hpp:36