]> git.lizzy.rs Git - rust.git/blob - library/std/src/sys_common/memchr.rs
Auto merge of #96210 - nnethercote:speed-up-TokenCursor, r=petrochenkov
[rust.git] / library / std / src / sys_common / memchr.rs
1 // Original implementation taken from rust-memchr.
2 // Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
3
4 use crate::sys::memchr as sys;
5
6 #[cfg(test)]
7 mod tests;
8
9 /// A safe interface to `memchr`.
10 ///
11 /// Returns the index corresponding to the first occurrence of `needle` in
12 /// `haystack`, or `None` if one is not found.
13 ///
14 /// memchr reduces to super-optimized machine code at around an order of
15 /// magnitude faster than `haystack.iter().position(|&b| b == needle)`.
16 /// (See benchmarks.)
17 ///
18 /// # Examples
19 ///
20 /// This shows how to find the first position of a byte in a byte string.
21 ///
22 /// ```ignore (cannot-doctest-private-modules)
23 /// use memchr::memchr;
24 ///
25 /// let haystack = b"the quick brown fox";
26 /// assert_eq!(memchr(b'k', haystack), Some(8));
27 /// ```
28 #[inline]
29 pub fn memchr(needle: u8, haystack: &[u8]) -> Option<usize> {
30     sys::memchr(needle, haystack)
31 }
32
33 /// A safe interface to `memrchr`.
34 ///
35 /// Returns the index corresponding to the last occurrence of `needle` in
36 /// `haystack`, or `None` if one is not found.
37 ///
38 /// # Examples
39 ///
40 /// This shows how to find the last position of a byte in a byte string.
41 ///
42 /// ```ignore (cannot-doctest-private-modules)
43 /// use memchr::memrchr;
44 ///
45 /// let haystack = b"the quick brown fox";
46 /// assert_eq!(memrchr(b'o', haystack), Some(17));
47 /// ```
48 #[inline]
49 pub fn memrchr(needle: u8, haystack: &[u8]) -> Option<usize> {
50     sys::memrchr(needle, haystack)
51 }