Struct regex_automata::hybrid::dfa::OverlappingState
source · 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
impl OverlappingState
sourcepub fn start() -> OverlappingState
pub fn start() -> OverlappingState
Create a new overlapping state that begins at the start state of any automaton.
Trait Implementations§
source§impl Clone for OverlappingState
impl Clone for OverlappingState
source§fn clone(&self) -> OverlappingState
fn clone(&self) -> OverlappingState
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for OverlappingState
impl Debug for OverlappingState
source§impl PartialEq for OverlappingState
impl PartialEq for OverlappingState
impl Eq for OverlappingState
impl StructuralPartialEq for OverlappingState
Auto Trait Implementations§
impl Freeze for OverlappingState
impl RefUnwindSafe for OverlappingState
impl Send for OverlappingState
impl Sync for OverlappingState
impl Unpin for OverlappingState
impl UnwindSafe for OverlappingState
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)