1 unstable release
0.1.0 | Sep 4, 2022 |
---|
#23 in #reuse
8KB
63 lines
vec_storage_reuse
Provides an API to reuse a Vec
's allocation.
This is useful to achieve zero-alloc when storing data with short lifetimes in a Vec
:
let mut objects_storage: VecStorageForReuse<Object<'static>> = VecStorageForReuse::new();
while let Some(byte_chunk) = stream.next() { // byte_chunk only lives this scope
let mut objects: &mut Vec<Object<'_>> = &mut *objects_storage.reuse_allocation();
// Zero-copy parsing; Object has references to chunk
deserialize(byte_chunk, &mut objects)?;
process(&objects)?;
} // byte_chunk lifetime ends
Credits:
This crate delegates the actual unsafe functionality to the recycle_vec
crate, and just provides
an interface that abstracts the swapping with the container through Drop
, so that one can never
forget to swap back the temporary object with the storage
Dependencies
~9KB