Expand description
This struct maintains a fixed length circular Vec.
You provide the items for the circular Vec at initialization
time and can then never change the amount of items held within.
It provides a next
function that, when it hits the end of the struct,
just loops back to the start.
The CircularVec allows for in place changes to the items held
within using the next_mut
function, though for most cases
just using next
is fine. To call either of these functions
you must have a mutable reference to the CircularVec so that
it can increment its internal counter.
Notably, CircularVec does not implement IntoIterator
because it
would produce an iterator that never ends, which is not the
intended use of IntoIterator
. Accordingly, the next
function
here does not return the item (T
), but a reference to it (&T
), and
returns &T
instead of Option<&T>
because there will always
be an item it can return.
Example usage:
let mut cv: CircularVec<String> = ["hello".to_string(), "world".to_string()]
.to_vec()
.into_iter()
.collect();
assert_eq!(cv.next(), "hello");
assert_eq!(cv.next(), "world");
assert_eq!(cv.next(), "hello");
assert_eq!(cv.next(), "world");
Structsยง
- Circular
Vec - See crate level documentation.