Struct Finder

pub struct Finder { /* private fields */ }

An architecture independent "packed pair" finder.

This finder picks two bytes that it believes have high predictive power for indicating an overall match of a needle. At search time, it reports offsets where the needle could match based on whether the pair of bytes it chose match.

This is architecture independent because it utilizes memchr to find the occurrence of one of the bytes in the pair, and then checks whether the second byte matches. If it does, in the case of Finder::find_prefilter, the location at which the needle could match is returned.

It is generally preferred to use architecture specific routines for a "packed pair" prefilter, but this can be a useful fallback when the architecture independent routines are unavailable.

Implementations

impl Finder

fn new(needle: &[u8]) -> Option<Finder>

Create a new prefilter that reports possible locations where the given needle matches.

fn with_pair(needle: &[u8], pair: Pair) -> Option<Finder>

Create a new prefilter using the pair given.

If the prefilter could not be constructed, then None is returned.

This constructor permits callers to control precisely which pair of bytes is used as a predicate.

fn find_prefilter(&self, haystack: &[u8]) -> Option<usize>

Run this finder on the given haystack as a prefilter.

If a candidate match is found, then an offset where the needle could begin in the haystack is returned.

fn pair(&self) -> &Pair

Returns the pair of offsets (into the needle) used to check as a predicate before confirming whether a needle exists at a particular position.

Trait Implementations

impl Clone for Finder

fn clone(&self) -> Self

impl Copy for Finder

impl Debug for Finder

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

Auto Trait Implementations

impl Freeze for Finder

impl RefUnwindSafe for Finder

impl Send for Finder

impl Sync for Finder

impl Unpin for Finder

impl UnsafeUnpin for Finder

impl UnwindSafe for Finder

Blanket Implementations

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

fn type_id(&self) -> TypeId

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

fn borrow(&self) -> &T

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

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

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

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

impl<T> From<T> for Finder

fn from(t: T) -> T

Returns the argument unchanged.

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

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

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

fn into(self) -> U

Calls U::from(self).

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

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

type Error = never;
fn try_from(value: U) -> Result<T, never>

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

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