Struct memchr::arch::x86_64::sse2::packedpair::Finder

source ·
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

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 SSE2 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 SSE2 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 SSE2 vectors and routines.

§Panics

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

source

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

§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§

§

impl Freeze for Finder

§

impl RefUnwindSafe for Finder

§

impl Send for Finder

§

impl Sync for Finder

§

impl Unpin for Finder

§

impl UnwindSafe for Finder

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

§

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

§

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.