mirror of
https://github.com/sharkdp/hexyl.git
synced 2026-10-30 09:05:54 +00:00
Use repeated byte optimization on nonzero bytes
This commit is contained in:
1 parent
5f82942f98
commit
6b7cfefec6
1 file changed
+4
-21
+4
-21
@@ -225,7 +225,7 @@ pub struct Printer<'a, Writer: Write> {
|
|||||||
display_offset: u64,
|
display_offset: u64,
|
||||||
/// The number of panels to draw.
|
/// The number of panels to draw.
|
||||||
panels: u64,
|
panels: u64,
|
||||||
squeeze_byte: u8,
|
squeeze_byte: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Writer: Write> Printer<'a, Writer> {
|
impl<'a, Writer: Write> Printer<'a, Writer> {
|
||||||
@@ -480,7 +480,6 @@ 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);
|
||||||
|
|
||||||
@@ -505,23 +504,11 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
|
|||||||
}
|
}
|
||||||
is_empty = false;
|
is_empty = false;
|
||||||
|
|
||||||
if self.squeezer == Squeezer::Delete && self.squeeze_byte == 0 {
|
if matches!(self.squeezer, Squeezer::Print | Squeezer::Delete) {
|
||||||
if self
|
if self
|
||||||
.line_buf
|
.line_buf
|
||||||
.chunks_exact(std::mem::size_of::<usize>())
|
.chunks_exact(std::mem::size_of::<usize>())
|
||||||
.all(|w| usize::from_ne_bytes(w.try_into().unwrap()) == 0)
|
.all(|w| usize::from_ne_bytes(w.try_into().unwrap()) == self.squeeze_byte)
|
||||||
{
|
|
||||||
self.idx += 8 * self.panels;
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
self.squeezer = Squeezer::Ignore;
|
|
||||||
all_zero = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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])
|
|
||||||
{
|
{
|
||||||
if self.squeezer == Squeezer::Print {
|
if self.squeezer == Squeezer::Print {
|
||||||
will_delete = true;
|
will_delete = true;
|
||||||
@@ -551,12 +538,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
|
|||||||
&& self.line_buf.windows(2).all(|w| w[0] == w[1])
|
&& self.line_buf.windows(2).all(|w| w[0] == w[1])
|
||||||
{
|
{
|
||||||
self.squeezer = Squeezer::Print;
|
self.squeezer = Squeezer::Print;
|
||||||
self.squeeze_byte = self.line_buf[0];
|
self.squeeze_byte = (self.line_buf[0] as usize) * (usize::MAX / 255);
|
||||||
};
|
};
|
||||||
|
|
||||||
if !all_zero {
|
|
||||||
all_zero = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// special ending
|
// special ending
|
||||||
|
|||||||
Reference in new issue
Block a user