mirror of
https://github.com/sharkdp/hexyl.git
synced 2026-10-26 20:16:31 +00:00
Optimize line check when squeezing zero bytes
This commit is contained in:
1 parent
1502419ad4
commit
d5982c0eb0
1 file changed
+19
-1
+19
-1
@@ -469,6 +469,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
|
||||
let mut is_empty = true;
|
||||
let mut will_delete = false;
|
||||
let mut leftover = None;
|
||||
let mut all_zero = true;
|
||||
|
||||
let mut buf = BufReader::new(reader);
|
||||
|
||||
@@ -486,7 +487,20 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
|
||||
}
|
||||
is_empty = false;
|
||||
|
||||
if matches!(self.squeezer, Squeezer::Print | Squeezer::Delete) {
|
||||
if self.squeezer == Squeezer::Delete && self.squeeze_byte == 0 {
|
||||
for w in self.line_buf.chunks_exact(std::mem::size_of::<usize>()) {
|
||||
if usize::from_ne_bytes(w.try_into().unwrap()) != 0 {
|
||||
all_zero = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if all_zero {
|
||||
self.idx += 8 * self.panels;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if all_zero && matches!(self.squeezer, Squeezer::Print | Squeezer::Delete) {
|
||||
if self.line_buf[0] == self.squeeze_byte
|
||||
&& self.line_buf.windows(2).all(|w| w[0] == w[1])
|
||||
{
|
||||
@@ -520,6 +534,10 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
|
||||
self.squeezer = Squeezer::Print;
|
||||
self.squeeze_byte = self.line_buf[0];
|
||||
};
|
||||
|
||||
if !all_zero {
|
||||
all_zero = true;
|
||||
}
|
||||
}
|
||||
|
||||
// special ending
|
||||
|
||||
Reference in new issue
Block a user