14 unstable releases (3 breaking)

Uses old Rust 2015

0.4.0 Mar 13, 2019
0.3.2 Aug 6, 2018
0.3.1 Jul 28, 2018
0.2.8 Jan 22, 2018
0.1.1 Dec 25, 2016

#2098 in Algorithms

Download history 2609/week @ 2024-07-22 2526/week @ 2024-07-29 2599/week @ 2024-08-05 2321/week @ 2024-08-12 2530/week @ 2024-08-19 2600/week @ 2024-08-26 2261/week @ 2024-09-02 2084/week @ 2024-09-09 1780/week @ 2024-09-16 2152/week @ 2024-09-23 2033/week @ 2024-09-30 1802/week @ 2024-10-07 1972/week @ 2024-10-14 2230/week @ 2024-10-21 1850/week @ 2024-10-28 2138/week @ 2024-11-04

8,224 downloads per month
Used in 25 crates (23 directly)

Apache-2.0

1MB
30K SLoC

C++ 17K SLoC // 0.1% comments C 8K SLoC // 0.2% comments Rust 4K SLoC Visual Studio Project 1K SLoC Assembly 306 SLoC // 0.3% comments Visual Studio Solution 62 SLoC Shell 31 SLoC // 0.2% comments Batch 17 SLoC Perl 10 SLoC

A suite of non-cryptographic hash functions for Rust.

Example

use std::hash::{Hash, Hasher};

use fasthash::{metro, MetroHasher};

fn hash<T: Hash>(t: &T) -> u64 {
    let mut s: MetroHasher = Default::default();
    t.hash(&mut s);
    s.finish()
}

let h = metro::hash64(b"hello world\xff");

assert_eq!(h, hash(&"hello world"));

By default, HashMap uses a hashing algorithm selected to provide resistance against HashDoS attacks. The hashing algorithm can be replaced on a per-HashMap basis using the HashMap::with_hasher or HashMap::with_capacity_and_hasher methods.

It also cowork with HashMap or HashSet, act as a hash function

use std::collections::HashSet;

use fasthash::spooky::Hash128;

let mut set = HashSet::with_hasher(Hash128);
set.insert(2);

Or use RandomState<CityHash64> with a random seed.

use std::collections::HashMap;

use fasthash::{city, RandomState};

let s = RandomState::<city::Hash64>::new();
let mut map = HashMap::with_hasher(s);

assert_eq!(map.insert(37, "a"), None);
assert_eq!(map.is_empty(), false);

map.insert(37, "b");
assert_eq!(map.insert(37, "c"), Some("b"));
assert_eq!(map[&37], "c");

Dependencies