pub struct Finder {
pair: Pair,
byte1: u8,
byte2: u8,
}
Expand description
An architecture independent “packed pair” finder.
This finder picks two bytes that it believes have high predictive power for indicating an overall match of a needle. At search time, it reports offsets where the needle could match based on whether the pair of bytes it chose match.
This is architecture independent because it utilizes memchr
to find the
occurrence of one of the bytes in the pair, and then checks whether the
second byte matches. If it does, in the case of Finder::find_prefilter
,
the location at which the needle could match is returned.
It is generally preferred to use architecture specific routines for a “packed pair” prefilter, but this can be a useful fallback when the architecture independent routines are unavailable.
Fields§
§pair: Pair
§byte1: u8
§byte2: u8
Implementations§
source§impl Finder
impl Finder
sourcepub fn new(needle: &[u8]) -> Option<Finder>
pub fn new(needle: &[u8]) -> Option<Finder>
Create a new prefilter that reports possible locations where the given needle matches.
sourcepub fn with_pair(needle: &[u8], pair: Pair) -> Option<Finder>
pub fn with_pair(needle: &[u8], pair: Pair) -> Option<Finder>
Create a new prefilter using the pair given.
If the prefilter could not be constructed, then None
is returned.
This constructor permits callers to control precisely which pair of bytes is used as a predicate.
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.