Struct Config
struct Config { ... }
The configuration used for building a PikeVM.
A PikeVM configuration is a simple data object that is typically used with
Builder::configure. It can be cheaply cloned.
A default configuration can be created either with Config::new, or
perhaps more conveniently, with PikeVM::config.
Implementations
impl Config
fn new() -> ConfigReturn a new default PikeVM configuration.
fn match_kind(self: Self, kind: MatchKind) -> ConfigSet the desired match semantics.
The default is
MatchKind::LeftmostFirst, which corresponds to the match semantics of Perl-like regex engines. That is, when multiple patterns would match at the same leftmost position, the pattern that appears first in the concrete syntax is chosen.Currently, the only other kind of match semantics supported is
MatchKind::All. This corresponds to "classical DFA" construction where all possible matches are visited in the NFA by thePikeVM.Typically,
Allis used when one wants to execute an overlapping search andLeftmostFirstotherwise. In particular, it rarely makes sense to useAllwith the various "leftmost" find routines, since the leftmost routines depend on theLeftmostFirstautomata construction strategy. Specifically,LeftmostFirstresults in thePikeVMsimulating dead states as a way to terminate the search and report a match.LeftmostFirstalso supports non-greedy matches using this strategy where asAlldoes not.fn prefilter(self: Self, pre: Option<Prefilter>) -> ConfigSet a prefilter to be used whenever a start state is entered.
A
Prefilterin this context is meant to accelerate searches by looking for literal prefixes that every match for the corresponding pattern (or patterns) must start with. Once a prefilter produces a match, the underlying search routine continues on to try and confirm the match.Be warned that setting a prefilter does not guarantee that the search will be faster. While it's usually a good bet, if the prefilter produces a lot of false positive candidates (i.e., positions matched by the prefilter but not by the regex), then the overall result can be slower than if you had just executed the regex engine without any prefilters.
By default no prefilter is set.
Example
use ; let pre = new; let re = builder .configure .build?; let mut cache = re.create_cache; let input = new; assert_eq!; # Ok::Be warned though that an incorrect prefilter can lead to incorrect results!
use ; let pre = new; let re = builder .configure .build?; let mut cache = re.create_cache; let input = new; // No match reported even though there clearly is one! assert_eq!; # Ok::fn get_match_kind(self: &Self) -> MatchKindReturns the match semantics set in this configuration.
fn get_prefilter(self: &Self) -> Option<&Prefilter>Returns the prefilter set in this configuration, if one at all.
impl Clone for Config
fn clone(self: &Self) -> Config
impl Debug for Config
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl Default for Config
fn default() -> Config
impl Freeze for Config
impl RefUnwindSafe for Config
impl Send for Config
impl Sync for Config
impl Unpin for Config
impl UnsafeUnpin for Config
impl UnwindSafe for Config
impl<T> Any for Config
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for Config
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for Config
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for Config
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for Config
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for Config
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for Config
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for Config
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for Config
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>