Build Status creates.io-version License: MIT docs.rs

tab-hash - Tabulation Hashing for Rust

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.

Example:

```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)); } ```

Note:

These hash functions do not implement the std::hash::Hasher trait, since they do not work on arbitrary length byte streams.

Literature:

This implementation is based on the articles of Mihai Patrascu and Mikkel Thorup: - Simple Tabulation Hashing - Twisted Tabulation Hashing