mirror of
https://github.com/sharkdp/hexyl.git
synced 2026-10-30 09:05:54 +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 is_empty = true;
|
||||||
let mut will_delete = false;
|
let mut will_delete = false;
|
||||||
let mut leftover = None;
|
let mut leftover = None;
|
||||||
|
let mut all_zero = true;
|
||||||
|
|
||||||
let mut buf = BufReader::new(reader);
|
let mut buf = BufReader::new(reader);
|
||||||
|
|
||||||
@@ -486,7 +487,20 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
|
|||||||
}
|
}
|
||||||
is_empty = false;
|
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
|
if self.line_buf[0] == self.squeeze_byte
|
||||||
&& self.line_buf.windows(2).all(|w| w[0] == w[1])
|
&& 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.squeezer = Squeezer::Print;
|
||||||
self.squeeze_byte = self.line_buf[0];
|
self.squeeze_byte = self.line_buf[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if !all_zero {
|
||||||
|
all_zero = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// special ending
|
// special ending
|
||||||
|
|||||||
Reference in new issue
Block a user