packedvec

Crates.iopackedvec
lib.rspackedvec
version1.2.4
sourcesrc
created_at2018-10-15 14:37:23.122775
updated_at2021-08-04 14:24:10.690932
descriptionStore vectors of integers efficiently
homepage
repositoryhttps://github.com/softdevteam/packedvec/
max_upload_size
id90315
size33,456
Owners (github:softdevteam:owners)

documentation

README

Build Status Latest version Documentation

PackedVec

A PackedVec stores vectors of integers efficiently while providing an API similar to Vec. The basic idea is to store each element using the minimum number of bits needed to represent every element in the Vec. For example, if we have a Vec<u64> with elements [20, 30, 140], every element wastes most of its 64 bits: 7 bits is sufficient to represent the range of elements in the vector. Given this input vector, PackedVec stores each elements using exactly 7 bits, saving substantial memory. For vectors which often contain small ranges of numbers, and which are created rarely, but read from frequently, this can be a significant memory and performance win.

Examples

PackedVec has two main API differences from Vec: a PackedVec is created from a Vec; and a PackedVec returns values rather than references. Both points can be seen in this example:

use packedvec::PackedVec;
let v = vec![-1, 30, 120];
let pv = PackedVec::new(v.clone());
assert_eq!(pv.get(0), Some(-1));
assert_eq!(pv.get(2), Some(120));
assert_eq!(pv.get(3), None);
assert_eq!(v.iter().cloned().collect::<Vec<_>>(), pv.iter().collect::<Vec<_>>());
Commit count: 82

cargo fmt