5 releases (2 stable)
|1.0.1||Dec 27, 2021|
|1.0.0||Aug 31, 2021|
|0.1.1||Aug 31, 2021|
|0.1.0||Sep 27, 2020|
|0.0.1||Aug 17, 2020|
#209 in Concurrency
2,425 downloads per month
Used in songbird
A Rust thread-safe, shared (asynchronous) stream buffer designed to lock only on accessing and storing new data.
Streamcatcher is designed to allow seeking on otherwise one-way streams (e.g., command output) whose output needs to be accessed by many threads without constant reallocations, contention over safe read-only data, or unnecessary stalling. Only threads who read in new data ever need to lock the data structure, and do not prevent earlier reads from occurring.
- Lockless access to pre-read data and finished streams.
- Transparent caching of newly read data.
- Allows seeking on read-only bytestreams.
- Piecewise allocation to reduce copying and support unknown input lengths.
- Optional acceleration of reads on stream completion by copying to a single backing store.
- (Stateful) bytestream transformations.
- Async support with the
"async"feature, and runtimes via [
The main algorithm is outlined in this blog post, with rope reference tracking moved to occur only in the core.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Detailed guidelines are given in the CONTRIBUTING file.