mirror of
https://github.com/openharmony/third_party_rust_rust-fnv.git
synced 2026-06-30 21:17:56 -04:00
Import from https://github.com/servo/rust-selectors/blob/1fda09bf0c59acfcb697f71b38dad22108b3d27a/src/fnv.rs
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
target
|
||||
Cargo.lock
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
[package]
|
||||
name = "fnv"
|
||||
version = "1.0.0"
|
||||
authors = ["Alex Crichton <alex@alexcrichton.com>"]
|
||||
description = "Fowler–Noll–Vo hash function"
|
||||
license = "Apache-2 / MIT"
|
||||
readme = "README.md"
|
||||
|
||||
[lib]
|
||||
name = "fnv"
|
||||
path = "lib.rs"
|
||||
doctest = false
|
||||
@@ -0,0 +1,33 @@
|
||||
//! This file stolen wholesale from https://github.com/rust-lang/rust/blob/master/src/librustc/util/nodemap.rs
|
||||
|
||||
use std::default::Default;
|
||||
use std::hash::Hasher;
|
||||
|
||||
/// A speedy hash algorithm for node ids and def ids. The hashmap in
|
||||
/// libcollections by default uses SipHash which isn't quite as speedy as we
|
||||
/// want. In the compiler we're not really worried about DOS attempts, so we
|
||||
/// just default to a non-cryptographic hash.
|
||||
///
|
||||
/// This uses FNV hashing, as described here:
|
||||
/// http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
|
||||
#[allow(missing_copy_implementations)]
|
||||
pub struct FnvHasher(u64);
|
||||
|
||||
impl Default for FnvHasher {
|
||||
#[inline]
|
||||
fn default() -> FnvHasher { FnvHasher(0xcbf29ce484222325) }
|
||||
}
|
||||
|
||||
impl Hasher for FnvHasher {
|
||||
#[inline]
|
||||
fn finish(&self) -> u64 { self.0 }
|
||||
#[inline]
|
||||
fn write(&mut self, bytes: &[u8]) {
|
||||
let FnvHasher(mut hash) = *self;
|
||||
for byte in bytes.iter() {
|
||||
hash = hash ^ (*byte as u64);
|
||||
hash = hash.wrapping_mul(0x100000001b3);
|
||||
}
|
||||
*self = FnvHasher(hash);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
#[test]
|
||||
fn it_works() {
|
||||
}
|
||||
Reference in New Issue
Block a user