pub struct FixedIndexVec<T> { /* private fields */ }Expand description
A fixed-size indexed vector that maps indices to values.
It provides a fixed-size vector-like data structure that can store values based on its associated index. Each value is associated with a unique index in the map. The values can be accessed, inserted, and removed using the index as the identifier.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec = FixedIndexVec::new();
vec.insert("value1".to_string());
vec.insert("value2".to_string());
assert_eq!(vec.get(0), Some(&"value1".to_string()));
assert_eq!(vec.get(1), Some(&"value2".to_string()));
vec.remove(1);
assert_eq!(vec.get(1), None);§Notes
- The
FixedIndexVecis backed by aBTreeMap, so it is not as fast as aVec. - Index notations are supported (eg.
vec[0]), however, accessing an index that does not exist will panic.
Implementations§
Source§impl<T> FixedIndexVec<T>
impl<T> FixedIndexVec<T>
Sourcepub fn new() -> FixedIndexVec<T>
pub fn new() -> FixedIndexVec<T>
Creates an empty FixedIndexVec.
The internal storage will not allocate until elements are pushed onto it.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec: FixedIndexVec<i32> = FixedIndexVec::new();Sourcepub fn remove(&mut self, index: usize) -> Option<T>
pub fn remove(&mut self, index: usize) -> Option<T>
Removes the element at the given index, if it exists, returning it or None if it does not exist.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec = FixedIndexVec::new();
vec.push(1);
vec.push(2);
assert_eq!(vec.remove(0), Some(1));
assert_eq!(vec.remove(0), None);§Notes
Unlike Vec::remove, this does not shift elements after the removed element.
If index >= length, this returns None, the same as if the element did not exist.
Sourcepub fn get(&self, index: usize) -> Option<&T>
pub fn get(&self, index: usize) -> Option<&T>
Returns a reference to the element at the given index,
if it exists, or None if it does not exist.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec = FixedIndexVec::new();
vec.push(1);
vec.push(2);
assert_eq!(vec.get(0), Some(&1));
assert_eq!(vec.get(2), None);Sourcepub fn iter(&self) -> impl Iterator<Item = (usize, &T)>
pub fn iter(&self) -> impl Iterator<Item = (usize, &T)>
An iterator visiting all elements in ascending order of their indices. The index is returned along with the value. The iterator skips indices that do not have a corresponding value.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec: FixedIndexVec<i32> = vec![1, 2, 3].into();
vec.remove(1);
let mut iter = vec.iter();
assert_eq!(iter.next(), Some((0, &1)));
assert_eq!(iter.next(), Some((2, &3)));
assert_eq!(iter.next(), None);Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of elements in the FixedIndexVec.
This is not the same as the value of the largest index, unless no elements have been removed.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec: FixedIndexVec<i32> = vec![1, 2, 3].into();
vec.remove(1);
assert_eq!(vec.len(), 2);Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the FixedIndexVec contains no elements.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec: FixedIndexVec<i32> = vec![1, 2, 3].into();
vec.remove(1);
assert_eq!(vec.is_empty(), false);use fixed_index_vec::FixedIndexVec;
let vec: FixedIndexVec<i32> = FixedIndexVec::new();
assert_eq!(vec.is_empty(), true);Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clears the FixedIndexVec, removing all values.
Keeps the allocated memory for reuse.
This is equivalent to calling remove on every index.
The next index will not be reset to 0.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec: FixedIndexVec<i32> = vec![1, 2, 3].into();
vec.clear();
assert_eq!(vec.len(), 0);
assert_eq!(vec.next_index(), 3);Sourcepub fn reset(&mut self)
pub fn reset(&mut self)
Clears the FixedIndexVec, removing all values and resetting the next index to 0.
Keeps the allocated memory for reuse.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec: FixedIndexVec<i32> = vec![1, 2, 3].into();
vec.reset();
assert_eq!(vec.len(), 0);
assert_eq!(vec.next_index(), 0);Sourcepub fn next_index(&self) -> usize
pub fn next_index(&self) -> usize
Returns the next index that will be used when inserting an element.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec: FixedIndexVec<i32> = vec![1, 2, 3].into();
vec.remove(1);
assert_eq!(vec.next_index(), 3);Sourcepub fn first(&self) -> Option<(usize, &T)>
pub fn first(&self) -> Option<(usize, &T)>
Returns the index and a reference to the element at the smallest populated index, or None
if the FixedIndexVec is empty.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec: FixedIndexVec<i32> = vec![1, 2, 3].into();
vec.remove(0);
assert_eq!(vec.first(), Some((1, &2)));use fixed_index_vec::FixedIndexVec;
let vec: FixedIndexVec<i32> = FixedIndexVec::new();
assert_eq!(vec.first(), None);Sourcepub fn last(&self) -> Option<(usize, &T)>
pub fn last(&self) -> Option<(usize, &T)>
Returns the index and a reference to the element at the largest populated index, or None
if the FixedIndexVec is empty.
§Examples
use fixed_index_vec::FixedIndexVec;
let mut vec: FixedIndexVec<i32> = vec![1, 2, 3].into();
vec.remove(2);
assert_eq!(vec.last(), Some((1, &2)));use fixed_index_vec::FixedIndexVec;
let vec: FixedIndexVec<i32> = FixedIndexVec::new();
assert_eq!(vec.last(), None);Trait Implementations§
Source§impl<T: Clone> Clone for FixedIndexVec<T>
impl<T: Clone> Clone for FixedIndexVec<T>
Source§fn clone(&self) -> FixedIndexVec<T>
fn clone(&self) -> FixedIndexVec<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<T: Debug> Debug for FixedIndexVec<T>
impl<T: Debug> Debug for FixedIndexVec<T>
Source§impl<T: Default> Default for FixedIndexVec<T>
impl<T: Default> Default for FixedIndexVec<T>
Source§fn default() -> FixedIndexVec<T>
fn default() -> FixedIndexVec<T>
Source§impl<T: Display> Display for FixedIndexVec<T>
impl<T: Display> Display for FixedIndexVec<T>
Source§impl<T> Extend<T> for FixedIndexVec<T>
impl<T> Extend<T> for FixedIndexVec<T>
Source§fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)