diff options
Diffstat (limited to 'grep-searcher/src/lines.rs')
-rw-r--r-- | grep-searcher/src/lines.rs | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/grep-searcher/src/lines.rs b/grep-searcher/src/lines.rs index ed225a42..a32f6b72 100644 --- a/grep-searcher/src/lines.rs +++ b/grep-searcher/src/lines.rs @@ -2,8 +2,8 @@ A collection of routines for performing operations on lines. */ +use bstr::B; use bytecount; -use memchr::{memchr, memrchr}; use grep_matcher::{LineTerminator, Match}; /// An iterator over lines in a particular slice of bytes. @@ -85,7 +85,7 @@ impl LineStep { #[inline(always)] fn next_impl(&mut self, mut bytes: &[u8]) -> Option<(usize, usize)> { bytes = &bytes[..self.end]; - match memchr(self.line_term, &bytes[self.pos..]) { + match B(&bytes[self.pos..]).find_byte(self.line_term) { None => { if self.pos < bytes.len() { let m = (self.pos, bytes.len()); @@ -135,14 +135,16 @@ pub fn locate( line_term: u8, range: Match, ) -> Match { - let line_start = memrchr(line_term, &bytes[0..range.start()]) + let line_start = B(&bytes[..range.start()]) + .rfind_byte(line_term) .map_or(0, |i| i + 1); let line_end = if range.end() > line_start && bytes[range.end() - 1] == line_term { range.end() } else { - memchr(line_term, &bytes[range.end()..]) - .map_or(bytes.len(), |i| range.end() + i + 1) + B(&bytes[range.end()..]) + .find_byte(line_term) + .map_or(bytes.len(), |i| range.end() + i + 1) }; Match::new(line_start, line_end) } @@ -180,7 +182,7 @@ fn preceding_by_pos( pos -= 1; } loop { - match memrchr(line_term, &bytes[..pos]) { + match B(&bytes[..pos]).rfind_byte(line_term) { None => { return 0; } |