Struct StableHasher

Source
pub struct StableHasher<H: ExtendedHasher> { /* private fields */ }
Expand description

A Stable Hasher adapted for cross-platform independent hash.

When hashing something that ends up affecting properties like symbol names, we want these symbol names to be calculated independently of other factors like what architecture you’re compiling from.

To that end we always convert integers to little-endian format before hashing and the architecture dependent isize and usize types are extended to 64 bits if needed.

§Example

use rustc_stable_hash::hashers::{StableSipHasher128, SipHasher128Hash};
use rustc_stable_hash::{StableHasher, FromStableHash};
use std::hash::Hasher;

struct Hash128([u64; 2]);
impl FromStableHash for Hash128 {
    type Hash = SipHasher128Hash;

    fn from(SipHasher128Hash(hash): SipHasher128Hash) -> Hash128 {
        Hash128(hash)
    }
}

let mut hasher = StableSipHasher128::new();
hasher.write_usize(0xFA);

let hash: Hash128 = hasher.finish();

Implementations§

Source§

impl<H: ExtendedHasher + Default> StableHasher<H>

Source

pub fn new() -> Self

Creates a new StableHasher.

To be used with the Hasher implementation and StableHasher::finish.

Source§

impl<H: ExtendedHasher> StableHasher<H>

Source

pub fn with_hasher(state: H) -> Self

Creates a new StableHasher from an already created ExtendedHasher.

Useful when wanting to initialize a hasher with different parameters/keys.

Important: Any use of the hasher before being given to a StableHasher is not covered by this crate guarentees and will make the resulting hash NOT platform independent.

Source

pub fn finish<W: FromStableHash<Hash = H::Hash>>(self) -> W

Returns the typed-hash value for the values written.

The resulting typed-hash value is constructed from an FromStableHash implemenation.

To be used in-place of Hasher::finish.

Trait Implementations§

Source§

impl<H: Clone + ExtendedHasher> Clone for StableHasher<H>

Source§

fn clone(&self) -> StableHasher<H>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<H: ExtendedHasher + Debug> Debug for StableHasher<H>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<H: ExtendedHasher + Default> Default for StableHasher<H>

Source§

fn default() -> Self

Creates a new StableHasher.

To be used with the Hasher implementation and StableHasher::finish.

Source§

impl<H: ExtendedHasher> Hasher for StableHasher<H>

Source§

fn finish(&self) -> u64

Returns a combined hash.

For greater precision use instead StableHasher::finish.

Source§

fn write(&mut self, bytes: &[u8])

Writes some data into this Hasher. Read more
Source§

fn write_u8(&mut self, i: u8)

Writes a single u8 into this hasher.
Source§

fn write_u16(&mut self, i: u16)

Writes a single u16 into this hasher.
Source§

fn write_u32(&mut self, i: u32)

Writes a single u32 into this hasher.
Source§

fn write_u64(&mut self, i: u64)

Writes a single u64 into this hasher.
Source§

fn write_u128(&mut self, i: u128)

Writes a single u128 into this hasher.
Source§

fn write_usize(&mut self, i: usize)

Writes a single usize into this hasher.
Source§

fn write_i8(&mut self, i: i8)

Writes a single i8 into this hasher.
Source§

fn write_i16(&mut self, i: i16)

Writes a single i16 into this hasher.
Source§

fn write_i32(&mut self, i: i32)

Writes a single i32 into this hasher.
Source§

fn write_i64(&mut self, i: i64)

Writes a single i64 into this hasher.
Source§

fn write_i128(&mut self, i: i128)

Writes a single i128 into this hasher.
Source§

fn write_isize(&mut self, i: isize)

Writes a single isize into this hasher.
Source§

fn write_length_prefix(&mut self, len: usize)

🔬This is a nightly-only experimental API. (hasher_prefixfree_extras)
Writes a length prefix into this hasher, as part of being prefix-free. Read more
Source§

fn write_str(&mut self, s: &str)

🔬This is a nightly-only experimental API. (hasher_prefixfree_extras)
Writes a single str into this hasher. Read more

Auto Trait Implementations§

§

impl<H> Freeze for StableHasher<H>
where H: Freeze,

§

impl<H> RefUnwindSafe for StableHasher<H>
where H: RefUnwindSafe,

§

impl<H> Send for StableHasher<H>
where H: Send,

§

impl<H> Sync for StableHasher<H>
where H: Sync,

§

impl<H> Unpin for StableHasher<H>
where H: Unpin,

§

impl<H> UnwindSafe for StableHasher<H>
where H: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.