This crate offers rust implementations of simple and twisted tabulation hashing for 32-bit integer values.
Instatiating Tab32Simple
or Tab32Twisted
will initialize a table and
create a random hash function from the respective hash family.
The hash value of a 32-bit integer can be computed by calling its hash
method.
```rust use tab_hash::Tab32Simple;
fn main() { let keys = vec![0, 8, 15, 47, 11]; let simple = Tab32Simple::new(); for k in keys { println!("{}", simple.hash(k)); } } ```
To reprocude hashes, save the table used by the hash function and save it.
The function can be recreated using the with_table
constructor.
```rust use tab_hash::Tab32Twisted;
fn main() { let key = 42; let twisted1 = Tab32Twisted::new(); let twisted2 = Tab32Twisted::withtable(twisted1.gettable()); let twisted3 = Tab32Twisted::new(); asserteq!(twisted1.hash(key), twisted2.hash(key)); assertne!(twisted1.hash(key), twisted3.hash(key)); } ```
These hash functions do not implement the std::hash::Hasher
trait,
since they do not work on arbitrary length byte streams.
This implementation is based on the articles of Mihai Patrascu and Mikkel Thorup: - Simple Tabulation Hashing - Twisted Tabulation Hashing