pub struct SparseSet<I, V: 'static> { /* private fields */ }Expand description
A map from I to V that combines dense and sparse storage.
This is implemented as a sparse array mapping keys to dense indexes, plus dense arrays of indexes and keys.
The key type, I, must implement SparseSetIndex
to allow conversion to and from array indexes.
This supports fast O(1) lookups, since they consist of one array index to map the key to a dense index, followed by a second array index to find the value.
This may use a lot of excess memory if the set is sparsely populated, since it stores an empty entry for each key.
Compared to a simple Vec<Option<V>>,
the dense storage of values takes less memory when V is large,
although the overhead of tracking which entries have values
may make it larger when V is small or the set is densely populated.
Implementations§
Source§impl<I: SparseSetIndex, V> SparseSet<I, V>
impl<I: SparseSetIndex, V> SparseSet<I, V>
Sourcepub fn contains(&self, index: I) -> bool
pub fn contains(&self, index: I) -> bool
Returns true if the sparse set contains a value for index.
Sourcepub fn get(&self, index: I) -> Option<&V>
pub fn get(&self, index: I) -> Option<&V>
Returns a reference to the value for index.
Returns None if index does not have a value in the sparse set.
Sourcepub fn get_mut(&mut self, index: I) -> Option<&mut V>
pub fn get_mut(&mut self, index: I) -> Option<&mut V>
Returns a mutable reference to the value for index.
Returns None if index does not have a value in the sparse set.
Sourcepub fn indices(&self) -> &[I]
pub fn indices(&self) -> &[I]
Returns an iterator visiting all keys (indices) in arbitrary order.
Sourcepub fn values(&self) -> impl Iterator<Item = &V>
pub fn values(&self) -> impl Iterator<Item = &V>
Returns an iterator visiting all values in arbitrary order.
Sourcepub fn values_mut(&mut self) -> impl Iterator<Item = &mut V>
pub fn values_mut(&mut self) -> impl Iterator<Item = &mut V>
Returns an iterator visiting all values mutably in arbitrary order.
Source§impl<I: SparseSetIndex, V> SparseSet<I, V>
impl<I: SparseSetIndex, V> SparseSet<I, V>
Sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Returns the total number of elements the SparseSet can hold without needing to reallocate.
Sourcepub fn insert(&mut self, index: I, value: V)
pub fn insert(&mut self, index: I, value: V)
Inserts value at index.
If a value was already present at index, it will be overwritten.
§Panics
- Panics if the insertion forces an reallocation and the new capacity overflows
isize::MAXbytes. - Panics if the insertion forces an reallocation and causes an out-of-memory error.
Sourcepub fn get_or_insert_with(
&mut self,
index: I,
func: impl FnOnce() -> V,
) -> &mut V
pub fn get_or_insert_with( &mut self, index: I, func: impl FnOnce() -> V, ) -> &mut V
Returns a reference to the value for index, inserting one computed from func
if not already present.
§Panics
- Panics if the insertion forces an reallocation and the new capacity overflows
isize::MAXbytes. - Panics if the insertion forces an reallocation and causes an out-of-memory error.
Trait Implementations§
Auto Trait Implementations§
impl<I, V> Freeze for SparseSet<I, V>
impl<I, V> RefUnwindSafe for SparseSet<I, V>where
I: RefUnwindSafe,
V: RefUnwindSafe,
impl<I, V> Send for SparseSet<I, V>
impl<I, V> Sync for SparseSet<I, V>
impl<I, V> Unpin for SparseSet<I, V>
impl<I, V> UnsafeUnpin for SparseSet<I, V>
impl<I, V> UnwindSafe for SparseSet<I, V>where
I: UnwindSafe,
V: UnwindSafe,
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
impl<T> ConditionalSend for Twhere
T: Send,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self using default().