Crate prealloc_ref_vec

Crate prealloc_ref_vec 

Source
Expand description

Create temporary Vecs of references without allocating/deallocating (useful for realtime code). This crate is implemented without any unsafe code, and can be used without the standard library (#![no_std]).

Note, if the maximum capacity is known at compile time and is small enough to fit on the stack, then the same effect can be more easily achieved using arrayvec instead.

§Example

// Contruct the object to hold the allocation. Here we specify
// we want the data type to be slices of `f32` values.
//
// This object can be stored as a field in a struct for later use.
let capacity = 100;
let mut v_alloc: PreallocRefVec<[f32]> = PreallocRefVec::new(capacity);

// ...

let slice_1: [f32; 4] = [0.0; 4];
let slice_2: [f32; 4] = [0.0; 4];

// Temporarily use the allocation to construct a Vec<&T>
// (Vec<&[f32]> in this case)
let mut tmp_vec = v_alloc.get_tmp();

// The temporary vec is always cleared when created.
assert_eq!(tmp_vec.len(), 0);
// The temporary vec uses the internal allocation.
assert!(tmp_vec.capacity() >= capacity);

tmp_vec.push(&slice_1);
tmp_vec.push(&slice_2);

// Dropping the temporary vec returns the allocation to be used again.
drop(tmp_vec);

// ...

// Alternatively, a closure can be used to construct a temporary vec:
v_alloc.with_tmp(|tmp_vec| {
    assert_eq!(tmp_vec.len(), 0);
    assert!(tmp_vec.capacity() >= capacity);
    tmp_vec.push(&slice_1);
    tmp_vec.push(&slice_2);
});

Structs§

PreallocRefVec
A struct that is used to create a temporary Vec of references/unsized data without allocating/deallocating. Useful for realtime code.
TmpRefMutVec
A temporary Vec of mutable references/unsized data created using a PreallocRefVec. Useful for realtime code.
TmpRefVec
A temporary Vec of immutable references/unsized data created using a PreallocRefVec. Useful for realtime code.