pub struct CircleBuffer<T>where
T: Clone,{ /* private fields */ }
Expand description
A circular buffer.
Implementations§
Source§impl<T> CircleBuffer<T>where
T: Clone,
impl<T> CircleBuffer<T>where
T: Clone,
Sourcepub fn with_capacity(capacity: usize) -> CircleBuffer<T>
pub fn with_capacity(capacity: usize) -> CircleBuffer<T>
Creates a new empty CircleBuffer<T>
with capacity.
§Examples
use circle_buffer::CircleBuffer;
let mut cbuf: CircleBuffer<i32> = CircleBuffer::with_capacity(3);
Sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Returns the capacity of the buffer.
§Examples
use circle_buffer::CircleBuffer;
let mut cbuf: CircleBuffer<i32> = CircleBuffer::with_capacity(3);
assert_eq!(3, cbuf.capacity());
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the current number of elements in the buffer.
§Examples
use circle_buffer::CircleBuffer;
let mut cbuf: CircleBuffer<i32> = CircleBuffer::with_capacity(10);
cbuf.push(1);
cbuf.push(1);
cbuf.push(1);
assert_eq!(cbuf.len(), 3);
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the buffer contains no elements.
§Examples
use circle_buffer::CircleBuffer;
let mut cbuf: CircleBuffer<i32> = CircleBuffer::with_capacity(3);
assert!(cbuf.is_empty());
cbuf.push(1);
assert!(!cbuf.is_empty())
Sourcepub fn push(&mut self, value: T)
pub fn push(&mut self, value: T)
Pushes a new element into the buffer. Once the capacity is reached, pushing new items will overwrite old ones.
§Examples
use circle_buffer::CircleBuffer;
let mut cbuf: CircleBuffer<i32> = CircleBuffer::with_capacity(3);
cbuf.push(1);
cbuf.push(2);
cbuf.push(3);
cbuf.push(4);
assert_eq!(cbuf.len(), 3);
assert_eq!(cbuf[0], 2);
assert_eq!(cbuf[1], 3);
assert_eq!(cbuf[2], 4);
let mut sum = 0;
for x in cbuf.as_slice() {
sum += x;
}
assert_eq!(sum, 9);
Sourcepub fn as_mut_slice(&mut self) -> &mut [T]
pub fn as_mut_slice(&mut self) -> &mut [T]
Extracts a mutable slice of the entire buffer.
Sourcepub fn iter(&self) -> Iter<'_, T>
pub fn iter(&self) -> Iter<'_, T>
Returns an iterator over the buffer’s contents. The iterator goes from the most recently pushed items to the oldest ones.
§Examples
use circle_buffer::CircleBuffer;
let mut buffer = CircleBuffer::with_capacity(3);
buffer.push(1);
buffer.push(2);
buffer.push(3);
let add1: Vec<i32> = buffer.iter().map(|x| x + 1).collect();
assert_eq!(add1, vec![2, 3, 4]);
buffer.push(4);
buffer.push(5);
let add2: Vec<i32> = buffer.iter().map(|x| x + 2).collect();
assert_eq!(add2, vec![5, 6, 7]);
Sourcepub fn iter_mut(&mut self) -> IterMut<'_, T>
pub fn iter_mut(&mut self) -> IterMut<'_, T>
Returns a mutable iterator over the buffer’s contents. The iterator goes from the most recently pushed items to the oldest ones.
§Examples
use circle_buffer::CircleBuffer;
let mut buffer = CircleBuffer::with_capacity(3);
buffer.push(1);
buffer.push(2);
buffer.push(3);
for x in buffer.iter_mut() {
*x += 1;
}
assert_eq!(buffer.as_slice(), &[2, 3, 4]);
buffer.push(4);
buffer.push(5);
for x in buffer.iter_mut() {
*x += 2;
}
assert_eq!(buffer.as_slice(), &[6, 6, 7]);
Source§impl<T> CircleBuffer<T>
impl<T> CircleBuffer<T>
Sourcepub fn zero_clear(&mut self)
pub fn zero_clear(&mut self)
Fill all elements with zeros.
§Examples
use circle_buffer::CircleBuffer;
let mut cbuf: CircleBuffer<i32> = CircleBuffer::with_capacity(3);
cbuf.push(1);
cbuf.zero_clear();
assert!(cbuf.len() == 3);
assert_eq!(cbuf.as_slice(), &[0, 0, 0]);
cbuf.push(2);
assert_eq!(cbuf.as_slice(), &[0, 0, 2]);
Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for CircleBuffer<T>
impl<T> RefUnwindSafe for CircleBuffer<T>where
T: RefUnwindSafe,
impl<T> Send for CircleBuffer<T>where
T: Send,
impl<T> Sync for CircleBuffer<T>where
T: Sync,
impl<T> Unpin for CircleBuffer<T>where
T: Unpin,
impl<T> UnwindSafe for CircleBuffer<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more