Skip to main content

RapidHasher

Struct RapidHasher 

Source
pub struct RapidHasher<'s, const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool = false, const PROTECTED: bool = false> { /* private fields */ }
Expand description

A Hasher trait compatible hasher that uses the rapidhash algorithm, and uses #[inline(always)] for all methods.

Using #[inline(always)] can deliver a large performance improvement when hashing complex objects, but should be benchmarked for your specific use case. If you have HashMaps for many different types this may come at the cost of some binary size increase.

See crate::fast::RandomState for usage with [std::collections::HashMap].

§Example

use std::hash::Hasher;

use rapidhash::quality::RapidHasher;

let mut hasher = RapidHasher::default();
hasher.write(b"hello world");
let hash = hasher.finish();

Implementations§

Source§

impl<'s, const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> RapidHasher<'s, AVALANCHE, SPONGE, COMPACT, PROTECTED>

Source

pub const DEFAULT_SEED: u64 = super::seed::DEFAULT_SEED

Default RapidHasher seed.

Source

pub const fn new(seed: u64) -> Self

Create a new RapidHasher with a custom seed.

See instead crate::quality::RandomState::new or crate::fast::RandomState::new for a random seed and random secret initialization, for minimal DoS resistance.

Source

pub const fn default_const() -> Self

Create a new RapidHasher using the default seed and secrets.

Trait Implementations§

Source§

impl<'s, const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> Clone for RapidHasher<'s, AVALANCHE, SPONGE, COMPACT, PROTECTED>

Source§

fn clone(&self) -> RapidHasher<'s, AVALANCHE, SPONGE, COMPACT, PROTECTED>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<'s, const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> Copy for RapidHasher<'s, AVALANCHE, SPONGE, COMPACT, PROTECTED>

Source§

impl<const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> Default for RapidHasher<'_, AVALANCHE, SPONGE, COMPACT, PROTECTED>

Source§

fn default() -> Self

Create a new RapidHasher with the default seed.

See crate::inner::RandomState for a [std::hash::BuildHasher] that initializes with a random seed.

Source§

impl<const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> Hasher for RapidHasher<'_, AVALANCHE, SPONGE, COMPACT, PROTECTED>

This implementation implements methods for all integer types as the compiler will (hopefully…) inline and heavily optimize the rapidhash_core for each. Where the bytes length is known the compiler can make significant optimisations and saves us writing them out by hand.

Source§

fn finish(&self) -> u64

Produce the final hash value, marked as #[inline(always)].

Source§

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

Write a byte slice to the hasher, marked as #[inline(always)].

Source§

fn write_u8(&mut self, i: u8)

Write an integer to the hasher, marked as #[inline(always)].

Source§

fn write_u16(&mut self, i: u16)

Write an integer to the hasher, marked as #[inline(always)].

Source§

fn write_u32(&mut self, i: u32)

Write an integer to the hasher, marked as #[inline(always)].

Source§

fn write_u64(&mut self, i: u64)

Write an integer to the hasher, marked as #[inline(always)].

Source§

fn write_usize(&mut self, i: usize)

Write an integer to the hasher, marked as #[inline(always)].

Source§

fn write_i8(&mut self, i: i8)

Write an integer to the hasher, marked as #[inline(always)].

Source§

fn write_i16(&mut self, i: i16)

Write an integer to the hasher, marked as #[inline(always)].

Source§

fn write_i32(&mut self, i: i32)

Write an integer to the hasher, marked as #[inline(always)].

Source§

fn write_i64(&mut self, i: i64)

Write an integer to the hasher, marked as #[inline(always)].

Source§

fn write_isize(&mut self, i: isize)

Write an integer to the hasher, marked as #[inline(always)].

Source§

fn write_u128(&mut self, i: u128)

Write an int to the hasher, marked as #[inline(always)].

Source§

fn write_i128(&mut self, i: i128)

Write an int to the hasher, marked as #[inline(always)].

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<'s, const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> Freeze for RapidHasher<'s, AVALANCHE, SPONGE, COMPACT, PROTECTED>

§

impl<'s, const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> RefUnwindSafe for RapidHasher<'s, AVALANCHE, SPONGE, COMPACT, PROTECTED>

§

impl<'s, const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> Send for RapidHasher<'s, AVALANCHE, SPONGE, COMPACT, PROTECTED>

§

impl<'s, const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> Sync for RapidHasher<'s, AVALANCHE, SPONGE, COMPACT, PROTECTED>

§

impl<'s, const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> Unpin for RapidHasher<'s, AVALANCHE, SPONGE, COMPACT, PROTECTED>

§

impl<'s, const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> UnsafeUnpin for RapidHasher<'s, AVALANCHE, SPONGE, COMPACT, PROTECTED>

§

impl<'s, const AVALANCHE: bool, const SPONGE: bool, const COMPACT: bool, const PROTECTED: bool> UnwindSafe for RapidHasher<'s, AVALANCHE, SPONGE, COMPACT, PROTECTED>

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, 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.