pub struct OverlappingState {
    pub(crate) mat: Option<HalfMatch>,
    pub(crate) id: Option<LazyStateID>,
    pub(crate) at: usize,
    pub(crate) next_match_index: Option<usize>,
    pub(crate) rev_eoi: bool,
}
Expand description

Represents the current state of an overlapping search.

This is used for overlapping searches since they need to know something about the previous search. For example, when multiple patterns match at the same position, this state tracks the last reported pattern so that the next search knows whether to report another matching pattern or continue with the search at the next position. Additionally, it also tracks which state the last search call terminated in.

This type provides little introspection capabilities. The only thing a caller can do is construct it and pass it around to permit search routines to use it to track state, and also ask whether a match has been found.

Callers should always provide a fresh state constructed via OverlappingState::start when starting a new search. Reusing state from a previous search may result in incorrect results.

Fields§

§mat: Option<HalfMatch>

The match reported by the most recent overlapping search to use this state.

If a search does not find any matches, then it is expected to clear this value.

§id: Option<LazyStateID>

The state ID of the state at which the search was in when the call terminated. When this is a match state, last_match must be set to a non-None value.

A None value indicates the start state of the corresponding automaton. We cannot use the actual ID, since any one automaton may have many start states, and which one is in use depends on several search-time factors.

§at: usize

The position of the search.

When id is None (i.e., we are starting a search), this is set to the beginning of the search as given by the caller regardless of its current value. Subsequent calls to an overlapping search pick up at this offset.

§next_match_index: Option<usize>

The index into the matching patterns of the next match to report if the current state is a match state. Note that this may be 1 greater than the total number of matches to report for the current match state. (In which case, no more matches should be reported at the current position and the search should advance to the next position.)

§rev_eoi: bool

This is set to true when a reverse overlapping search has entered its EOI transitions.

This isn’t used in a forward search because it knows to stop once the position exceeds the end of the search range. In a reverse search, since we use unsigned offsets, we don’t “know” once we’ve gone past 0. So the only way to detect it is with this extra flag. The reverse overlapping search knows to terminate specifically after it has reported all matches after following the EOI transition.

Implementations§

source§

impl OverlappingState

source

pub fn start() -> OverlappingState

Create a new overlapping state that begins at the start state of any automaton.

source

pub fn get_match(&self) -> Option<HalfMatch>

Return the match result of the most recent search to execute with this state.

A searches will clear this result automatically, such that if no match is found, this will correctly report None.

Trait Implementations§

source§

impl Clone for OverlappingState

source§

fn clone(&self) -> OverlappingState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for OverlappingState

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<OverlappingState> for OverlappingState

source§

fn eq(&self, other: &OverlappingState) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Eq for OverlappingState

source§

impl StructuralEq for OverlappingState

source§

impl StructuralPartialEq for OverlappingState

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.