prealloc_ref_vec 0.1.1

Create temporary `Vec`s of references without allocating/deallocating (useful for realtime code)
Documentation
  • Coverage
  • 100%
    12 out of 12 items documented8 out of 10 items with examples
  • Size
  • Source code size: 21.22 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 6.76 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Links
  • Repository
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • BillyDM

prealloc_ref_vec

Documentation Crates.io License

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

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:
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);
});