Struct slotmap::dense::DenseSlotMap[][src]

pub struct DenseSlotMap<T> { /* fields omitted */ }

Dense slot map, storage with stable unique keys.

See crate documentation for more details.

Methods

impl<T> DenseSlotMap<T>
[src]

Construct a new, empty DenseSlotMap.

The slot map will not allocate until values are inserted.

Examples

let mut sm: DenseSlotMap<i32> = DenseSlotMap::new();

Creates an empty DenseSlotMap with the given capacity.

The slot map will not reallocate until it holds at least capacity elements. If capacity is 0, the slot map will not allocate.

Examples

let mut sm: DenseSlotMap<i32> = DenseSlotMap::with_capacity(10);

Returns the number of elements in the slot map.

Examples

let mut sm = DenseSlotMap::with_capacity(10);
sm.insert("len() counts actual elements, not capacity");
let key = sm.insert("removed elements don't count either");
sm.remove(key);
assert_eq!(sm.len(), 1);

Returns if the slot map is empty.

Examples

let mut sm = DenseSlotMap::new();
let key = sm.insert("dummy");
assert_eq!(sm.is_empty(), false);
sm.remove(key);
assert_eq!(sm.is_empty(), true);

Returns the number of elements the DenseSlotMap can hold without reallocating.

Examples

let sm: DenseSlotMap<f64> = DenseSlotMap::with_capacity(10);
assert_eq!(sm.capacity(), 10);

Reserves capacity for at least additional more elements to be inserted in the DenseSlotMap. The collection may reserve more space to avoid frequent reallocations.

Panics

Panics if the new allocation size overflows usize.

Examples

let mut sm = DenseSlotMap::new();
sm.insert("foo");
sm.reserve(32);
assert!(sm.capacity() >= 33);

Returns true if the slot map contains key.

Examples

let mut sm = DenseSlotMap::new();
let key = sm.insert(42);
assert_eq!(sm.contains_key(key), true);
sm.remove(key);
assert_eq!(sm.contains_key(key), false);

Inserts a value into the slot map. Returns a unique Key that can be used to access this value.

Panics

Panics if the number of elements in the slot map overflows a u32.

Examples

let mut sm = DenseSlotMap::new();
let key = sm.insert(42);
assert_eq!(sm[key], 42);

Inserts a value given by f into the slot map. The Key where the value will be stored is passed into f. This is useful to store values that contain their own key.

Panics

Panics if the number of elements in the slot map overflows a u32.

Examples

let mut sm = DenseSlotMap::new();
let key = sm.insert_with_key(|k| (k, 20));
assert_eq!(sm[key], (key, 20));

Removes a key from the slot map, returning the value at the key if the key was not previously removed.

Examples

let mut sm = DenseSlotMap::new();
let key = sm.insert(42);
assert_eq!(sm.remove(key), Some(42));
assert_eq!(sm.remove(key), None);

Retains only the elements specified by the predicate.

In other words, remove all key-value pairs (k, v) such that f(k, &mut v) returns false. This method operates in place and invalidates any removed keys.

Examples

let mut sm = DenseSlotMap::new();

let k3 = sm.insert(2);
let k1 = sm.insert(0);
let k2 = sm.insert(1);

sm.retain(|key, val| key == k1 || *val == 1);

assert!(sm.contains_key(k1));
assert!(sm.contains_key(k2));
assert!(!sm.contains_key(k3));

assert_eq!(2, sm.len());

Clears the slotmap. Keeps the allocated memory for reuse.

Examples

let mut sm = DenseSlotMap::new();
for i in 0..10 {
    sm.insert(i);
}
assert_eq!(sm.len(), 10);
sm.clear();
assert_eq!(sm.len(), 0);

Important traits for Drain<'a, T>

Clears the slotmap, returning all key-value pairs as an iterator. Keeps the allocated memory for reuse.

Examples

let mut sm = DenseSlotMap::new();
let k = sm.insert(0);
let v: Vec<_> = sm.drain().collect();
assert_eq!(sm.len(), 0);
assert_eq!(v, vec![(k, 0)]);

Returns a reference to the value corresponding to the key.

Examples

let mut sm = DenseSlotMap::new();
let key = sm.insert("bar");
assert_eq!(sm.get(key), Some(&"bar"));
sm.remove(key);
assert_eq!(sm.get(key), None);

Returns a reference to the value corresponding to the key without version or bounds checking.

Safety

This should only be used if contains_key(key) is true. Otherwise it is potentially unsafe.

Examples

let mut sm = DenseSlotMap::new();
let key = sm.insert("bar");
assert_eq!(unsafe { sm.get_unchecked(key) }, &"bar");
sm.remove(key);
// sm.get_unchecked(key) is now dangerous!

Returns a mutable reference to the value corresponding to the key.

Examples

let mut sm = DenseSlotMap::new();
let key = sm.insert(3.5);
if let Some(x) = sm.get_mut(key) {
    *x += 3.0;
}
assert_eq!(sm[key], 6.5);

Returns a mutable reference to the value corresponding to the key without version or bounds checking.

Safety

This should only be used if contains_key(key) is true. Otherwise it is potentially unsafe.

Examples

let mut sm = DenseSlotMap::new();
let key = sm.insert("foo");
unsafe { *sm.get_unchecked_mut(key) = "bar" };
assert_eq!(sm[key], "bar");
sm.remove(key);
// sm.get_unchecked_mut(key) is now dangerous!

Important traits for Iter<'a, T>

An iterator visiting all key-value pairs in arbitrary order. The iterator element type is (Key, &'a T).

Examples

let mut sm = DenseSlotMap::new();
let k0 = sm.insert(0);
let k1 = sm.insert(1);
let k2 = sm.insert(2);

let mut it = sm.iter();
assert_eq!(it.next(), Some((k0, &0)));
assert_eq!(it.len(), 2);
assert_eq!(it.next(), Some((k1, &1)));
assert_eq!(it.next(), Some((k2, &2)));
assert_eq!(it.next(), None);

Important traits for IterMut<'a, T>

An iterator visiting all key-value pairs in arbitrary order, with mutable references to the values. The iterator element type is (Key, &'a mut T).

Examples

let mut sm = DenseSlotMap::new();
let k0 = sm.insert(10);
let k1 = sm.insert(20);
let k2 = sm.insert(30);

for (k, v) in sm.iter_mut() {
    if k != k1 {
        *v *= -1;
    }
}

assert_eq!(sm.values().collect::<Vec<_>>(), vec![&-10, &20, &-30]);

Important traits for Keys<'a, T>

An iterator visiting all keys in arbitrary order. The iterator element type is Key.

Examples

let mut sm = DenseSlotMap::new();
let k0 = sm.insert(10);
let k1 = sm.insert(20);
let k2 = sm.insert(30);
let v: Vec<_> = sm.keys().collect();
assert_eq!(v, vec![k0, k1, k2]);

Important traits for Values<'a, T>

An iterator visiting all values in arbitrary order. The iterator element type is &'a T.

Examples

let mut sm = DenseSlotMap::new();
sm.insert(10);
sm.insert(20);
sm.insert(30);
let v: Vec<_> = sm.values().collect();
assert_eq!(v, vec![&10, &20, &30]);

Important traits for ValuesMut<'a, T>

An iterator visiting all values mutably in arbitrary order. The iterator element type is &'a mut T.

Examples

let mut sm = DenseSlotMap::new();
sm.insert(10);
sm.insert(20);
sm.insert(30);
sm.values_mut().for_each(|n| { *n *= 3 });
let v: Vec<_> = sm.into_iter().map(|(_k, v)| v).collect();
assert_eq!(v, vec![30, 60, 90]);

Trait Implementations

impl<T: Debug> Debug for DenseSlotMap<T>
[src]

Formats the value using the given formatter. Read more

impl<T: Clone> Clone for DenseSlotMap<T>
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl<T> Default for DenseSlotMap<T>
[src]

Returns the "default value" for a type. Read more

impl<T> Index<Key> for DenseSlotMap<T>
[src]

The returned type after indexing.

Performs the indexing (container[index]) operation.

impl<T> IndexMut<Key> for DenseSlotMap<T>
[src]

Performs the mutable indexing (container[index]) operation.

impl<'a, T> IntoIterator for &'a DenseSlotMap<T>
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Creates an iterator from a value. Read more

impl<'a, T> IntoIterator for &'a mut DenseSlotMap<T>
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Creates an iterator from a value. Read more

impl<T> IntoIterator for DenseSlotMap<T>
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Creates an iterator from a value. Read more

Auto Trait Implementations

impl<T> Send for DenseSlotMap<T> where
    T: Send

impl<T> Sync for DenseSlotMap<T> where
    T: Sync