[−][src]Struct stackvector::StackVec
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: usize
data: 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]
&mut self,
index: usize,
iterable: I
)
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]
A::Item: PartialEq<A::Item>,
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]
F: FnMut(&mut A::Item, &mut A::Item) -> bool,
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]
F: FnMut(&mut A::Item) -> K,
K: PartialEq<K>,
Removes consecutive elements that map to the same key.
impl<A: Array> StackVec<A> where
A::Item: Copy,
[src]
A::Item: Copy,
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]
A::Item: Clone,
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]
A::Item: Copy,
fn extend_from_slice(&mut self, other: &[A::Item])
[src]
impl<A: Array> Drop for StackVec<A>
[src]
impl<A: Array> AsRef<[<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.
fn into_iter(self) -> Self::IntoIter
[src]
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.
fn into_iter(self) -> Self::IntoIter
[src]
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.
fn into_iter(self) -> Self::IntoIter
[src]
impl<A: Array> Default for StackVec<A>
[src]
impl<A: Array> Eq for StackVec<A> where
A::Item: Eq,
[src]
A::Item: Eq,
impl<A: Array> Clone for StackVec<A> where
A::Item: Clone,
[src]
A::Item: Clone,
ⓘImportant traits for StackVec<A>fn clone(&self) -> StackVec<A>
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
Performs copy-assignment from source
. Read more
impl<A: Array> PartialOrd<StackVec<A>> for StackVec<A> where
A::Item: PartialOrd,
[src]
A::Item: PartialOrd,
fn partial_cmp(&self, other: &StackVec<A>) -> Option<Ordering>
[src]
#[must_use]
fn lt(&self, other: &Rhs) -> bool
1.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) -> bool
1.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) -> bool
1.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) -> bool
1.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> Extend<<A as Array>::Item> for StackVec<A>
[src]
fn extend<I: IntoIterator<Item = A::Item>>(&mut self, iterable: I)
[src]
impl<A: Array, B: Array> PartialEq<StackVec<B>> for StackVec<A> where
A::Item: PartialEq<B::Item>,
[src]
A::Item: PartialEq<B::Item>,
impl<'a, A: Array> From<&'a [<A as Array>::Item]> for StackVec<A> where
A::Item: Clone,
[src]
A::Item: Clone,
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> Send for StackVec<A> where
A::Item: Send,
[src]
A::Item: Send,
impl<A: Array> Ord for StackVec<A> where
A::Item: Ord,
[src]
A::Item: Ord,
fn cmp(&self, other: &StackVec<A>) -> Ordering
[src]
fn max(self, other: Self) -> Self
1.21.0[src]
Compares and returns the maximum of two values. Read more
fn min(self, other: Self) -> Self
1.21.0[src]
Compares and returns the minimum of two values. Read more
fn clamp(self, min: Self, max: Self) -> Self
[src]
clamp
)Restrict a value to a certain interval. Read more
impl<A: Array> AsMut<[<A as Array>::Item]> for StackVec<A>
[src]
impl<A: Array> Deref for StackVec<A>
[src]
impl<A: Array> DerefMut for StackVec<A>
[src]
impl<A: Array> Hash for StackVec<A> where
A::Item: Hash,
[src]
A::Item: Hash,
fn hash<H: Hasher>(&self, state: &mut H)
[src]
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
Feeds a slice of this type into the given [Hasher
]. Read more
impl<A: Array> Debug for StackVec<A> where
A::Item: Debug,
[src]
A::Item: Debug,
impl<A: Array> Index<usize> for StackVec<A>
[src]
type Output = A::Item
The returned type after indexing.
fn index(&self, index: usize) -> &A::Item
[src]
impl<A: Array> Index<Range<usize>> for StackVec<A>
[src]
type Output = [A::Item]
The returned type after indexing.
fn index(&self, index: Range<usize>) -> &[A::Item]
[src]
impl<A: Array> Index<RangeFrom<usize>> for StackVec<A>
[src]
type Output = [A::Item]
The returned type after indexing.
fn index(&self, index: RangeFrom<usize>) -> &[A::Item]
[src]
impl<A: Array> Index<RangeFull> for StackVec<A>
[src]
type Output = [A::Item]
The returned type after indexing.
fn index(&self, index: RangeFull) -> &[A::Item]
[src]
impl<A: Array> Index<RangeTo<usize>> for StackVec<A>
[src]
type Output = [A::Item]
The returned type after indexing.
fn index(&self, index: RangeTo<usize>) -> &[A::Item]
[src]
impl<A: Array> Index<RangeInclusive<usize>> for StackVec<A>
[src]
type Output = [A::Item]
The returned type after indexing.
fn index(&self, index: RangeInclusive<usize>) -> &[A::Item]
[src]
impl<A: Array> Index<RangeToInclusive<usize>> for StackVec<A>
[src]
type Output = [A::Item]
The returned type after indexing.
fn index(&self, index: RangeToInclusive<usize>) -> &[A::Item]
[src]
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> FromIterator<<A as Array>::Item> for StackVec<A>
[src]
ⓘImportant traits for StackVec<A>fn from_iter<I: IntoIterator<Item = A::Item>>(iterable: I) -> 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]
fn borrow_mut(&mut self) -> &mut [A::Item]
[src]
impl<A: Array<Item = u8>> Write for StackVec<A>
[src]
fn write(&mut self, buf: &[u8]) -> Result<usize>
[src]
fn write_all(&mut self, buf: &[u8]) -> Result<()>
[src]
fn flush(&mut self) -> Result<()>
[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 Self
1.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,
A: Unpin,
impl<A> Sync for StackVec<A> where
A: Sync,
A: Sync,
impl<A> UnwindSafe for StackVec<A> where
A: UnwindSafe,
A: UnwindSafe,
impl<A> RefUnwindSafe for StackVec<A> where
A: RefUnwindSafe,
A: RefUnwindSafe,
Blanket Implementations
impl<I> IntoIterator for I where
I: Iterator,
[src]
I: Iterator,
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?
fn into_iter(self) -> I
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,