Succinct data structures and other Rust libraries and programs by Piotr Beling.
Included libraries:
- ph (crate, doc) - minimal perfect hash functions (PHast, FMPH and FMPHGO);
- csf (crate, doc) - compressed static functions (maps);
- cseq (crate, doc) - compact sequences (like Elias-Fano);
- minimum_redundancy (crate, doc) - encode and decode data with binary or non-binary Huffman coding;
- bitm (crate, doc) - bit and bitmap manipulation;
- seedable_hash (crate, doc) - seedable hashers,
- binout (crate, doc) - binary encoding, decoding, serialization, deserialization;
- fsum (crate, doc) - calculate accurate sum of floats;
- dyn_size_of (crate, doc) - calculate memory consumed by variables, including the memory allocated on heap,
- butils (crate, doc) - (internal) utilities shared by software included in BSuccinct.
Included programs:
- mphf_benchmark (crate, doc) - benchmarking minimal perfect hash functions,
- csf_benchmark (crate, doc) - benchmarking compressed static functions,
- cseq_benchmark (crate, doc) - benchmarking compact sequences,
- coding_benchmark (crate, doc) - benchmarking Huffman coding crates.
Everything is dual-licensed under Apache 2.0 or MIT.
When using bsuccinct for research purposes, please cite the following paper:
- Piotr Beling, BSuccinct: Rust libraries and programs focused on succinct data structures, SoftwareX, Volume 26, 2024, 101681, ISSN 2352-7110,
https://doi.org/10.1016/j.softx.2024.101681
Programs can be compiled and installed from sources. To do this, a Rust compiler is needed.
The easiest way to obtain the compiler along with other necessary tools (like cargo) is
to use rustup.
Please follow the instructions at https://www.rust-lang.org/tools/install.
Once Rust is installed, to compile and install a program from sources and with native optimizations, just execute:
RUSTFLAGS="-C target-cpu=native" cargo install <program_name>
for example
RUSTFLAGS="-C target-cpu=native" cargo install mphf_benchmark
For portability, BSuccinct components compile and run on platforms with 32-bit addressing (like wasm32). However, they are optimized primarily with 64-bit CPUs in mind.
$ claude mcp add bsuccinct-rs \
-- python -m otcore.mcp_server <graph>