[][src]Struct smallvec::SmallVec

pub struct SmallVec<A: Array> { /* fields omitted */ }

A Vec-like container that can store a small number of elements inline.

SmallVec acts like a vector, but can store a limited amount of data inline within the Smallvec struct rather than in a separate allocation. If the data exceeds this limit, the SmallVec will "spill" its data onto the heap, allocating a new buffer to hold it.

The amount of data that a SmallVec can store inline depends on its backing store. The backing store can be any type that implements the Array trait; usually it is a small fixed-sized array. For example a SmallVec<[u64; 8]> can hold up to eight 64-bit integers inline.

Example

use smallvec::SmallVec;
let mut v = SmallVec::<[u8; 4]>::new(); // initialize an empty vector

// The vector can hold up to 4 items without spilling onto the heap.
v.extend(0..4);
assert_eq!(v.len(), 4);
assert!(!v.spilled());

// Pushing another element will force the buffer to spill:
v.push(4);
assert_eq!(v.len(), 5);
assert!(v.spilled());

Methods

impl<A: Array> SmallVec<A>
[src]

Important traits for SmallVec<A>

Construct an empty vector

Construct an empty vector with enough capacity pre-allocated to store at least n elements.

Will create a heap allocation only if n is larger than the inline capacity.


let v: SmallVec<[u8; 3]> = SmallVec::with_capacity(100);

assert!(v.is_empty());
assert!(v.capacity() >= 100);

Important traits for SmallVec<A>

Construct a new SmallVec from a Vec<A::Item>.

Elements will be copied to the inline buffer if vec.capacity() <= A::size().

use smallvec::SmallVec;

let vec = vec![1, 2, 3, 4, 5];
let small_vec: SmallVec<[_; 3]> = SmallVec::from_vec(vec);

assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]);

Important traits for SmallVec<A>

Constructs a new SmallVec on the stack from an A without copying elements.

use smallvec::SmallVec;

let buf = [1, 2, 3, 4, 5];
let small_vec: SmallVec<_> = SmallVec::from_buf(buf);

assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]);

Important traits for SmallVec<A>

Constructs a new SmallVec on the stack from an A without copying elements. Also sets the length, which must be less or equal to the size of buf.

use smallvec::SmallVec;

let buf = [1, 2, 3, 4, 5, 0, 0, 0];
let small_vec: SmallVec<_> = SmallVec::from_buf_and_len(buf, 5);

assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]);

Important traits for SmallVec<A>

Constructs a new SmallVec on the stack from an A without copying elements. Also sets the length. The user is responsible for ensuring that len <= A::size().

use smallvec::SmallVec;

let buf = [1, 2, 3, 4, 5, 0, 0, 0];
let small_vec: SmallVec<_> = unsafe {
    SmallVec::from_buf_and_len_unchecked(buf, 5)
};

assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]);

Sets the length of a vector.

This will explicitly set the size of the vector, without actually modifying its buffers, so it is up to the caller to ensure that the vector is actually the specified size.

The maximum number of elements this vector can hold inline

The number of elements stored in the vector

Returns true if the vector is empty

The number of items the vector can hold without reallocating

Returns true if the data has spilled into a separate heap-allocated buffer.

Important traits for Drain<'a, T>

Empty the vector and return an iterator over its former contents.

Append an item to the vector.

Remove an item from the end of the vector and return it, or None if empty.

Re-allocate to set the capacity to max(new_cap, inline_size()).

Panics if new_cap is less than the vector's length.

Reserve capacity for additional more elements to be inserted.

May reserve more space to avoid frequent reallocations.

If the new capacity would overflow usize then it will be set to usize::max_value() instead. (This means that inserting additional new elements is not guaranteed to be possible after calling this function.)

Reserve the minumum capacity for additional more elements to be inserted.

Panics if the new capacity overflows usize.

Shrink the capacity of the vector as much as possible.

When possible, this will move data from an external heap buffer to the vector's inline storage.

Shorten the vector, keeping the first len elements and dropping the rest.

If len is greater than or equal to the vector's current length, this has no effect.

This does not re-allocate. If you want the vector's capacity to shrink, call shrink_to_fit after truncating.

Extracts a slice containing the entire vector.

Equivalent to &s[..].

Extracts a mutable slice of the entire vector.

Equivalent to &mut s[..].

Remove the element at position index, replacing it with the last element.

This does not preserve ordering, but is O(1).

Panics if index is out of bounds.

Remove all elements from the vector.

Remove and return the element at position index, shifting all elements after it to the left.

Panics if index is out of bounds.

Insert an element at position index, shifting all elements after it to the right.

Panics if index is out of bounds.

Insert multiple elements at position index, shifting all following elements toward the back.

Convert a SmallVec to a Vec, without reallocating if the SmallVec has already spilled onto the heap.

Convert the SmallVec into an A if possible. Otherwise return Err(Self).

This method returns Err(Self) if the SmallVec is too short (and the A contains uninitialized elements), or if the SmallVec is too long (and all the elements were spilled to the heap).

Retains only the elements specified by the predicate.

In other words, remove all elements e such that f(&e) returns false. This method operates in place and preserves the order of the retained elements.

Removes consecutive duplicate elements.

Removes consecutive duplicate elements using the given equality relation.

Removes consecutive elements that map to the same key.

impl<A: Array> SmallVec<A> where
    A::Item: Copy
[src]

Copy the elements from a slice into a new SmallVec.

For slices of Copy types, this is more efficient than SmallVec::from(slice).

Copy elements from a slice into the vector at position index, shifting any following elements toward the back.

For slices of Copy types, this is more efficient than insert.

Copy elements from a slice and append them to the vector.

For slices of Copy types, this is more efficient than extend.

impl<A: Array> SmallVec<A> where
    A::Item: Clone
[src]

Resizes the vector so that its length is equal to len.

If len is less than the current length, the vector simply truncated.

If len is greater than the current length, value is appended to the vector until its length equals len.

Creates a SmallVec with n copies of elem.

use smallvec::SmallVec;

let v = SmallVec::<[char; 128]>::from_elem('d', 2);
assert_eq!(v, SmallVec::from_buf(['d', 'd']));

Trait Implementations

impl<A: Array> VecLike<<A as Array>::Item> for SmallVec<A>
[src]

Deprecated

: Use Extend and Deref<[T]> instead

Append an element to the vector.

impl<A: Array> ExtendFromSlice<<A as Array>::Item> for SmallVec<A> where
    A::Item: Copy
[src]

Extends a collection from a slice of its element type

impl<A: Array> AsMut<[<A as Array>::Item]> for SmallVec<A>
[src]

Performs the conversion.

impl<A: Array> PartialOrd<SmallVec<A>> for SmallVec<A> where
    A::Item: PartialOrd
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<A: Array> Default for SmallVec<A>
[src]

Important traits for SmallVec<A>

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

impl<A: Array> Ord for SmallVec<A> where
    A::Item: Ord
[src]

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

impl<A: Array, B: Array> PartialEq<SmallVec<B>> for SmallVec<A> where
    A::Item: PartialEq<B::Item>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, A: Array> From<&'a [<A as Array>::Item]> for SmallVec<A> where
    A::Item: Clone
[src]

Important traits for SmallVec<A>

Performs the conversion.

impl<A: Array> From<Vec<<A as Array>::Item>> for SmallVec<A>
[src]

Important traits for SmallVec<A>

Performs the conversion.

impl<A: Array> From<A> for SmallVec<A>
[src]

Important traits for SmallVec<A>

Performs the conversion.

impl<A: Array> AsRef<[<A as Array>::Item]> for SmallVec<A>
[src]

Performs the conversion.

impl<A: Array> Send for SmallVec<A> where
    A::Item: Send
[src]

impl<A: Array> Clone for SmallVec<A> where
    A::Item: Clone
[src]

Important traits for SmallVec<A>

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl<A: Array> IntoIterator for SmallVec<A>
[src]

Which kind of iterator are we turning this into?

The type of the elements being iterated over.

Creates an iterator from a value. Read more

impl<'a, A: Array> IntoIterator for &'a SmallVec<A>
[src]

Which kind of iterator are we turning this into?

The type of the elements being iterated over.

Creates an iterator from a value. Read more

impl<'a, A: Array> IntoIterator for &'a mut SmallVec<A>
[src]

Which kind of iterator are we turning this into?

The type of the elements being iterated over.

Creates an iterator from a value. Read more

impl<A: Array> Extend<<A as Array>::Item> for SmallVec<A>
[src]

Extends a collection with the contents of an iterator. Read more

impl<A: Array> Eq for SmallVec<A> where
    A::Item: Eq
[src]

impl<A: Array> Drop for SmallVec<A>
[src]

Executes the destructor for this type. Read more

impl<A: Array> Deref for SmallVec<A>
[src]

The resulting type after dereferencing.

Dereferences the value.

impl<A: Array> Hash for SmallVec<A> where
    A::Item: Hash
[src]

Feeds this value into the given [Hasher]. Read more

Feeds a slice of this type into the given [Hasher]. Read more

impl<A: Array> DerefMut for SmallVec<A>
[src]

Mutably dereferences the value.

impl<A: Array> Index<usize> for SmallVec<A>
[src]

The returned type after indexing.

Performs the indexing (container[index]) operation.

impl<A: Array> Index<Range<usize>> for SmallVec<A>
[src]

The returned type after indexing.

Performs the indexing (container[index]) operation.

impl<A: Array> Index<RangeFrom<usize>> for SmallVec<A>
[src]

The returned type after indexing.

Performs the indexing (container[index]) operation.

impl<A: Array> Index<RangeTo<usize>> for SmallVec<A>
[src]

The returned type after indexing.

Performs the indexing (container[index]) operation.

impl<A: Array> Index<RangeFull> for SmallVec<A>
[src]

The returned type after indexing.

Performs the indexing (container[index]) operation.

impl<A: Array> IndexMut<usize> for SmallVec<A>
[src]

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

impl<A: Array> IndexMut<Range<usize>> for SmallVec<A>
[src]

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

impl<A: Array> IndexMut<RangeFrom<usize>> for SmallVec<A>
[src]

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

impl<A: Array> IndexMut<RangeTo<usize>> for SmallVec<A>
[src]

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

impl<A: Array> IndexMut<RangeFull> for SmallVec<A>
[src]

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

impl<A: Array> FromIterator<<A as Array>::Item> for SmallVec<A>
[src]

Important traits for SmallVec<A>

Creates a value from an iterator. Read more

impl<A: Array> Debug for SmallVec<A> where
    A::Item: Debug
[src]

Formats the value using the given formatter. Read more

impl<A: Array> Borrow<[<A as Array>::Item]> for SmallVec<A>
[src]

Immutably borrows from an owned value. Read more

impl<A: Array<Item = u8>> Write for SmallVec<A>
[src]

Write a buffer into this object, returning how many bytes were written. Read more

Attempts to write an entire buffer into this write. Read more

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more

Writes a formatted string into this writer, returning any error encountered. Read more

Creates a "by reference" adaptor for this instance of Write. Read more

impl<A: Array> BorrowMut<[<A as Array>::Item]> for SmallVec<A>
[src]

Mutably borrows from an owned value. Read more

Auto Trait Implementations

impl<A> Sync for SmallVec<A> where
    A: Sync

Blanket Implementations

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

Performs the conversion.

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

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

impl<T> From for T
[src]

Performs the conversion.

impl<I> IntoIterator for I where
    I: Iterator
[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, U> TryFrom for T where
    T: From<U>, 
[src]

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

🔬 This is a nightly-only experimental API. (try_from)

Performs the conversion.

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

Immutably borrows from an owned value. Read more

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

Mutably borrows from an owned value. Read more

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

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

🔬 This is a nightly-only experimental API. (try_from)

Performs the conversion.

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

🔬 This is a nightly-only experimental API. (get_type_id)

this method will likely be replaced by an associated static

Gets the TypeId of self. Read more