Succinct Data Structures for Rust
So far we have:
- bit vectors and bit buffer;
- integer vectors with arbitrary-sized (1- to 64-bit) elements;
- a variety of universal codes;
- constant-time rank queries; and
- O(lg lg n)-time select queries based on binary search over ranks.
It’s on crates.io, so you can add
[dependencies] succinct = "0.4.4"
extern crate succinct;
to your crate root.
IntVecborrows some implementation techniques from
nbitsvec. The main difference is that
typenumto put the element size (in bits) as a parameter to the vector type. Also,
nbitsvecis likely to be faster.
Some of the API is inspired by SDSL, a C++ succinct data structures library. It’s much more complete than
succinct, and probably more correct and faster too.