Struct regex_automata::util::prefilter::teddy::Teddy

source ·
pub(crate) struct Teddy {
    searcher: Searcher,
    anchored_ac: DFA,
    minimum_len: usize,
}

Fields§

§searcher: Searcher

The actual Teddy searcher.

Technically, it’s possible that Teddy doesn’t actually get used, since Teddy does require its haystack to at least be of a certain size (usually around the size of whatever vector is being used, so ~16 or ~32 bytes). For haystacks shorter than that, the implementation currently uses Rabin-Karp.

§anchored_ac: DFA

When running an anchored search, the packed searcher can’t handle it so we defer to Aho-Corasick itself. Kind of sad, but changing the packed searchers to support anchored search would be difficult at worst and annoying at best. Since packed searchers only apply to small numbers of literals, we content ourselves that this is not much of an added cost. (That packed searchers only work with a small number of literals is also why we use a DFA here. Otherwise, the memory usage of a DFA would likely be unacceptable.)

§minimum_len: usize

The length of the smallest literal we look for.

We use this as a heuristic to figure out whether this will be “fast” or not. Generally, the longer the better, because longer needles are more discriminating and thus reduce false positive rate.

Implementations§

source§

impl Teddy

source

pub(crate) fn new<B: AsRef<[u8]>>( kind: MatchKind, needles: &[B], ) -> Option<Teddy>

Trait Implementations§

source§

impl Clone for Teddy

source§

fn clone(&self) -> Teddy

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 Teddy

source§

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

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

impl PrefilterI for Teddy

source§

fn find(&self, haystack: &[u8], span: Span) -> Option<Span>

Run this prefilter on haystack[span.start..end] and return a matching span if one exists. Read more
source§

fn prefix(&self, haystack: &[u8], span: Span) -> Option<Span>

Returns the span of a prefix of haystack[span.start..span.end] if the prefilter matches. Read more
source§

fn memory_usage(&self) -> usize

Returns the heap memory, in bytes, used by the underlying prefilter.
source§

fn is_fast(&self) -> bool

Implementations might return true here if they believe themselves to be “fast.” See Prefilter::is_fast for more details.

Auto Trait Implementations§

§

impl Freeze for Teddy

§

impl RefUnwindSafe for Teddy

§

impl Send for Teddy

§

impl Sync for Teddy

§

impl Unpin for Teddy

§

impl UnwindSafe for Teddy

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> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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> ToOwned for T
where T: Clone,

source§

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 T
where U: Into<T>,

source§

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>,

source§

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.