All notable changes to this project will be documented in this file.
- Expose
find_producer()functions - Added Doxygen documentation for the
find_producer()overloads.
- Renamed canonical header from slick/stream_buffer_multiplexer.h to slick/stream_buffer_multiplexer.hpp. The old .h path is kept as a backward-compatibility shim that re-exports the new header and emits a compiler warning directing users to update their includes.
- Initial release of
slick::stream_buffer_multiplexer, a lock-free MPMC byte stream multiplexer built by composingslick::stream_buffer(per-producer SPMC byte ring) withslick::queue<record>(shared MPMC fan-in queue). - Per-producer
producer_bufferwith the familiarprepare/commit/consume/discard/data/sizeinterface, plus a.stream_buffer()accessor returning a literalslick::stream_buffer&for drop-inslick::dynamic_bufferinterop, and a.stream_buffer_ptr()accessor returningstd::shared_ptr<slick::stream_buffer>for shared ownership withslick-net'swebsocket_session. get_producer_buffer(producer_id)returningstd::shared_ptr<producer_buffer>(ornullptrif unregistered), for shared ownership of a producer (includingconsume()) that can outlive thestream_buffer_multiplexer.add_producerregistration API (local memory, shared-memory creator, and shared-memory opener overloads) with explicitproducer_id, allowing any mix of local-memory and shared-memory producers under one shared queue. Returnsstd::shared_ptr<producer_buffer>, so the registered producer (includingconsume()) can outlive thestream_buffer_multiplexer.read(cursor)andread(std::atomic<uint64_t>& cursor)(work-stealing) returning a zero-copymultiplex_record{data, length, producer_id}.- Three independent loss counters: shared-queue wrap loss, multiplexer-level
loss (shared-queue entries whose
producer_idis registered on this instance but were lapped by that producer's own ring before being dereferenced), and each producer's own ring loss. The multiplexer-level counter is configurable viaSLICK_STREAM_BUFFER_MULTIPLEXER_ENABLE_LOSS_DETECTION(default: enabled in debug builds, disabled in release), matchingslick::stream_bufferandslick::queue. - Shared memory (IPC) support with
producer_id<-> shm-name mapping by caller convention; unregistered producer ids on a consumer instance are silently skipped rather than treated as an error or counted as loss.
- Replaced the confusing
producer_slot_count()API withproducer_count(), which now returns the actual number of registered producers. - Optimized producer lookup with a dense fast path for low
producer_idvalues while still supporting sparse registrations through a fallback map. - Clarified in the README that contiguous
producer_idvalues, ideally starting at0, provide the best lookup performance.