Struct FinderRev

pub struct FinderRev(/* private field */);

A reverse substring searcher using the Rabin-Karp algorithm.

Implementations

impl FinderRev

fn new(needle: &[u8]) -> FinderRev

Create a new Rabin-Karp reverse searcher for the given needle.

fn rfind(&self, haystack: &[u8], needle: &[u8]) -> Option<usize>

Return the last occurrence of the needle in the haystack given. If no such occurrence exists, then None is returned.

The needle provided must match the needle given to this finder at construction time.

The maximum value this can return is haystack.len(), which can only occur when the needle and haystack both have length zero. Otherwise, for non-empty haystacks, the maximum value is haystack.len() - 1.

unsafe fn rfind_raw(&self, hstart: *const u8, hend: *const u8, nstart: *const u8, nend: *const u8) -> Option<*const u8>

Like rfind, but accepts and returns raw pointers.

When a match is found, the pointer returned is guaranteed to be >= start and <= end. The pointer returned is only ever equivalent to end when both the needle and haystack are empty. (That is, the empty string matches the empty string.)

This routine is useful if you're already using raw pointers and would like to avoid converting back to a slice before executing a search.

Safety

Note that start and end below refer to both pairs of pointers given to this routine. That is, the conditions apply to both hstart/hend and nstart/nend.

  • Both start and end must be valid for reads.
  • Both start and end must point to an initialized value.
  • Both start and end must point to the same allocated object and must either be in bounds or at most one byte past the end of the allocated object.
  • Both start and end must be derived from a pointer to the same object.
  • The distance between start and end must not overflow isize.
  • The distance being in bounds must not rely on "wrapping around" the address space.
  • It must be the case that start <= end.

Trait Implementations

impl Clone for FinderRev

fn clone(&self) -> FinderRev

impl Debug for FinderRev

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

Auto Trait Implementations

impl Freeze for FinderRev

impl RefUnwindSafe for FinderRev

impl Send for FinderRev

impl Sync for FinderRev

impl Unpin for FinderRev

impl UnsafeUnpin for FinderRev

impl UnwindSafe for FinderRev

Blanket Implementations

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

fn type_id(&self) -> TypeId

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

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for FinderRev where T: ?Sized,

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

impl<T> CloneToUninit for FinderRev where T: Clone,

unsafe fn clone_to_uninit(&self, dest: *mut u8)

impl<T> From<T> for FinderRev

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for FinderRev where T: Clone,

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

impl<T, U> Into<U> for FinderRev where U: From<T>,

fn into(self) -> U

Calls U::from(self).

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

impl<T, U> TryFrom<U> for FinderRev where U: Into<T>,

type Error = never;
fn try_from(value: U) -> Result<T, never>

impl<T, U> TryInto<U> for FinderRev where U: TryFrom<T>,

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