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 und 64-bit integer values.

Instatiating Tab32Simple or Tab32Twisted (or their 64-bit counterparts) will initialize a table and create a random hash function from the respective hash family. The hash values of an integer key is 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 reproduce hashes, save the table used by the hash function. The function can be recreated using the with_table constructor.

```rust use tab_hash::Tab64Twisted;

fn main() { let key = 42; let twisted1 = Tab64Twisted::new(); let twisted2 = Tab64Twisted::withtable(twisted1.gettable()); let twisted3 = Tab64Twisted::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.

The 64-bit version of twisted tabulation hashing (Tab64Twisted) requires 128-bit operations (see here).

Literature:

This implementation is based on the articles of Mihai Pătraşcu and Mikkel Thorup: - Simple Tabulation Hashing - Twisted Tabulation Hashing

Changelog

Version 0.3.0 [2020-02-12]

Made all structs serializable and deserializable.