Trait toad_array::Array

source ·
pub trait Array: Default + Len + Reserve + Filled<Self::Item> + Trunc + Indexed<Self::Item> + Extend<Self::Item> + FromIterator<Self::Item> + IntoIterator<Item = Self::Item> + Deref<Target = [Self::Item]> + DerefMut {
    type Item;
}
Expand description

A generalization of std::vec::Vec

Provided implementations

Why tinyvec::ArrayVec?

The performance of heapless and arrayvec’s Extend implementations are notably worse than tinyvec. (see toad-msg/benches/collections.rs) tinyvec also has the added bonus of being 100% unsafe-code-free.

Definition of an Array

The Array trait is automatically implemented for ordered indexed collections with a non-fixed number of elements which are contiguous in memory.

This translates to the trait requirements:

  • Must have an empty (Default) value
  • Must allow populating every element with a value (Filled)
  • Must allow dropping every element after a given index (Trunc)
  • Must allow mutably appending one or more elements (Extend)
  • Must be creatable from an iterator (FromIterator)
  • Must allow iterating over owned elements (IntoIterator)
  • Must be dereferenceable to readonly and mutable slices (Deref, DerefMut)
  • Must allow getting the runtime length (Len)
  • May have a hard limit on number of elements (Len)
  • May allow creating an instance with maximum length and a given filler value (Filled)
  • May allow pre-allocating space for a specific number of elements (Reserve)

Required Associated Types§

source

type Item

The type of item contained in the collection

Implementations on Foreign Types§

source§

impl<T> Array for Vec<T>

§

type Item = T

source§

impl<A, T> Array for ArrayVec<A>where Self: Filled<T> + Trunc, A: Array<Item = T>,

§

type Item = T

Implementors§