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.
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.
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 neon 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 neon is unavailable in the current environment, then None is
returned.
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 neon 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>
Execute a search using neon vectors and routines.
§Panics
When haystack.len() is less than Finder::min_haystack_len.
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.