Crate bufferring
source ·Expand description
Bufferring: Ring buffers for Rust
WARNING: This crate is not ready for use. It contains a significant
amount of unsafe
code, but is currently completely untested.
Usage
use core::num::NonZeroUsize;
use bufferring::{
RingBuffer, MaskingBuffer,
storage::{Storage, HeapStorage},
};
// Create a masking-based ring buffer using heap-allocated storage.
let capacity = NonZeroUsize::new(8).unwrap();
let storage = HeapStorage::with_capacity(capacity);
let mut buffer = MaskingBuffer::new(storage).unwrap();
// Push some elements into the buffer.
for item in 0 .. 14 {
// Drop removed items immediately.
let _ = buffer.enqueue(item);
}
// See what elements are in the buffer.
println!("{:?}", buffer);
assert!(buffer.is_full());
assert!(buffer.iter().copied().eq(6 .. 14));
// Remove those elements from the buffer.
for item in 6 .. 14 {
assert_eq!(buffer.dequeue(), Some(item));
}
assert!(buffer.is_empty());
Re-exports
pub use storage::Storage;
pub use masking::MaskingBuffer;
Modules
- Ringbuffer iteration.
- A ring buffer for power-of-two capacities.
- Ringbuffer data storage.
Traits
- A ring buffer.