Crate ringbuffer
source ·Expand description
Ringbuffer
The ringbuffer crate provides safe fixed size circular buffers (ringbuffers) in rust.
Implementations for three kinds of ringbuffers, with a mostly similar API are provided:
type | description |
---|---|
AllocRingBuffer | Ringbuffer allocated on the heap at runtime. This ringbuffer is still fixed size and requires alloc. |
ConstGenericRingBuffer | Ringbuffer which uses const generics to allocate on the stack. |
All of these ringbuffers also implement the RingBuffer
trait for their shared API surface.
Usage
use ringbuffer::{AllocRingBuffer, RingBuffer, RingBufferExt, RingBufferWrite};
let mut buffer = AllocRingBuffer::with_capacity(2);
// First entry of the buffer is now 5.
buffer.push(5);
// The last item we pushed is 5
assert_eq!(buffer.get(-1), Some(&5));
// Second entry is now 42.
buffer.push(42);
assert_eq!(buffer.peek(), Some(&5));
assert!(buffer.is_full());
// Because capacity is reached the next push will be the first item of the buffer.
buffer.push(1);
assert_eq!(buffer.to_vec(), vec![42, 1]);
Features
name | default | description |
---|---|---|
alloc | ✓ | Disable this feature to remove the dependency on alloc. Useful for kernels. |
License
Licensed under the MIT License
Structs
The
AllocRingBuffer
is a RingBufferExt
which is based on a Vec. This means it allocates at runtime
on the heap, and therefore needs the alloc
crate. This struct and therefore the dependency on
alloc can be disabled by disabling the alloc
(default) feature.The
ConstGenericRingBuffer
struct is a RingBuffer
implementation which does not require alloc
but
uses const generics instead.Constants
The capacity of a
RingBuffer
created by new or default (1024
).Traits
RingBuffer
is a trait defining the standard interface for all RingBuffer
implementations (AllocRingBuffer
, ConstGenericRingBuffer
)Defines behaviour for ringbuffers which allow them to be used as a general purpose buffer.
With this trait, arbitrary access of elements in the buffer is possible.
Defines behaviour for ringbuffers which allow for reading from the start of them (as a queue).
For arbitrary buffer access however,
RingBufferExt
is necessary.Defines behaviour for ringbuffers which allow for writing to the end of them (as a queue).
For arbitrary buffer access however,
RingBufferExt
is necessary.