https://github.com/shepmaster/twox-hash
A Rust implementation of the xxHash algorithm.
https://github.com/shepmaster/twox-hash
hashing rust xxhash
Last synced: 5 months ago
JSON representation
A Rust implementation of the xxHash algorithm.
- Host: GitHub
- URL: https://github.com/shepmaster/twox-hash
- Owner: shepmaster
- License: mit
- Created: 2015-05-09T02:52:24.000Z (over 10 years ago)
- Default Branch: main
- Last Pushed: 2024-12-09T15:57:42.000Z (10 months ago)
- Last Synced: 2025-05-03T03:10:01.486Z (5 months ago)
- Topics: hashing, rust, xxhash
- Language: Rust
- Homepage:
- Size: 2.01 MB
- Stars: 392
- Watchers: 10
- Forks: 42
- Open Issues: 26
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
A Rust implementation of the [xxHash] algorithm.
[![Crates.io][crates-badge]][crates-url]
[![Documentation][docs-badge]][docs-url]
[![Build Status][actions-badge]][actions-url][xxHash]: https://github.com/Cyan4973/xxHash
[crates-badge]: https://img.shields.io/crates/v/twox-hash.svg
[crates-url]: https://crates.io/crates/twox-hash
[docs-badge]: https://img.shields.io/docsrs/twox-hash
[docs-url]: https://docs.rs/twox-hash/
[actions-badge]: https://github.com/shepmaster/twox-hash/actions/workflows/ci.yml/badge.svg?branch=main
[actions-url]: https://github.com/shepmaster/twox-hash/actions/workflows/ci.yml?query=branch%3Amain# 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
```rust
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
```rust
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
```rust
use std::{collections::HashMap, hash::BuildHasherDefault};
use twox_hash::XxHash64;let mut hash = HashMap::<_, _, BuildHasherDefault>::default();
hash.insert(42, "the answer");
assert_eq!(hash.get(&42), Some(&"the answer"));
```### With a random seed
```rust
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
```rust
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.
[comparison]: https://github.com/shepmaster/twox-hash/tree/main/comparison
# Contributing
1. Fork it ()
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[`Hashmap`]: std::collections::HashMap
[`XxHash32`]: crate::XxHash32
[`XxHash64`]: crate::XxHash64
[`XxHash3_64`]: crate::XxHash3_64