52 std::function<void(
const std::vector<std::uint8_t>& payload,
bool complete)>;
58 void reserve(std::size_t worst_case_bytes) {
59 buffer_.reserve(worst_case_bytes);
93 buffer_.push_back(0xF0);
102 buffer_.push_back(0xF7);
109 if (is_status(
byte)) {
113 emit(buffer_,
false);
120 buffer_.push_back(
byte);
126 void feed(
const std::uint8_t* data, std::size_t count,
128 for (std::size_t i = 0; i < count; ++i) {
129 auto cls =
feed(data[i], emit);
152 static bool is_status(std::uint8_t b)
noexcept {
return (b & 0x80) != 0; }
153 static bool is_realtime(std::uint8_t b)
noexcept {
167 return b >= 0xF8 && b <= 0xFF;
170 bool in_sysex_ =
false;
171 std::vector<std::uint8_t> buffer_;
Definition sysex_accumulator.hpp:54
void feed(const std::uint8_t *data, std::size_t count, const SysexEmitFn &emit)
Feed a run of bytes — convenience over a delivery boundary.
Definition sysex_accumulator.hpp:126
std::size_t partial_size() const noexcept
Size of the in-progress payload (0 when idle).
Definition sysex_accumulator.hpp:149
void reserve(std::size_t worst_case_bytes)
Prepare internal payload storage for realtime use.
Definition sysex_accumulator.hpp:58
bool in_progress() const noexcept
True when buffer_ holds an open F0 without a matching F7.
Definition sysex_accumulator.hpp:138
Classification
Feed a single byte through the state machine.
Definition sysex_accumulator.hpp:77
@ passthrough
Definition sysex_accumulator.hpp:81
@ completed
Definition sysex_accumulator.hpp:79
@ in_sysex
Definition sysex_accumulator.hpp:78
@ aborted
Definition sysex_accumulator.hpp:80
void reset() noexcept
Clear any accumulated partial state.
Definition sysex_accumulator.hpp:142
Classification feed(std::uint8_t byte, const SysexEmitFn &emit)
Definition sysex_accumulator.hpp:84
Definition custom_node_events.hpp:26
std::function< void(const std::vector< std::uint8_t > &payload, bool complete)> SysexEmitFn
Callback shape: receives the complete sysex payload (including the leading 0xF0 and trailing 0xF7) pl...
Definition sysex_accumulator.hpp:51