the ring of stamped Universal MIDI Packets: an entry is the stamp in two words, low first, and the words of one packet; a read cuts on whole entries, so a reader never sees a torn one The ring's size is a multiple of the word, so a word never wraps.
More...
|
| void | clear(uint64_t position, uint64_t bytes) |
| | zero a just-consumed region, wrapping around - only safe for a single reader's own rx, never a shared/multi-reader position
|
| size_t | decode(volatile uint64_t& position, uint8_t* dst, uint8_t port) |
| | the next packet of the port's group that carries MIDI 1.0: its bytes into dst, which holds 8, their count returned - 0: none
|
| uint64_t | empty() const |
| uint64_t | empty(uint64_t position) const |
| size_t | encode(midi::parser& parser, const uint8_t* src, size_t size, uint8_t port) |
| | MIDI 1.0 bytes into packets on the port's group, due at once, as the parser completes them: the bytes taken returned - a byte while the ring holds the two packets it completes at most.
|
| template<typename ext_t> |
| bool | force_read(const conversion& conversion, volatile uint64_t& position, ext_t* const* dst, uint64_t bulk, uint32_t channels_circular= 1, uint32_t channels_dst= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| | multi channel interleaved bulk read from circular buffer with format conversion if applicable
|
| template<non_pointer ext_t, typename circular_t= ext_t> |
| bool | force_read(ext_t* const* dst, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t channels_dst= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<non_pointer ext_t, typename circular_t= ext_t> |
| bool | force_read(ext_t* dst, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<typename ext_t, typename circular_t= ext_t> |
| bool | force_read(volatile uint64_t& position, ext_t* const* dst, uint64_t bulk, uint32_t channels_circular= 1, uint32_t channels_dst= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<non_pointer ext_t, typename circular_t= ext_t> |
| bool | force_read(volatile uint64_t& position, ext_t* dst, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<typename ext_t> |
| bool | force_write(const conversion& conversion, volatile uint64_t& position, const ext_t* const* src, uint64_t bulk, uint32_t channels_circular= 1, uint32_t channels_src= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| | multi channel interleaved bulk write into circular buffer with format conversion if applicable
|
| template<typename ext_t, typename circular_t= ext_t> |
| bool | force_write(const ext_t* const* src, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t channels_src= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<non_pointer ext_t, typename circular_t= ext_t> |
| bool | force_write(const ext_t* src, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<typename data_t> |
| bool | force_write(data_t* const* const* src, uint64_t clients, uint64_t channels, uint64_t bulk) |
| template<typename circular_t, typename src_t> |
| bool | force_write(src_t* const* const* src, uint32_t clients, uint32_t channels= 1, uint64_t bulk= 1) |
| | multi channel multi client bulk mix into circular buffer with format conversion if applicable src[client][channel][sample]
|
| template<typename ext_t, typename circular_t= ext_t> |
| bool | force_write(volatile uint64_t& position, const ext_t* const* src, uint64_t bulk, uint32_t channels_circular= 1, uint32_t channels_src= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<non_pointer ext_t, typename circular_t= ext_t> |
| bool | force_write(volatile uint64_t& position, const ext_t* src, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| | single channel convenience access templates
|
| void | initialize() |
| void | initialize(uint64_t backingstore_size) |
| uint64_t | loop() const |
| template<typename ext_t> |
| bool | mix_write(const conversion& conversion, volatile uint64_t& position, const ext_t* const* src, uint64_t bulk, uint32_t channels_circular= 1, uint32_t channels_src= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| | multi channel interleaved bulk mix into circular buffer at position with format conversion if applicable
|
| template<typename ext_t, typename circular_t= ext_t> |
| bool | mix_write(volatile uint64_t& position, const ext_t* const* src, uint64_t bulk, uint32_t channels_circular= 1, uint32_t channels_src= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<typename callback_t> |
| bool | move(callback_t& callback, uint64_t packet) |
| template<non_pointer data_t> |
| bool | operator <<(const data_t& src) |
| template<non_pointer data_t> |
| bool | operator >>(data_t& dst) |
| template<typename ext_t> |
| void | put(conversion::loop op, const conversion& conversion, uint64_t position, const ext_t* const* src, uint64_t bulk, uint32_t channels_circular, uint32_t channels_src, uint32_t circular_offset, uint32_t interleaved) |
| | multi channel interleaved bulk placement into circular space at position with wrap-around; channel operation (copy/add) the conversion's
|
| template<non_pointer ext_t, typename circular_t= ext_t> |
| bool | read(ext_t* const* dst, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t channels_dst= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<non_pointer ext_t, typename circular_t= ext_t> |
| bool | read(ext_t* dst, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<non_pointer ext_t, typename circular_t= ext_t> |
| bool | read(volatile uint64_t& position, ext_t* const* dst, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t channels_dst= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<non_pointer ext_t, typename circular_t= ext_t> |
| bool | read(volatile uint64_t& position, ext_t* dst, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| uint64_t | read(packet* dst, uint64_t bulk) |
| uint64_t | read(volatile uint64_t& position, packet* dst, uint64_t bulk) |
| | reads whole packets: as many as fit bulk and stand complete in the ring; the packets read returned
|
| void | reset(int64_t timestamp) |
| | a session start: the indices at the ring's size, the content silence, the time the transport's
|
| template<typename dst_t= uint8_t> |
| dst_t* | simulate_read(uint64_t bulk= 1) |
| template<typename dst_t= uint8_t> |
| dst_t* | simulate_read(volatile uint64_t& position, uint64_t bulk) |
| uint8_t* | simulate_write(uint64_t bulk) |
| | simulate write by advancing write idx and take care of wrap write optimization
|
| void | stamp(uint64_t position, int64_t timestamp, uint64_t bytes= 0, int64_t period= 0) |
| | the transport moved its index to position at timestamp: the ring's time, and a crossed cycle boundary's - placed within the move's period by its share of the move's bytes, at timestamp without them
|
| uint64_t | used() const |
| uint64_t | used(uint64_t position) const |
| template<typename ext_t, typename circular_t= ext_t> |
| bool | write(const ext_t* const* src, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t channels_src= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<non_pointer ext_t, typename circular_t= ext_t> |
| bool | write(const ext_t* src, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| template<typename ext_t, typename circular_t= ext_t> |
| bool | write(volatile uint64_t& position, const ext_t* const* src, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t channels_src= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| | bulk write into circular buffer with format conversion if applicable
|
| template<non_pointer ext_t, typename circular_t= ext_t> |
| bool | write(volatile uint64_t& position, const ext_t* src, uint64_t bulk= 1, uint32_t channels_circular= 1, uint32_t circular_offset= 0, uint32_t interleaved= 1) |
| bool | write(const packet& packet) |
| bool | write(int64_t timestamp, const uint32_t* src, uint64_t words) |
| | writes a run of whole packets, every one at the same moment: all or nothing
|
the ring of stamped Universal MIDI Packets: an entry is the stamp in two words, low first, and the words of one packet; a read cuts on whole entries, so a reader never sees a torn one The ring's size is a multiple of the word, so a word never wraps.