feat(ring buffer): implement RingBuffer::iter_mut()

This commit is contained in:
Benjamin Bouvier
2024-10-28 16:09:41 +01:00
parent 9c858c1208
commit 5d828d234e

View File

@@ -14,7 +14,7 @@
use std::{
collections::{
vec_deque::{Drain, Iter},
vec_deque::{Drain, Iter, IterMut},
VecDeque,
},
num::NonZeroUsize,
@@ -88,6 +88,13 @@ impl<T> RingBuffer<T> {
self.inner.iter()
}
/// Returns a mutable iterator that provides elements in front-to-back
/// order, i.e. the same order you would get if you repeatedly called
/// pop().
pub fn iter_mut(&mut self) -> IterMut<'_, T> {
self.inner.iter_mut()
}
/// Returns an iterator that drains its items.
pub fn drain<R>(&mut self, range: R) -> Drain<'_, T>
where
@@ -221,6 +228,24 @@ mod tests {
assert_eq!(ring_buffer.remove(10), None);
}
#[test]
fn test_iter() {
let mut ring_buffer = RingBuffer::new(NonZeroUsize::new(5).unwrap());
ring_buffer.push(1);
ring_buffer.push(2);
ring_buffer.push(3);
let as_vec = ring_buffer.iter().copied().collect::<Vec<_>>();
assert_eq!(as_vec, [1, 2, 3]);
let first_entry = ring_buffer.iter_mut().next().unwrap();
*first_entry = 42;
let as_vec = ring_buffer.iter().copied().collect::<Vec<_>>();
assert_eq!(as_vec, [42, 2, 3]);
}
#[test]
fn test_drain() {
let mut ring_buffer = RingBuffer::new(NonZeroUsize::new(5).unwrap());