Struct stash::Stash [] [src]

pub struct Stash<V, Ix = usize> { /* fields omitted */ }

An O(1) amortized table that reuses keys.

Guarantees and non-guarantees:

  1. Stash is deterministic and keys do not depend on the inserted values. This means you can update two stashes in tandem and get the same keys back. This could be useful for, e.g., primary/secondary replication.
  2. Keys will always be less than the maximum number of items that have ever been present in the Stash at any single point in time. In other words, if you never store more than n items in a Stash, the stash will only assign keys less than n. You can take advantage of this guarantee to truncate the key from a usize to some smaller type.
  3. Except the guarantees noted above, you can assume nothing about key assignment or iteration order. They can change at any time.

An example use case is a file descriptor table.

Methods

impl<V> Stash<V, usize>
[src]

Constructs a new, empty Stash<V, usize>.

This is a convenience method. Use Stash::default for a constructor that is generic in the type of index used.

The stash will not allocate until elements are put onto it.

Examples

use stash::Stash;

let mut stash: Stash<i32> = Stash::new();

Constructs a new, empty Stash<V, usize> with the specified capacity.

This is a convenience method. Use Stash::default for a constructor that is generic in the type of index used. In that case you can call reserve on the newly created stash to specify the capacity you need.

The stash will be able to hold exactly capacity elements without reallocating. If capacity is 0, the stash will not allocate.

It is important to note that this function does not specify the length of the returned stash , but only the capacity. (For an explanation of the difference between length and capacity, see the main Vec<T> docs in the std::vec module, 'Capacity and reallocation'.)

Examples

use stash::Stash;

let mut stash = Stash::with_capacity(10);

// The stash contains no items, even though it has capacity for more
assert_eq!(stash.len(), 0);

// These are all done without reallocating...
for i in 0i32..10 {
    let _ = stash.put(i);
}

// ...but this may make the stash reallocate
stash.put(11);

impl<V, Ix> Stash<V, Ix> where Ix: Index
[src]

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

Examples

use stash::Stash;

let stash: Stash<i32> = Stash::with_capacity(10);
assert_eq!(stash.capacity(), 10);

The number of items in the stash.

Examples

use stash::Stash;

let mut stash = Stash::new();
assert_eq!(stash.len(), 0);
stash.put("a");
assert_eq!(stash.len(), 1);

Reserves capacity for at least additional more elements to be put into the given Stash<T>. The collection may reserve more space to avoid frequent reallocations.

Panics

Panics if the new capacity overflows usize.

Examples

use stash::Stash;

let mut stash: Stash<i32> = Stash::new();
let t1 = stash.put(1);
stash.reserve(10);
assert!(stash.capacity() >= 11);

Reserves the minimum capacity for exactly additional more elements to be put into the given Stash<T>. Does nothing if the capacity is already sufficient.

Note that the allocator may give the collection more space than it requests. Therefore capacity can not be relied upon to be precisely minimal. Prefer reserve if future puts are expected.

Panics

Panics if the new capacity overflows usize.

Examples

use stash::Stash;

let mut stash: Stash<i32> = Stash::new();
let t1 = stash.put(1);
stash.reserve_exact(10);
assert!(stash.capacity() >= 11);

Put a value into the stash.

Returns the index at which this value was stored.

Panics

Panics if the size of the Stash<V, Ix> would overflow the Ix index type.

Put all items in the iterator into the stash.

Returns an iterator over the indices where the items were inserted. The items are actually inserted as the Iterator is read. If the returned Iterator is dropped, the rest of the items will be inserted all at once.

Iterate over the items in this Stash<V>.

Returns an iterator that yields (index, &value) pairs.

Mutably iterate over the items in this Stash<V>.

Returns an iterator that yields (index, &mut value) pairs.

Iterate over the values in this Stash<V> by reference.

Mutably iterate over the values in this Stash<V> by reference.

Iterate over the values in this Stash<V> by value.

Check if this Stash<V> is empty.

Returns true if this Stash<V> is empty.

Take an item from a slot (if non empty).

Take an item from a slot (if non empty) without bounds or empty checking. So use it very carefully!

This can be safely used as long as the user does not mutate indices from put and is sure not to have taken the value associated with the given index.

Get a reference to the value at index.

Get a reference to the value at index without bounds or empty checking. So use it very carefully!

This can be safely used as long as the user does not mutate indices from put and is sure not to have taken the value associated with the given index.

Get a mutable reference to the value at index.

Get a mutable reference to the value at index without bounds or empty checking. So use it very carefully!

This can be safely used as long as the user does not mutate indices from put and is sure not to have taken the value associated with the given index.

Clear the stash. Cleared stash will give the same keys as a new stash for subsequent puts.

Trait Implementations

impl<V: Clone, Ix: Clone> Clone for Stash<V, Ix>
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl<V, Ix: Index> IntoIterator for Stash<V, Ix>
[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, V, Ix: Index> IntoIterator for &'a Stash<V, Ix>
[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, V, Ix: Index> IntoIterator for &'a mut Stash<V, Ix>
[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<V, Ix> Debug for Stash<V, Ix> where V: Debug, Ix: Debug + Index
[src]

Formats the value using the given formatter.

impl<'a, V, Ix: Index> Index<Ix> for Stash<V, Ix>
[src]

The returned type after indexing

The method for the indexing (container[index]) operation

impl<'a, V, Ix: Index> IndexMut<Ix> for Stash<V, Ix>
[src]

The method for the mutable indexing (container[index]) operation

impl<V, Ix: Index> Default for Stash<V, Ix>
[src]

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