pub struct Finder(/* private fields */);
Expand description

A “packed pair” finder that uses 128-bit vector operations.

This finder picks two bytes that it believes have high predictive power for indicating an overall match of a needle. Depending on whether Finder::find or Finder::find_prefilter is used, it reports offsets where the needle matches or could match. In the prefilter case, candidates are reported whenever the Pair of bytes given matches.

Implementations§

source§

impl Finder

A “packed pair” finder that uses 128-bit vector operations.

This finder picks two bytes that it believes have high predictive power for indicating an overall match of a needle. Depending on whether Finder::find or Finder::find_prefilter is used, it reports offsets where the needle matches or could match. In the prefilter case, candidates are reported whenever the Pair of bytes given matches.

source

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

Create a new pair searcher. The searcher returned can either report exact matches of needle or act as a prefilter and report candidate positions of needle.

If neon is unavailable in the current environment or if a Pair could not be constructed from the needle given, then None is returned.

source

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

Create a new “packed pair” finder using the pair of bytes given.

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

If neon is unavailable in the current environment, then None is returned.

source

pub fn is_available() -> bool

Returns true when this implementation is available in the current environment.

When this is true, it is guaranteed that Finder::with_pair will return a Some value. Similarly, when it is false, it is guaranteed that Finder::with_pair will return a None value. Notice that this does not guarantee that Finder::new will return a Finder. Namely, even when Finder::is_available is true, it is not guaranteed that a valid Pair can be found from the needle given.

Note also that for the lifetime of a single program, if this returns true then it will always return true.

source

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

Execute a search using neon vectors and routines.

Panics

When haystack.len() is less than Finder::min_haystack_len.

source

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

Execute a search using neon vectors and routines.

Panics

When haystack.len() is less than Finder::min_haystack_len.

source

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

source

pub fn min_haystack_len(&self) -> usize

Returns the minimum haystack length that this Finder can search.

Using a haystack with length smaller than this in a search will result in a panic. The reason for this restriction is that this finder is meant to be a low-level component that is part of a larger substring strategy. In that sense, it avoids trying to handle all cases and instead only handles the cases that it can handle very well.

Trait Implementations§

source§

impl Clone for Finder

source§

fn clone(&self) -> Finder

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 Debug for Finder

source§

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

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

impl Copy for Finder

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. 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 Twhere 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 Twhere T: Clone,

§

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 Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.