Struct FinderRev
pub struct FinderRev(/* private field */);
A reverse substring searcher using the Rabin-Karp algorithm.
Implementations
impl FinderRev
fn new(needle: &[u8]) -> FinderRevCreate 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
needlein thehaystackgiven. If no such occurrence exists, thenNoneis returned.The
needleprovided 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 ishaystack.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
>= startand<= end. The pointer returned is only ever equivalent toendwhen 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
startandendbelow refer to both pairs of pointers given to this routine. That is, the conditions apply to bothhstart/hendandnstart/nend.- Both
startandendmust be valid for reads. - Both
startandendmust point to an initialized value. - Both
startandendmust 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
startandendmust be derived from a pointer to the same object. - The distance between
startandendmust not overflowisize. - The distance being in bounds must not rely on "wrapping around" the address space.
- It must be the case that
start <= end.
- Both
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) -> TReturns the argument unchanged.
impl<T> ToOwned for FinderRev
where
T: Clone,
type Owned = T;fn to_owned(&self) -> Tfn clone_into(&self, target: &mut T)
impl<T, U> Into<U> for FinderRev
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses 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>