Struct StackVec

Source
pub struct StackVec<T, const N: usize> { /* private fields */ }
Expand description

A stack-allocated vector with compile-time capacity N.

This type provides Vec-like functionality without heap allocation, making it suitable for use in audio processing hot paths where allocation latency is unacceptable.

§Examples

use bbx_core::StackVec;

let mut vec: StackVec<i32, 4> = StackVec::new();
vec.push(1).unwrap();
vec.push(2).unwrap();

assert_eq!(vec.len(), 2);
assert_eq!(vec[0], 1);

Implementations§

Source§

impl<T, const N: usize> StackVec<T, N>

Source

pub const fn new() -> StackVec<T, N>

Creates a new empty StackVec.

This is a const fn and can be used in const contexts.

Source

pub fn push(&mut self, value: T) -> Result<(), T>

Pushes a value onto the end of the vector.

Returns Ok(()) if successful, or Err(value) if the vector is full.

Source

pub fn push_unchecked(&mut self, value: T)

Pushes a value onto the end of the vector without bounds checking.

§Panics

Panics in debug mode if the vector is full. In release mode, this will not panic but the behavior is safe due to the debug assertion.

Source

pub fn pop(&mut self) -> Option<T>

Removes and returns the last element, or None if empty.

Source

pub const fn len(&self) -> usize

Returns the number of elements in the vector.

Source

pub const fn is_empty(&self) -> bool

Returns true if the vector contains no elements.

Source

pub const fn is_full(&self) -> bool

Returns true if the vector is at capacity.

Source

pub const fn capacity(&self) -> usize

Returns the maximum capacity of the vector.

Source

pub fn clear(&mut self)

Removes all elements from the vector.

Source

pub fn as_slice(&self) -> &[T]

Returns a slice of the initialized elements.

Source

pub fn as_mut_slice(&mut self) -> &mut [T]

Returns a mutable slice of the initialized elements.

Source

pub fn get(&self, index: usize) -> Option<&T>

Returns a reference to the element at the given index, or None if out of bounds.

Source

pub fn get_mut(&mut self, index: usize) -> Option<&mut T>

Returns a mutable reference to the element at the given index, or None if out of bounds.

Trait Implementations§

Source§

impl<T, const N: usize> Clone for StackVec<T, N>
where T: Clone,

Source§

fn clone(&self) -> StackVec<T, N>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T, const N: usize> Debug for StackVec<T, N>
where T: Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<T, const N: usize> Default for StackVec<T, N>

Source§

fn default() -> StackVec<T, N>

Returns the “default value” for a type. Read more
Source§

impl<T, const N: usize> Drop for StackVec<T, N>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<T, const N: usize> Index<usize> for StackVec<T, N>

Source§

type Output = T

The returned type after indexing.
Source§

fn index(&self, index: usize) -> &<StackVec<T, N> as Index<usize>>::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<T, const N: usize> IndexMut<usize> for StackVec<T, N>

Source§

fn index_mut( &mut self, index: usize, ) -> &mut <StackVec<T, N> as Index<usize>>::Output

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<'a, T, const N: usize> IntoIterator for &'a StackVec<T, N>

Source§

type Item = &'a T

The type of the elements being iterated over.
Source§

type IntoIter = Iter<'a, T>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> <&'a StackVec<T, N> as IntoIterator>::IntoIter

Creates an iterator from a value. Read more
Source§

impl<'a, T, const N: usize> IntoIterator for &'a mut StackVec<T, N>

Source§

type Item = &'a mut T

The type of the elements being iterated over.
Source§

type IntoIter = IterMut<'a, T>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> <&'a mut StackVec<T, N> as IntoIterator>::IntoIter

Creates an iterator from a value. Read more
Source§

impl<T, const N: usize> IntoIterator for StackVec<T, N>

Source§

type Item = T

The type of the elements being iterated over.
Source§

type IntoIter = StackVecIntoIter<T, N>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> <StackVec<T, N> as IntoIterator>::IntoIter

Creates an iterator from a value. Read more

Auto Trait Implementations§

§

impl<T, const N: usize> Freeze for StackVec<T, N>
where T: Freeze,

§

impl<T, const N: usize> RefUnwindSafe for StackVec<T, N>
where T: RefUnwindSafe,

§

impl<T, const N: usize> Send for StackVec<T, N>
where T: Send,

§

impl<T, const N: usize> Sync for StackVec<T, N>
where T: Sync,

§

impl<T, const N: usize> Unpin for StackVec<T, N>
where T: Unpin,

§

impl<T, const N: usize> UnwindSafe for StackVec<T, N>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.