pub struct Finder {
sse2: Finder<__m128i>,
avx2: Finder<__m256i>,
}
Expand description
A “packed pair” finder that uses 256-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.
Fields§
§sse2: Finder<__m128i>
§avx2: Finder<__m256i>
Implementations§
source§impl Finder
impl Finder
sourcepub fn new(needle: &[u8]) -> Option<Finder>
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 AVX2 is unavailable in the current environment or if a Pair
could not be constructed from the needle given, then None
is
returned.
sourcepub fn with_pair(needle: &[u8], pair: Pair) -> Option<Finder>
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 AVX2 is unavailable in the current environment, then None
is
returned.
sourceunsafe fn with_pair_impl(needle: &[u8], pair: Pair) -> Finder
Available on target features sse2
and avx2
only.
unsafe fn with_pair_impl(needle: &[u8], pair: Pair) -> Finder
sse2
and avx2
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 both SSE2 and AVX2 are available.
sourcepub fn is_available() -> bool
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.
sourcepub fn find(&self, haystack: &[u8], needle: &[u8]) -> Option<usize>
pub fn find(&self, haystack: &[u8], needle: &[u8]) -> Option<usize>
Execute a search using AVX2 vectors and routines.
§Panics
When haystack.len()
is less than Finder::min_haystack_len
.
sourcepub fn find_prefilter(&self, haystack: &[u8]) -> Option<usize>
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
.
sourceunsafe fn find_impl(&self, haystack: &[u8], needle: &[u8]) -> Option<usize>
Available on target features sse2
and avx2
only.
unsafe fn find_impl(&self, haystack: &[u8], needle: &[u8]) -> Option<usize>
sse2
and avx2
only.Execute a search using AVX2 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
and avx2
routines.)
sourceunsafe fn find_prefilter_impl(&self, haystack: &[u8]) -> Option<usize>
Available on target features sse2
and avx2
only.
unsafe fn find_prefilter_impl(&self, haystack: &[u8]) -> Option<usize>
sse2
and avx2
only.Execute a prefilter search using AVX2 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
and avx2
routines.)
sourcepub fn pair(&self) -> &Pair
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.
sourcepub fn min_haystack_len(&self) -> usize
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.