(s: &[u8], needle: &[u8], from: usize)
| 159 | i == 0 || !is_word(s[i - 1]) |
| 160 | } |
| 161 | |
| 162 | fn find_bytes(s: &[u8], needle: &[u8], from: usize) -> Option<usize> { |
| 163 | if needle.is_empty() || s.len() < needle.len() { |
| 164 | return None; |
| 165 | } |
| 166 | let mut i = from; |
| 167 | while i + needle.len() <= s.len() { |
| 168 | // memchr on the first byte keeps this fast on 20KB+ files. |
| 169 | match s[i..s.len() - needle.len() + 1].iter().position(|&b| b == needle[0]) { |
| 170 | None => return None, |
| 171 | Some(off) => { |
| 172 | i += off; |
| 173 | if &s[i..i + needle.len()] == needle { |
| 174 | return Some(i); |
| 175 | } |
| 176 | i += 1; |
| 177 | } |
| 178 | } |
| 179 | } |
| 180 | None |
| 181 | } |
| 182 | |
| 183 | fn contains_bytes(s: &[u8], needle: &[u8]) -> bool { |
no test coverage detected