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

source ·
pub struct Finder(Finder<__m128i>);
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.

Tuple Fields§

§0: Finder<__m128i>

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

unsafe fn with_pair_impl(needle: &[u8], pair: Pair) -> Finder

Available with target feature sse2 only.

Create a new Finder specific to SSE2 vectors and routines.

§Safety

Same as the safety for packedpair::Finder::new, and callers must also ensure that SSE2 is available.

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

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

Available with target feature sse2 only.

Execute a search using SSE2 vectors and routines.

§Panics

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

§Safety

(The target feature safety obligation is automatically fulfilled by virtue of being a method on Finder, which can only be constructed when it is safe to call sse2 routines.)

source

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

Available with target feature sse2 only.

Execute a prefilter search using SSE2 vectors and routines.

§Panics

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

§Safety

(The target feature safety obligation is automatically fulfilled by virtue of being a method on Finder, which can only be constructed when it is safe to call sse2 routines.)

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> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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.