#xx-hash #hash #hasher #xxh3

no-std bin+lib twox-hash

A Rust implementation of the XXHash and XXH3 algorithms

13 stable releases

1.6.3 May 4, 2022
1.6.2 Dec 25, 2021
1.6.1 Aug 5, 2021
1.6.0 Oct 15, 2020
0.1.1 Jul 20, 2015

#4 in Algorithms

Download history 155876/week @ 2023-12-23 249510/week @ 2023-12-30 379029/week @ 2024-01-06 398984/week @ 2024-01-13 401564/week @ 2024-01-20 417138/week @ 2024-01-27 449168/week @ 2024-02-03 454961/week @ 2024-02-10 439327/week @ 2024-02-17 495421/week @ 2024-02-24 523744/week @ 2024-03-02 494256/week @ 2024-03-09 504371/week @ 2024-03-16 484872/week @ 2024-03-23 490218/week @ 2024-03-30 410431/week @ 2024-04-06

1,972,134 downloads per month
Used in 1,853 crates (173 directly)

MIT license

105KB
2.5K SLoC

TwoX-Hash

A Rust implementation of the XXHash algorithm.

Build Status Current Version

Documentation

Examples

With a fixed seed

use std::hash::BuildHasherDefault;
use std::collections::HashMap;
use twox_hash::XxHash64;

let mut hash: HashMap<_, _, BuildHasherDefault<XxHash64>> = Default::default();
hash.insert(42, "the answer");
assert_eq!(hash.get(&42), Some(&"the answer"));

With a random seed

use std::collections::HashMap;
use twox_hash::RandomXxHashBuilder64;

let mut hash: HashMap<_, _, RandomXxHashBuilder64> = Default::default();
hash.insert(42, "the answer");
assert_eq!(hash.get(&42), Some(&"the answer"));

Benchmarks

64-bit

Bytes SipHasher (MB/s) XXHash (MB/s) Ratio
1 52 38 73%
4 210 148 70%
16 615 615 100%
32 914 1391 152%
128 1347 3657 271%
256 1414 5019 355%
512 1546 6168 399%
1024 1565 6206 397%
1048576 1592 7564 475%
Bytes FnvHasher (MB/s) XXHash (MB/s) Ratio
1 1000 38 4%
4 800 148 19%
16 761 615 81%
32 761 1391 183%
128 727 3657 503%
256 759 5019 661%
512 745 6168 828%
1024 741 6206 838%
1048576 745 7564 1015%

32-bit

Bytes SipHasher (MB/s) XXHash32 (MB/s) Ratio
1 52 55 106%
4 210 210 100%
16 615 1230 200%
32 914 1882 206%
128 1347 3282 244%
256 1414 3459 245%
512 1546 3792 245%
1024 1565 3938 252%
1048576 1592 4127 259%
Bytes FnvHasher (MB/s) XXHash32 (MB/s) Ratio
1 1000 55 6%
4 800 210 26%
16 761 1230 162%
32 761 1882 247%
128 727 3282 451%
256 759 3459 456%
512 745 3792 509%
1024 741 3938 531%
1048576 745 4127 554%

Contributing

  1. Fork it ( https://github.com/shepmaster/twox-hash/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Add a failing test.
  4. Add code to pass the test.
  5. Commit your changes (git commit -am 'Add some feature')
  6. Ensure tests pass.
  7. Push to the branch (git push origin my-new-feature)
  8. Create a new Pull Request

Dependencies

~40–355KB