Struct regex_automata::meta::regex::RegexI

source ·
struct RegexI {
    strat: Arc<dyn Strategy>,
    info: RegexInfo,
}
Expand description

The internal implementation of Regex, split out so that it can be wrapped in an Arc.

Fields§

§strat: Arc<dyn Strategy>

The core matching engine.

Why is this reference counted when RegexI is already wrapped in an Arc? Well, we need to capture this in a closure to our Pool below in order to create new Cache values when needed. So since it needs to be in two places, we make it reference counted.

We make RegexI itself reference counted too so that Regex itself stays extremely small and very cheap to clone.

§info: RegexInfo

Metadata about the regexes driving the strategy. The metadata is also usually stored inside the strategy too, but we put it here as well so that we can get quick access to it (without virtual calls) before executing the regex engine. For example, we use this metadata to detect a subset of cases where we know a match is impossible, and can thus avoid calling into the strategy at all.

Since RegexInfo is stored in multiple places, it is also reference counted.

Trait Implementations§

source§

impl Debug for RegexI

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for RegexI

§

impl RefUnwindSafe for RegexI

§

impl Send for RegexI

§

impl Sync for RegexI

§

impl Unpin for RegexI

§

impl UnwindSafe for RegexI

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where 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 T
where 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, U> TryFrom<U> for T
where 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 T
where 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.