[][src]Struct stash::UniqueStash

pub struct UniqueStash<V> { /* fields omitted */ }

An O(1) amortized table that does not reuse keys.

Guarantee: No two calls to put on the same UniqueStash will ever return the same Key.

An example use case is a file descriptor table.

An example use case is a session table where expired session IDs should never be re-used.

Methods

impl<V> UniqueStash<V>[src]

pub fn new() -> Self[src]

Constructs a new, empty UniqueStash<T>.

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

Examples

use stash::UniqueStash;

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

pub fn with_capacity(capacity: usize) -> Self[src]

Constructs a new, empty UniqueStash<T> with the specified capacity.

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::UniqueStash;

let mut stash: UniqueStash<i32> = UniqueStash::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);

pub fn capacity(&self) -> usize[src]

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

Examples

use stash::UniqueStash;

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

pub fn len(&self) -> usize[src]

The number of items in the stash.

Examples

use stash::UniqueStash;

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

pub fn reserve(&mut self, additional: usize)[src]

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

Panics

Panics if the new capacity overflows usize.

Examples

use stash::UniqueStash;

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

pub fn reserve_exact(&mut self, additional: usize)[src]

Reserves the minimum capacity for exactly additional more elements to be put into the given UniqueStash<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::UniqueStash;

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

pub fn put(&mut self, value: V) -> Tag[src]

Put a value into the stash.

Returns the index at which this value was stored.

Important traits for Extend<'a, I>
pub fn extend<I>(&mut self, iter: I) -> Extend<I> where
    I: Iterator<Item = V>, 
[src]

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.

Important traits for Iter<'a, V>
pub fn iter(&self) -> Iter<V>[src]

Iterate over the items in this UniqueStash<V>.

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

Important traits for IterMut<'a, V>
pub fn iter_mut(&mut self) -> IterMut<V>[src]

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

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

Important traits for Values<'a, V>
pub fn values(&self) -> Values<V>[src]

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

Important traits for ValuesMut<'a, V>
pub fn values_mut(&mut self) -> ValuesMut<V>[src]

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

Important traits for IntoValues<V>
pub fn into_values(self) -> IntoValues<V>[src]

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

pub fn is_empty(&self) -> bool[src]

Check if this UniqueStash<V> is empty.

Returns true if this UniqueStash<V> is empty.

pub fn take(&mut self, index: Tag) -> Option<V>[src]

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

pub fn get(&self, index: Tag) -> Option<&V>[src]

Get a reference to the value at index.

pub fn get_mut(&mut self, index: Tag) -> Option<&mut V>[src]

Get a mutable reference to the value at index.

pub fn clear(&mut self)[src]

Clear the UniqueStash.

Note: This will not cause Tags to be reused.

Trait Implementations

impl<V> IntoIterator for UniqueStash<V>[src]

type Item = (Tag, V)

The type of the elements being iterated over.

type IntoIter = IntoIter<V>

Which kind of iterator are we turning this into?

impl<'a, V> IntoIterator for &'a UniqueStash<V>[src]

type Item = (Tag, &'a V)

The type of the elements being iterated over.

type IntoIter = Iter<'a, V>

Which kind of iterator are we turning this into?

impl<'a, V> IntoIterator for &'a mut UniqueStash<V>[src]

type Item = (Tag, &'a mut V)

The type of the elements being iterated over.

type IntoIter = IterMut<'a, V>

Which kind of iterator are we turning this into?

impl<V> Default for UniqueStash<V>[src]

impl<V: Clone> Clone for UniqueStash<V>[src]

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl<'a, V> Index<Tag> for UniqueStash<V>[src]

type Output = V

The returned type after indexing.

impl<'a, V> IndexMut<Tag> for UniqueStash<V>[src]

impl<V> Debug for UniqueStash<V> where
    V: Debug
[src]

Auto Trait Implementations

impl<V> Send for UniqueStash<V> where
    V: Send

impl<V> Unpin for UniqueStash<V> where
    V: Unpin

impl<V> Sync for UniqueStash<V> where
    V: Sync

impl<V> UnwindSafe for UniqueStash<V> where
    V: UnwindSafe

impl<V> RefUnwindSafe for UniqueStash<V> where
    V: RefUnwindSafe

Blanket Implementations

impl<I> IntoIterator for I where
    I: Iterator
[src]

type Item = <I as Iterator>::Item

The type of the elements being iterated over.

type IntoIter = I

Which kind of iterator are we turning this into?

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]