Expand description
A Rust implementation of the xxHash algorithm.
§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
name | description |
---|---|
xxhash32 | Include the XxHash32 algorithm |
xxhash64 | Include the XxHash64 algorithm |
xxhash3_64 | Include the XxHash3_64 algorithm |
random | Create random instances of the hashers |
serialize | Serialize and deserialize hasher state with Serde |
std | Use the Rust standard library. Enable this if you want SIMD support in XxHash3_64 |
alloc | Use the Rust allocator library. Enable this if you want to create XxHash3_64 with dynamic secrets |
§Benchmarks
See benchmarks in the comparison README.
§Contributing
- Fork it (https://github.com/shepmaster/twox-hash/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Add a failing test.
- Add code to pass the test.
- Commit your changes (
git commit -am 'Add some feature'
) - Ensure tests pass.
- Push to the branch (
git push origin my-new-feature
) - 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_
64 xxhash3_64
The implementation of XXH3_64. - xxhash32
xxhash32
The implementation of XXH32. - xxhash64
xxhash64
The implementation of XXH64.