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)