/// (eg. `collections::HashMap` uses it by default).
///
/// See: <https://131002.net/siphash>
-#[unstable(feature = "sip_hash_13", issue = "34767")]
+#[unstable(feature = "hashmap_internals", issue = "0")]
#[rustc_deprecated(since = "1.13.0",
reason = "use `std::collections::hash_map::DefaultHasher` instead")]
#[derive(Debug, Clone, Default)]
+#[doc(hidden)]
pub struct SipHasher13 {
hasher: Hasher<Sip13Rounds>,
}
/// An implementation of SipHash 2-4.
///
/// See: <https://131002.net/siphash/>
-#[unstable(feature = "sip_hash_13", issue = "34767")]
+#[unstable(feature = "hashmap_internals", issue = "0")]
#[rustc_deprecated(since = "1.13.0",
reason = "use `std::collections::hash_map::DefaultHasher` instead")]
#[derive(Debug, Clone, Default)]
-pub struct SipHasher24 {
+struct SipHasher24 {
hasher: Hasher<Sip24Rounds>,
}
#[rustc_deprecated(since = "1.13.0",
reason = "use `std::collections::hash_map::DefaultHasher` instead")]
pub fn new_with_keys(key0: u64, key1: u64) -> SipHasher {
- SipHasher(SipHasher24::new_with_keys(key0, key1))
+ SipHasher(SipHasher24 {
+ hasher: Hasher::new_with_keys(key0, key1)
+ })
}
}
impl SipHasher13 {
/// Creates a new `SipHasher13` with the two initial keys set to 0.
#[inline]
- #[unstable(feature = "sip_hash_13", issue = "34767")]
+ #[unstable(feature = "hashmap_internals", issue = "0")]
#[rustc_deprecated(since = "1.13.0",
reason = "use `std::collections::hash_map::DefaultHasher` instead")]
pub fn new() -> SipHasher13 {
/// Creates a `SipHasher13` that is keyed off the provided keys.
#[inline]
- #[unstable(feature = "sip_hash_13", issue = "34767")]
+ #[unstable(feature = "hashmap_internals", issue = "0")]
#[rustc_deprecated(since = "1.13.0",
reason = "use `std::collections::hash_map::DefaultHasher` instead")]
pub fn new_with_keys(key0: u64, key1: u64) -> SipHasher13 {
}
}
-impl SipHasher24 {
- /// Creates a new `SipHasher24` with the two initial keys set to 0.
- #[inline]
- #[unstable(feature = "sip_hash_13", issue = "34767")]
- #[rustc_deprecated(since = "1.13.0",
- reason = "use `std::collections::hash_map::DefaultHasher` instead")]
- pub fn new() -> SipHasher24 {
- SipHasher24::new_with_keys(0, 0)
- }
-
- /// Creates a `SipHasher24` that is keyed off the provided keys.
- #[inline]
- #[unstable(feature = "sip_hash_13", issue = "34767")]
- #[rustc_deprecated(since = "1.13.0",
- reason = "use `std::collections::hash_map::DefaultHasher` instead")]
- pub fn new_with_keys(key0: u64, key1: u64) -> SipHasher24 {
- SipHasher24 {
- hasher: Hasher::new_with_keys(key0, key1)
- }
- }
-}
-
impl<S: Sip> Hasher<S> {
#[inline]
fn new_with_keys(key0: u64, key1: u64) -> Hasher<S> {
impl super::Hasher for SipHasher {
#[inline]
fn write(&mut self, msg: &[u8]) {
- self.0.write(msg)
+ self.0.hasher.write(msg)
}
#[inline]
fn finish(&self) -> u64 {
- self.0.finish()
+ self.0.hasher.finish()
}
}
-#[unstable(feature = "sip_hash_13", issue = "34767")]
+#[unstable(feature = "hashmap_internals", issue = "0")]
impl super::Hasher for SipHasher13 {
#[inline]
fn write(&mut self, msg: &[u8]) {
}
}
-#[unstable(feature = "sip_hash_13", issue = "34767")]
-impl super::Hasher for SipHasher24 {
- #[inline]
- fn write(&mut self, msg: &[u8]) {
- self.hasher.write(msg)
- }
-
- #[inline]
- fn finish(&self) -> u64 {
- self.hasher.finish()
- }
-}
-
impl<S: Sip> super::Hasher for Hasher<S> {
// see short_write comment for explanation
#[inline]
#![allow(deprecated)]
use core::hash::{Hash, Hasher};
-use core::hash::{SipHasher, SipHasher13, SipHasher24};
+use core::hash::{SipHasher, SipHasher13};
use core::{slice, mem};
// Hash just the bytes of the slice, without length prefix
let k1 = 0x_0f_0e_0d_0c_0b_0a_09_08;
let mut buf = Vec::new();
let mut t = 0;
- let mut state_inc = SipHasher24::new_with_keys(k0, k1);
+ let mut state_inc = SipHasher::new_with_keys(k0, k1);
while t < 64 {
let vec = u8to64_le!(vecs[t], 0);
- let out = hash_with(SipHasher24::new_with_keys(k0, k1), &Bytes(&buf));
+ let out = hash_with(SipHasher::new_with_keys(k0, k1), &Bytes(&buf));
assert_eq!(vec, out);
- let full = hash_with(SipHasher24::new_with_keys(k0, k1), &Bytes(&buf));
+ let full = hash_with(SipHasher::new_with_keys(k0, k1), &Bytes(&buf));
let i = state_inc.finish();
assert_eq!(full, i);
#[test]
fn test_write_short_works() {
let test_usize = 0xd0c0b0a0usize;
- let mut h1 = SipHasher24::new();
+ let mut h1 = SipHasher::new();
h1.write_usize(test_usize);
h1.write(b"bytes");
h1.write(b"string");
h1.write_u8(0xFFu8);
h1.write_u8(0x01u8);
- let mut h2 = SipHasher24::new();
+ let mut h2 = SipHasher::new();
h2.write(unsafe {
slice::from_raw_parts(&test_usize as *const _ as *const u8,
mem::size_of::<usize>())