Expand description
tinyvec
provides 100% safe vec-like data structures.
Provided Types
With no features enabled, this crate provides the ArrayVec
type, which
is an array-backed storage. You can push values into the array and pop them
out of the array and so on. If the array is made to overflow it will panic.
Similarly, there is also a SliceVec
type available, which is a vec-like
that’s backed by a slice you provide. You can add and remove elements, but
if you overflow the slice it will panic.
With the alloc
feature enabled, the crate also has a TinyVec
type.
This is an enum type which is either an Inline(ArrayVec)
or a Heap(Vec)
.
If a TinyVec
is Inline
and would overflow it automatically transitions
itself into being Heap
mode instead of a panic.
All of this is done with no unsafe
code within the crate. Technically the
Vec
type from the standard library uses unsafe
internally, but this
crate introduces no new unsafe
code into your project.
The limitation is that the element type of a vec from this crate must
support the Default
trait. This means that this crate isn’t suitable for
all situations, but a very surprising number of types do support Default
.
Other Features
grab_spare_slice
lets you get access to the “inactive” portions of an ArrayVec.rustc_1_40
makes the crate assume a minimum rust version of1.40.0
, which allows some better internal optimizations.serde
provides aSerialize
andDeserialize
implementation forTinyVec
andArrayVec
types, provided the inner item also has an implementation.
API
The general goal of the crate is that, as much as possible, the vecs here
should be a “drop in” replacement for the standard library Vec
type. We
strive to provide all of the Vec
methods with the same names and
signatures. The exception is that the element type of some methods will have
a Default
bound that’s not part of the normal Vec
type.
The vecs here also have a few additional methods that aren’t on the Vec
type. In this case, the names tend to be fairly long so that they are
unlikely to clash with any future methods added to Vec
.
Stability
- The
1.0
series of the crate works with Rustc1.34.0
or later, though you still need to have Rustc1.36.0
to use thealloc
feature. - The
2.0
version of the crate is planned for some time after themin_const_generics
stuff becomes stable. This would greatly raise the minimum rust version and also allow us to totally eliminate the need for theArray
trait. The actual usage of the crate is not expected to break significantly in this transition.
Macros
- Helper to make an
ArrayVec
. - Helper to make a
TinyVec
.
Structs
- An array-backed, vector-like data structure.
- Draining iterator for
ArrayVec
- Iterator for consuming an
ArrayVec
and returning owned elements. - Splicing iterator for
ArrayVec
SeeArrayVec::splice
- A slice-backed vector-like data structure.
- Draining iterator for
SliceVec
- Splicing iterator for
TinyVec
SeeTinyVec::splice
- The error type returned when a conversion from a slice to an
ArrayVec
fails.
Enums
- A vector that starts inline, but can automatically move to the heap.
- Draining iterator for
TinyVecDrain
- Iterator for consuming an
TinyVec
and returning owned elements.
Traits
- A trait for types that are an array.