[][src]Struct stackvector::StackVec

pub struct StackVec<A: Array> {
    pub length: usize,
    pub data: ManuallyDrop<A>,
}

A Vec-like container that stores elements on the stack.

The amount of data that a StackVec 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 StackVec<[u64; 8]> can hold up to eight 64-bit integers inline.

Example

use stackvector::StackVec;
let mut v = StackVec::<[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);

// Pushing another element will force the buffer to spill and panic:
v.push(4);

Fields

length: usizedata: ManuallyDrop<A>

Methods

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

Important traits for StackVec<A>
pub fn new() -> StackVec<A>[src]

Construct an empty vector

Important traits for StackVec<A>
pub fn from_vec(vec: Vec<A::Item>) -> StackVec<A>[src]

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

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

use stackvector::StackVec;

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

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

Important traits for StackVec<A>
pub unsafe fn from_vec_unchecked(vec: Vec<A::Item>) -> StackVec<A>[src]

Construct a new StackVec from a Vec<A::Item> without bounds checking.

Important traits for StackVec<A>
pub fn from_buf(buf: A) -> StackVec<A>[src]

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

use stackvector::StackVec;

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

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

Important traits for StackVec<A>
pub fn from_buf_and_len(buf: A, len: usize) -> StackVec<A>[src]

Constructs a new StackVec 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 stackvector::StackVec;

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

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

Important traits for StackVec<A>
pub unsafe fn from_buf_and_len_unchecked(buf: A, len: usize) -> StackVec<A>[src]

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

use stackvector::StackVec;

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

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

pub unsafe fn set_len(&mut self, new_len: usize)[src]

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.

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

The number of elements stored in the vector.

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

If the vector is empty.

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

The number of items the vector can hold.

Important traits for Drain<'a, T>
pub fn drain(&mut self) -> Drain<A::Item>[src]

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

pub fn push(&mut self, value: A::Item)[src]

Append an item to the vector.

pub fn pop(&mut self) -> Option<A::Item>[src]

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

pub fn truncate(&mut self, len: usize)[src]

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. shrink_to_fit after truncating.

pub fn as_slice(&self) -> &[A::Item][src]

Extracts a slice containing the entire vector.

Equivalent to &s[..].

pub fn as_mut_slice(&mut self) -> &mut [A::Item][src]

Extracts a mutable slice of the entire vector.

Equivalent to &mut s[..].

pub fn swap_remove(&mut self, index: usize) -> A::Item[src]

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.

pub fn clear(&mut self)[src]

Remove all elements from the vector.

pub fn remove(&mut self, index: usize) -> A::Item[src]

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

Panics if index is out of bounds.

pub fn insert(&mut self, index: usize, element: A::Item)[src]

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

Panics if index is out of bounds.

pub fn insert_many<I: IntoIterator<Item = A::Item>>(
    &mut self,
    index: usize,
    iterable: I
)
[src]

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

pub fn into_vec(self) -> Vec<A::Item>[src]

Convert a StackVec to a Vec.

pub fn into_inner(self) -> Result<A, Self>[src]

Convert the StackVec into an A.

pub fn retain<F: FnMut(&mut A::Item) -> bool>(&mut self, f: F)[src]

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.

pub fn dedup(&mut self) where
    A::Item: PartialEq<A::Item>, 
[src]

Removes consecutive duplicate elements.

pub fn dedup_by<F>(&mut self, same_bucket: F) where
    F: FnMut(&mut A::Item, &mut A::Item) -> bool
[src]

Removes consecutive duplicate elements using the given equality relation.

pub fn dedup_by_key<F, K>(&mut self, key: F) where
    F: FnMut(&mut A::Item) -> K,
    K: PartialEq<K>, 
[src]

Removes consecutive elements that map to the same key.

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

pub fn from_slice(slice: &[A::Item]) -> Self[src]

Copy the elements from a slice into a new StackVec.

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

pub fn insert_from_slice(&mut self, index: usize, slice: &[A::Item])[src]

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.

pub fn extend_from_slice(&mut self, slice: &[A::Item])[src]

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> StackVec<A> where
    A::Item: Clone
[src]

pub fn resize(&mut self, len: usize, value: A::Item)[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.

pub fn from_elem(elem: A::Item, n: usize) -> Self[src]

Creates a StackVec with n copies of elem.

use stackvector::StackVec;

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

Trait Implementations

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

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

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

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

Performs copy-assignment from source. Read more

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

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

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

fn max(self, other: Self) -> Self1.21.0[src]

Compares and returns the maximum of two values. Read more

fn min(self, other: Self) -> Self1.21.0[src]

Compares and returns the minimum of two values. Read more

fn clamp(self, min: Self, max: Self) -> Self[src]

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

Restrict a value to a certain interval. Read more

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

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

#[must_use] fn lt(&self, other: &Rhs) -> bool1.0.0[src]

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

#[must_use] fn le(&self, other: &Rhs) -> bool1.0.0[src]

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

#[must_use] fn gt(&self, other: &Rhs) -> bool1.0.0[src]

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

#[must_use] fn ge(&self, other: &Rhs) -> bool1.0.0[src]

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

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

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

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

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

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

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

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

type IntoIter = IntoIter<A>

Which kind of iterator are we turning this into?

type Item = A::Item

The type of the elements being iterated over.

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

type IntoIter = Iter<'a, A::Item>

Which kind of iterator are we turning this into?

type Item = &'a A::Item

The type of the elements being iterated over.

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

type IntoIter = IterMut<'a, A::Item>

Which kind of iterator are we turning this into?

type Item = &'a mut A::Item

The type of the elements being iterated over.

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

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

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

type Target = [A::Item]

The resulting type after dereferencing.

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

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

fn hash_slice<H>(data: &[Self], state: &mut H) where
    H: Hasher
1.3.0[src]

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

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

type Output = A::Item

The returned type after indexing.

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

type Output = [A::Item]

The returned type after indexing.

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

type Output = [A::Item]

The returned type after indexing.

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

type Output = [A::Item]

The returned type after indexing.

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

type Output = [A::Item]

The returned type after indexing.

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

type Output = [A::Item]

The returned type after indexing.

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

type Output = [A::Item]

The returned type after indexing.

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

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

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

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

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

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

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

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

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

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

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

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

fn write_vectored(&mut self, bufs: &[IoSlice]) -> Result<usize, Error>1.36.0[src]

Like write, except that it writes from a slice of buffers. Read more

fn write_fmt(&mut self, fmt: Arguments) -> Result<(), Error>1.0.0[src]

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

fn by_ref(&mut self) -> &mut Self1.0.0[src]

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

Auto Trait Implementations

impl<A> Unpin for StackVec<A> where
    A: Unpin

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

impl<A> UnwindSafe for StackVec<A> where
    A: UnwindSafe

impl<A> RefUnwindSafe for StackVec<A> where
    A: RefUnwindSafe

Blanket Implementations

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

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<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, 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> Borrow<T> for T where
    T: ?Sized
[src]

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

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