refactor: remove nop from ops list
This commit is contained in:
parent
1e405bff30
commit
c63d2bdcba
@ -61,7 +61,6 @@ pub enum Ops {
|
||||
Diff ([i8; 3]),
|
||||
Rgb (RgbColor),
|
||||
Rgba (RgbaColor),
|
||||
Nop
|
||||
}
|
||||
|
||||
type RgbColor = [u8; 3];
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user