Skip to content

Commit f7ff34f

Browse files
committed
searcher: simplify 'replace_bytes' routine
I did this in the course of trying to optimize it. I don't believe I made it any faster, but the refactoring led to code that I think is more readable.
1 parent b9de003 commit f7ff34f

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

crates/searcher/src/line_buffer.rs

+14-12
Original file line numberDiff line numberDiff line change
@@ -524,24 +524,26 @@ impl LineBuffer {
524524

525525
/// Replaces `src` with `replacement` in bytes, and return the offset of the
526526
/// first replacement, if one exists.
527-
fn replace_bytes(bytes: &mut [u8], src: u8, replacement: u8) -> Option<usize> {
527+
fn replace_bytes(
528+
mut bytes: &mut [u8],
529+
src: u8,
530+
replacement: u8,
531+
) -> Option<usize> {
528532
if src == replacement {
529533
return None;
530534
}
531-
let mut first_pos = None;
532-
let mut pos = 0;
533-
while let Some(i) = bytes[pos..].find_byte(src).map(|i| pos + i) {
534-
if first_pos.is_none() {
535-
first_pos = Some(i);
536-
}
535+
let first_pos = bytes.find_byte(src)?;
536+
bytes[first_pos] = replacement;
537+
bytes = &mut bytes[first_pos + 1..];
538+
while let Some(i) = bytes.find_byte(src) {
537539
bytes[i] = replacement;
538-
pos = i + 1;
539-
while bytes.get(pos) == Some(&src) {
540-
bytes[pos] = replacement;
541-
pos += 1;
540+
bytes = &mut bytes[i + 1..];
541+
while bytes.get(0) == Some(&src) {
542+
bytes[0] = replacement;
543+
bytes = &mut bytes[1..];
542544
}
543545
}
544-
first_pos
546+
Some(first_pos)
545547
}
546548

547549
#[cfg(test)]

0 commit comments

Comments
 (0)