Pre-allocated per-node MIDI buffers backing the routing path's event edges. More...
#include <graph_runtime_executor.hpp>
Public Member Functions | |
| bool | reset (std::uint32_t node_count, std::size_t event_capacity=kDefaultEventCapacity, std::size_t sysex_capacity=kDefaultSysexCapacity, std::size_t sysex_payload_capacity=kDefaultSysexPayloadCapacity) |
| bool | reset (std::span< const std::size_t > event_capacities, std::size_t sysex_capacity=kDefaultSysexCapacity, std::size_t sysex_payload_capacity=kDefaultSysexPayloadCapacity) |
| void | clear () noexcept |
| std::uint32_t | node_count () const noexcept |
| midi::MidiBuffer * | in (std::uint32_t node_index) noexcept |
| midi::MidiBuffer * | out (std::uint32_t node_index) noexcept |
| midi::MpeBuffer * | mpe_in (std::uint32_t node_index) noexcept |
| midi::MpeBuffer * | mpe_out (std::uint32_t node_index) noexcept |
| bool | in_incomplete (std::uint32_t node_index) const noexcept |
| void | set_in_incomplete (std::uint32_t node_index, bool v) noexcept |
| bool | out_incomplete (std::uint32_t node_index) const noexcept |
| void | set_out_incomplete (std::uint32_t node_index, bool v) noexcept |
| bool | fits (std::uint32_t node_count) const noexcept |
Static Public Attributes | |
| static constexpr std::size_t | kDefaultEventCapacity = 1024 |
| static constexpr std::size_t | kDefaultSysexCapacity = 128 |
| static constexpr std::size_t | kDefaultSysexPayloadCapacity = 4096 |
Pre-allocated per-node MIDI buffers backing the routing path's event edges.
One in/out MidiBuffer pair per plan node (indexed by dense node index), each with an attached UmpBuffer and reserved to a fixed realtime capacity so add()/sysex append never allocate on the audio thread. The executor clears a node's in and gathers its inbound event connections into it before the node runs; a MIDI-emitting binding writes the node's out. A node's out also serves as the source other nodes gather from, so it persists for the block. The caller (host) bridges MidiInput/MidiOutput system nodes to its own mailboxes around process_routed by writing/reading these buffers directly.
Slots are heap-stable (each pair is a unique_ptr) because a MidiBuffer holds a pointer to its attached UmpBuffer; a reallocating vector would dangle it.
|
noexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
| bool pulp::format::GraphRuntimeMidiScratch::reset | ( | std::span< const std::size_t > | event_capacities, |
| std::size_t | sysex_capacity = kDefaultSysexCapacity, | ||
| std::size_t | sysex_payload_capacity = kDefaultSysexPayloadCapacity ) |
| bool pulp::format::GraphRuntimeMidiScratch::reset | ( | std::uint32_t | node_count, |
| std::size_t | event_capacity = kDefaultEventCapacity, | ||
| std::size_t | sysex_capacity = kDefaultSysexCapacity, | ||
| std::size_t | sysex_payload_capacity = kDefaultSysexPayloadCapacity ) |
|
inlinenoexcept |
|
inlinenoexcept |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |