Struct imbl_sized_chunks::sparse_chunk::SparseChunk
source · pub struct SparseChunk<A, const N: usize>where
BitsImpl<N>: Bits,{ /* private fields */ }
Expand description
A fixed capacity sparse array.
An inline sparse array of up to N
items of type A
. You can think of it as an array
of Option<A>
, where the discriminant (whether the value is Some<A>
or
None
) is kept in a bitmap instead of adjacent to the value.
§Examples
// Construct a chunk with a 20 item capacity
let mut chunk = SparseChunk::<i32, 20>::new();
// Set the 18th index to the value 5.
chunk.insert(18, 5);
// Set the 5th index to the value 23.
chunk.insert(5, 23);
assert_eq!(chunk.len(), 2);
assert_eq!(chunk.get(5), Some(&23));
assert_eq!(chunk.get(6), None);
assert_eq!(chunk.get(18), Some(&5));
Implementations§
source§impl<A, const N: usize> SparseChunk<A, N>where
BitsImpl<N>: Bits,
impl<A, const N: usize> SparseChunk<A, N>where
BitsImpl<N>: Bits,
sourcepub fn pair(index1: usize, value1: A, index2: usize, value2: A) -> Self
pub fn pair(index1: usize, value1: A, index2: usize, value2: A) -> Self
Construct a new chunk with two items.
sourcepub fn insert(&mut self, index: usize, value: A) -> Option<A>
pub fn insert(&mut self, index: usize, value: A) -> Option<A>
Insert a new value at a given index.
Returns the previous value at that index, if any.
sourcepub fn remove(&mut self, index: usize) -> Option<A>
pub fn remove(&mut self, index: usize) -> Option<A>
Remove the value at a given index.
Returns the value, or None
if the index had no value.
sourcepub fn pop(&mut self) -> Option<A>
pub fn pop(&mut self) -> Option<A>
Remove the first value present in the array.
Returns the value that was removed, or None
if the array was empty.
sourcepub fn get_mut(&mut self, index: usize) -> Option<&mut A>
pub fn get_mut(&mut self, index: usize) -> Option<&mut A>
Get a mutable reference to the value at a given index.
sourcepub unsafe fn get_unchecked(&self, index: usize) -> &A
pub unsafe fn get_unchecked(&self, index: usize) -> &A
Get an unchecked reference to the value at a given index.
§Safety
Uninhabited indices contain uninitialised data, so make sure you validate the index before using this method.
sourcepub unsafe fn get_unchecked_mut(&mut self, index: usize) -> &mut A
pub unsafe fn get_unchecked_mut(&mut self, index: usize) -> &mut A
Get an unchecked mutable reference to the value at a given index.
§Safety
Uninhabited indices contain uninitialised data, so make sure you validate the index before using this method.
sourcepub fn indices(&self) -> BitmapIter<'_, N>
pub fn indices(&self) -> BitmapIter<'_, N>
Make an iterator over the indices which contain values.
sourcepub fn first_index(&self) -> Option<usize>
pub fn first_index(&self) -> Option<usize>
Find the first index which contains a value.
sourcepub fn iter(&self) -> Iter<'_, A, N> ⓘ
pub fn iter(&self) -> Iter<'_, A, N> ⓘ
Make an iterator of references to the values contained in the array.
sourcepub fn iter_mut(&mut self) -> IterMut<'_, A, N> ⓘ
pub fn iter_mut(&mut self) -> IterMut<'_, A, N> ⓘ
Make an iterator of mutable references to the values contained in the array.
sourcepub fn drain(self) -> Drain<A, N> ⓘ
pub fn drain(self) -> Drain<A, N> ⓘ
Turn the chunk into an iterator over the values contained within it.
sourcepub fn entries(&self) -> impl Iterator<Item = (usize, &A)>
pub fn entries(&self) -> impl Iterator<Item = (usize, &A)>
Make an iterator of pairs of indices and references to the values contained in the array.
sourcepub fn option_iter(&self) -> OptionIter<'_, A, N> ⓘ
pub fn option_iter(&self) -> OptionIter<'_, A, N> ⓘ
Make an iterator of Option
s of references to the values contained in the array.
Iterates over every index in the SparseChunk
, from zero to its full capacity,
returning an Option<&A>
for each index.
sourcepub fn option_iter_mut(&mut self) -> OptionIterMut<'_, A, N> ⓘ
pub fn option_iter_mut(&mut self) -> OptionIterMut<'_, A, N> ⓘ
Make an iterator of Option
s of mutable references to the values contained in the array.
Iterates over every index in the SparseChunk
, from zero to its full capacity,
returning an Option<&mut A>
for each index.
sourcepub fn option_drain(self) -> OptionDrain<A, N> ⓘ
pub fn option_drain(self) -> OptionDrain<A, N> ⓘ
Make a draining iterator of `Option’s of the values contained in the array.
Iterates over every index in the SparseChunk
, from zero to its full capacity,
returning an Option<A>
for each index.
Trait Implementations§
source§impl<A, const N: usize> Debug for SparseChunk<A, N>
impl<A, const N: usize> Debug for SparseChunk<A, N>
source§impl<A, const N: usize> FromIterator<Option<A>> for SparseChunk<A, N>where
BitsImpl<N>: Bits,
impl<A, const N: usize> FromIterator<Option<A>> for SparseChunk<A, N>where
BitsImpl<N>: Bits,
source§impl<A, const N: usize> IntoIterator for SparseChunk<A, N>where
BitsImpl<N>: Bits,
impl<A, const N: usize> IntoIterator for SparseChunk<A, N>where
BitsImpl<N>: Bits,
source§impl<A, const N: usize> PartialEq<BTreeMap<usize, A>> for SparseChunk<A, N>
impl<A, const N: usize> PartialEq<BTreeMap<usize, A>> for SparseChunk<A, N>
source§impl<A, const N: usize> PartialEq<HashMap<usize, A>> for SparseChunk<A, N>
impl<A, const N: usize> PartialEq<HashMap<usize, A>> for SparseChunk<A, N>
source§impl<A, const N: usize> PartialEq for SparseChunk<A, N>
impl<A, const N: usize> PartialEq for SparseChunk<A, N>
impl<A, const N: usize> Eq for SparseChunk<A, N>
Auto Trait Implementations§
impl<A, const N: usize> !Freeze for SparseChunk<A, N>
impl<A, const N: usize> !RefUnwindSafe for SparseChunk<A, N>
impl<A, const N: usize> !Send for SparseChunk<A, N>
impl<A, const N: usize> !Sync for SparseChunk<A, N>
impl<A, const N: usize> !Unpin for SparseChunk<A, N>
impl<A, const N: usize> !UnwindSafe for SparseChunk<A, N>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)