Skip to main content

BuzHash

Struct BuzHash 

Source
pub struct BuzHash<H: BuzHashHash> { /* private fields */ }
Expand description

Describes an instance of BuzHash (aka cyclic polynomial hash).

Provides parameterization over the window size (k), hash function (h), chunk edge mask, and max chunk size.

Uses fixed 32-bit width for the hash.

The trait BuzHashHash provides the internal hash function, see the implimentations of it for built-in hash options (which include both Borg and silvasur/buzhash’s internal hash tables).

Note that it’s helpful for k to be prime to prevent repeating strings form resulting in total cancelation of the internal hash, which can cause overly long chunks.

Adjusting mask changes the average chunk size.

§Performance

BuzHash requires storing bytes equal to it’s window size (k). Because of this, BuzHashIncr may have poor performance compared to BuzHash::find_chunk_edge().

Implementations§

Source§

impl<H: BuzHashHash> BuzHash<H>

Source

pub fn new(capacity: usize, mask: u32, hash: H, max_chunk_size: u64) -> Self

Create an instance with the given capacity (k) and chunk termination mask, and a internal hash function.

capacity is the number of bytes that are taken into account for a given hash. mask affects how chunk edges are determined. hash is applied to each byte of input prior to mixing into the rolling hash.

Source§

impl<'a> BuzHash<BuzHashTableByteSaltHash<'a>>

Source

pub fn new_nom(salt: u8) -> Self

Create a buzhash instance using defaults from attic-labs/nom version 7.17

  • k: 67
  • hash is the silvasur/buzhash table
  • mask: 1<<12 -1
  • max_chunk_size: 1 << 24

Trait Implementations§

Source§

impl<H: BuzHashHash + Clone> Chunk for BuzHash<H>

Source§

type SearchState = BuzHashSearchState

SearchState allows searching for the chunk edge to resume without duplicating work already done.
Source§

fn to_search_state(&self) -> Self::SearchState

Provide an initial [SearchState] for use with [find_chunk_edge()]. Generally, for each input one should generate a new [SearchState].
Source§

fn find_chunk_edge( &self, state: &mut Self::SearchState, data: &[u8], ) -> (Option<usize>, usize)

Find the next “chunk” in data to emit Read more
Source§

impl<H: Clone + BuzHashHash> Clone for BuzHash<H>

Source§

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

Returns a duplicate 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: Debug + BuzHashHash> Debug for BuzHash<H>

Source§

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

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

impl<H: BuzHashHash + Clone> From<&BuzHash<H>> for BuzHashIncr<H>

Source§

fn from(src: &BuzHash<H>) -> Self

Converts to this type from the input type.
Source§

impl<H: BuzHashHash> From<BuzHash<H>> for BuzHashIncr<H>

Source§

fn from(params: BuzHash<H>) -> Self

Converts to this type from the input type.
Source§

impl<H: PartialEq + BuzHashHash> PartialEq for BuzHash<H>

Source§

fn eq(&self, other: &BuzHash<H>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<H: BuzHashHash + Clone> ToChunkIncr for BuzHash<H>

Source§

type Incr = BuzHashIncr<H>

Incr provides the incrimental interface to this chunking instance
Source§

fn to_chunk_incr(&self) -> Self::Incr

to_chunk_incr() returns a ChunkIncr which can be incrimentally fed data and emits chunks. Read more
Source§

impl<H: Eq + BuzHashHash> Eq for BuzHash<H>

Source§

impl<H: BuzHashHash> StructuralPartialEq for BuzHash<H>

Auto Trait Implementations§

§

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

§

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

§

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

§

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

§

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

§

impl<H> UnsafeUnpin for BuzHash<H>
where H: UnsafeUnpin,

§

impl<H> UnwindSafe for BuzHash<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.