About this project

StormByte-Buffer is a C++26 library that supplies buffering and streaming primitives for the StormByte C++ suite. It depends on StormByte-String 1.0.0 or newer (which vendors StormByte Base 2.0.0 and StormByte-System 2.0.0) and optionally StormByte-Logger 2.0.0 for pipeline pipes. Public headers live under StormByte/buffer/. Other suite modules such as Base, Config, Crypto, Database, Logger, Multimedia, Network, String and System are separate repositories and are not implemented here. The module covers several building blocks. FIFO is a grow-on-demand byte buffer that is not thread-safe; Read and Peek keep data while Extract consumes it. SharedFIFO is a thread-safe FIFO whose Read and Extract block until data arrives or Close/SetError is called. Ring is a concurrent many-to-many ring. Producer and Consumer are write-only and read-only handles over a shared Ring. Hopper is an SPSC typed queue with optional bounded capacity, and Sink maps integer keys to Hopper buckets. Pipeline transforms stream buffers through user-defined Pipe leaves, with Sync, Async and Parallel execution modes. Bridge performs manual byte transfer between ReadOnly/WriteOnly tips or IO leaves, and Pumper owns a Bridge and runs a worker until end of file or cancellation. IO provides BufferedReader and BufferedWriter bases plus BufferedFileReader and BufferedFileWriter file leaves with nested Parameters such as ReadAhead and MaxMemory. Telemetry is exposed as shared ReadTelemetry and WriteTelemetry handles on IO offices and Bridges. MeanRate measures requested user operations, including cache hits, and is not a disk benchmark. Lifecycle methods include Close, SetError, EoF, IsReadable and IsWritable. On Windows, an IO leaf keeps the origin handle until destroyed, so a path stays locked until the Bridge or Pumper releases it. Installation requires a C++26 compiler and CMake 3.28 or newer. A recursive clone followed by cmake configure and build produces the library; BUILD_SHARED_LIBS controls shared versus static output. The project is dual-licensed under LGPL v3 or later, or a commercial license from the copyright holder. Documentation includes this README and a Doxygen class reference, and contributions follow Conventional Commits with Doxygen on public headers.