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 |
#724 in Asynchronous
3,264 downloads per month
Used in 2 crates
56KB
1K
SLoC
Streamcatcher
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.
Features
- 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 ["async-std-compat"
,"smol-compat"
,"tokio-compat"
].
The main algorithm is outlined in this blog post, with rope reference tracking moved to occur only in the core.
License
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.
Contribution
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.
Dependencies
~0.6–34MB
~465K SLoC