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
)