Crates.io | quickphf |
lib.rs | quickphf |
version | 0.1.0 |
source | src |
created_at | 2023-10-16 13:29:08.869089 |
updated_at | 2023-10-16 13:29:08.869089 |
description | Runtime code for static data structures based on the PTHash perfect hash function |
homepage | |
repository | https://github.com/dtrifuno/quickphf |
max_upload_size | |
id | 1004791 |
size | 44,403 |
QuickPHF is a Rust crate that allows you to use static compile-time generated hash maps and hash sets using PTHash perfect hash functions.
This crate only contains the runtime code required for using such structures.
To generate them, look at the quickphf_codegen
crate
instead.
The minimum supported Rust version is 1.56. This crate is #![no_std]
and
#![forbid(unsafe_code)]
.
PhfMap
and PhfSet
,
which, for ease of use, mimic the immutable part of the interface of the
standard library HashMap
and HashSet
; and RawPhfMap
, which is a hash
map that does not store its keys.phf
at lookup, and
more than 10 times faster at construction.wyhash
algorithm for hashing.quickdiv
crate to speed up
modulo computations.use quickphf::examples::*;
// You can use `PhfMap` or `PhfSet` just like `HashMap` or `HashSet`.
assert_eq!(FOURTH_POWERS_TO_ROOTS.get(&4096), Some(&8));
assert_eq!(FOURTH_POWERS_TO_ROOTS.get(&17), None);
assert!(PRIME_DIGITS.contains(&3));
assert_eq!(PRIME_DIGITS.len(), 4);
// With a `RawPhfMap` you would mostly use the `get` method. Note
// that it directly returns a &T instead of an Option<&T>.
assert_eq!(HOLIDAYS_PER_MONTH.get("jul"), &1);
// If you query for an invalid key, it will silently return an
// arbitrary answer.
let valid_reference = HOLIDAYS_PER_MONTH.get("purple");
In general, quickphf
is about twice as fast as phf
at lookup, with RawPhfMap
being faster than PhfMap
, especially for larger hash maps.
Licensed under any of:
at your choice.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be multi-licensed as above, without any additional terms or conditions.