Skip to main content

SparseSet

Struct SparseSet 

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

Source

pub fn len(&self) -> usize

Returns the number of elements in the sparse set.

Source

pub fn contains(&self, index: I) -> bool

Returns true if the sparse set contains a value for index.

Source

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.

Source

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.

Source

pub fn indices(&self) -> &[I]

Returns an iterator visiting all keys (indices) in arbitrary order.

Source

pub fn values(&self) -> impl Iterator<Item = &V>

Returns an iterator visiting all values in arbitrary order.

Source

pub fn values_mut(&mut self) -> impl Iterator<Item = &mut V>

Returns an iterator visiting all values mutably in arbitrary order.

Source

pub fn iter(&self) -> impl Iterator<Item = (&I, &V)>

Returns an iterator visiting all key-value pairs in arbitrary order, with references to the values.

Source

pub fn iter_mut(&mut self) -> impl Iterator<Item = (&I, &mut V)>

Returns an iterator visiting all key-value pairs in arbitrary order, with mutable references to the values.

Source§

impl<I, V> SparseSet<I, V>

Source

pub const fn new() -> Self

Creates a new SparseSet.

Source§

impl<I: SparseSetIndex, V> SparseSet<I, V>

Source

pub fn with_capacity(capacity: usize) -> Self

Creates a new SparseSet with a specified initial capacity.

§Panics
  • Panics if the new capacity of the allocation overflows isize::MAX bytes.
  • Panics if the new allocation causes an out-of-memory error.
Source

pub fn capacity(&self) -> usize

Returns the total number of elements the SparseSet can hold without needing to reallocate.

Source

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::MAX bytes.
  • Panics if the insertion forces an reallocation and causes an out-of-memory error.
Source

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::MAX bytes.
  • Panics if the insertion forces an reallocation and causes an out-of-memory error.
Source

pub fn is_empty(&self) -> bool

Returns true if the sparse set contains no elements.

Source

pub fn remove(&mut self, index: I) -> Option<V>

Removes and returns the value for index.

Returns None if index does not have a value in the sparse set.

Source

pub fn clear(&mut self)

Clears all of the elements from the sparse set.

§Panics
  • Panics if any of the keys or values implements Drop and any of those panic.

Trait Implementations§

Source§

impl<I: Debug, V: Debug + 'static> Debug for SparseSet<I, V>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<I: SparseSetIndex, V> Default for SparseSet<I, V>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<I, V> Freeze for SparseSet<I, V>

§

impl<I, V> RefUnwindSafe for SparseSet<I, V>

§

impl<I, V> Send for SparseSet<I, V>
where I: Send, V: Send,

§

impl<I, V> Sync for SparseSet<I, V>
where I: Sync, V: Sync,

§

impl<I, V> Unpin for SparseSet<I, V>
where I: Unpin, V: Unpin,

§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ConditionalSend for T
where T: Send,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts 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>

Converts 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)

Converts &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)

Converts &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
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromWorld for T
where T: Default,

Source§

fn from_world(_world: &mut World) -> T

Creates Self using default().

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoResult<T> for T

Source§

fn into_result(self) -> Result<T, RunSystemError>

Converts this type into the system output type.
Source§

impl<A> Is for A
where A: Any,

Source§

fn is<T>() -> bool
where T: Any,

Checks if the current type “is” another type, using a TypeId equality comparison. This is most useful in the context of generic logic. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more