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
FixedIndexVec
is 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
)