8 stable releases
Uses old Rust 2015
| 1.2.5 | Mar 17, 2025 |
|---|---|
| 1.2.4 | Aug 4, 2021 |
| 1.2.3 | Mar 15, 2021 |
| 1.2.2 | Nov 21, 2019 |
| 1.1.0 | Oct 17, 2018 |
#202 in Data structures
56,496 downloads per month
Used in 15 crates
(2 directly)
28KB
495 lines
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<_>>());
Dependencies
~84–375KB