refactor: remove nop from ops list

This commit is contained in:
YK 2024-07-11 18:55:44 +03:00
parent 1e405bff30
commit c63d2bdcba
2 changed files with 3 additions and 6 deletions

View File

@ -61,7 +61,6 @@ pub enum Ops {
Diff ([i8; 3]),
Rgb (RgbColor),
Rgba (RgbaColor),
Nop
}
type RgbColor = [u8; 3];

View File

@ -16,7 +16,6 @@ impl Ops {
let clrb = |diff: i8| cast_with_bias(diff, 8);
match self {
Ops::Nop => (),
Ops::Rgb([r, g, b]) => buf.extend_from_slice(&[254, r, g, b]),
Ops::Rgba([r, g, b, a]) => buf.extend_from_slice(&[255, r, g, b, a]),
Ops::Index(idx) => buf.push(idx as u8),
@ -44,7 +43,7 @@ fn encode_body (header: Header, data: &[u8]) -> Option<Vec<u8>> {
let mut known = [[0u8; 4]; 64];
let mut last = [0u8, 0, 0, 255];
let mut out = Vec::with_capacity(header.width as usize * header.height as usize);
let mut cur = Ops::Nop;
let mut cur = Ops::Rgba([0, 0, 0, 255]);
for mut chunk in &data.iter().chunks(header.channels.num()) {
let (&r, &g, &b) = chunk.next_tuple()?;
@ -57,9 +56,9 @@ fn encode_body (header: Header, data: &[u8]) -> Option<Vec<u8>> {
match cur {
// if run is in bounds 0..62
Ops::Run(run) if run < 62 => cur = Ops::Run(run + 1),
// if run is full, commit it to out vec, and start a new one
// if run is full, write it, and start a new one
Ops::Run(run) if run >= 62 => {
cur = Ops::Run(62); // clamp for safety;
cur = Ops::Run(62); // clamp for safety, or return None? @Q
cur.write_encoded(&mut out);
cur = Ops::Run(1);
},
@ -71,7 +70,6 @@ fn encode_body (header: Header, data: &[u8]) -> Option<Vec<u8>> {
if discriminant(&cur) == discriminant(&Ops::Run(0)) {
cur.write_encoded(&mut out);
}
let hash = hash(rgba);
// INDEX -> DIFF -> LUMA -> RGB(A)
if known[hash] == rgba {