Crate circular_vec

Source
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ยง

CircularVec
See crate level documentation.