Crate twox_hash

Source
Expand description

A Rust implementation of the xxHash algorithm.

Crates.io Documentation Build Status

§Examples

These examples use XxHash64 but the same ideas can be used for XxHash32 or XxHash3_64.

§Hashing arbitrary data

§When all the data is available at once

use twox_hash::XxHash64;

let seed = 1234;
let hash = XxHash64::oneshot(seed, b"some bytes");
assert_eq!(0xeab5_5659_a496_d78b, hash);

§When the data is streaming

use std::hash::Hasher as _;
use twox_hash::XxHash64;

let seed = 1234;
let mut hasher = XxHash64::with_seed(seed);
hasher.write(b"some");
hasher.write(b" ");
hasher.write(b"bytes");
let hash = hasher.finish();
assert_eq!(0xeab5_5659_a496_d78b, hash);

§In a HashMap

§With a default seed

use std::{collections::HashMap, hash::BuildHasherDefault};
use twox_hash::XxHash64;

let mut hash = HashMap::<_, _, BuildHasherDefault<XxHash64>>::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::xxhash64;

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

§With a fixed seed

use std::collections::HashMap;
use twox_hash::xxhash64;

let mut hash = HashMap::with_hasher(xxhash64::State::with_seed(0xdead_cafe));
hash.insert(42, "the answer");
assert_eq!(hash.get(&42), Some(&"the answer"));

§Feature Flags

namedescription
xxhash32Include the XxHash32 algorithm
xxhash64Include the XxHash64 algorithm
xxhash3_64Include the XxHash3_64 algorithm
randomCreate random instances of the hashers
serializeSerialize and deserialize hasher state with Serde
stdUse the Rust standard library. Enable this if you want SIMD support in XxHash3_64
allocUse the Rust allocator library. Enable this if you want to create XxHash3_64 with dynamic secrets

§Benchmarks

See benchmarks in the comparison README.

§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

Re-exports§

  • pub use xxhash32::Hasher as XxHash32;
    xxhash32
  • pub use xxhash64::Hasher as XxHash64;
    xxhash64
  • pub use xxhash3_64::Hasher as XxHash3_64;
    xxhash3_64

Modules§

  • xxhash3_64xxhash3_64
    The implementation of XXH3_64.
  • xxhash32xxhash32
    The implementation of XXH32.
  • xxhash64xxhash64
    The implementation of XXH64.