///|
// Strategy: sed-byte-prefilter
///|
priv struct PreparedPattern {
pattern : @bytere.Pattern
required : Bytes
}
///|
fn PreparedPattern::new(pattern : @bytere.Pattern) -> PreparedPattern {
{ pattern, required: pattern.record_matcher().required_literal(), }
}
///|
// Rejection never establishes a match. Text-only spaces and uncertain literals
// retain the existing capture-aware engine, including multiline semantics.
fn PreparedPattern::rejects(self : PreparedPattern, space : Space) -> Bool {
if self.required.length() < 2 {
return false
}
match space.data {
Some(bytes) => bytes.find(self.required) is None
None => false
}
}
///|
fn PreparedPattern::matches(self : PreparedPattern, space : Space) -> Bool {
!self.rejects(space) && self.pattern.is_match(space.text())
}