# prealloc_ref_vec
[](https://docs.rs/prealloc_ref_vec/)
[](https://crates.io/crates/prealloc_ref_vec)
[](https://codeberg.org/BillyDM/prealloc_ref_vec/src/branch/main/LICENSE)
Create temporary `Vec`s 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`](https://crates.io/crates/arrayvec) instead.
# Example
```rust
use prealloc_ref_vec::PreallocRefVec;
// 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:
assert!(tmp_vec.capacity() >= capacity);
tmp_vec.push(&slice_1);
tmp_vec.push(&slice_2);
});
```