Trait 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

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

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

Source§

type Item = T

Source§

impl<T> Array for Vec<T>

Source§

type Item = T

Implementors§