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]),
|
Diff ([i8; 3]),
|
||||||
Rgb (RgbColor),
|
Rgb (RgbColor),
|
||||||
Rgba (RgbaColor),
|
Rgba (RgbaColor),
|
||||||
Nop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type RgbColor = [u8; 3];
|
type RgbColor = [u8; 3];
|
||||||
|
|||||||
@ -16,7 +16,6 @@ impl Ops {
|
|||||||
let clrb = |diff: i8| cast_with_bias(diff, 8);
|
let clrb = |diff: i8| cast_with_bias(diff, 8);
|
||||||
|
|
||||||
match self {
|
match self {
|
||||||
Ops::Nop => (),
|
|
||||||
Ops::Rgb([r, g, b]) => buf.extend_from_slice(&[254, r, g, b]),
|
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::Rgba([r, g, b, a]) => buf.extend_from_slice(&[255, r, g, b, a]),
|
||||||
Ops::Index(idx) => buf.push(idx as u8),
|
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 known = [[0u8; 4]; 64];
|
||||||
let mut last = [0u8, 0, 0, 255];
|
let mut last = [0u8, 0, 0, 255];
|
||||||
let mut out = Vec::with_capacity(header.width as usize * header.height as usize);
|
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()) {
|
for mut chunk in &data.iter().chunks(header.channels.num()) {
|
||||||
let (&r, &g, &b) = chunk.next_tuple()?;
|
let (&r, &g, &b) = chunk.next_tuple()?;
|
||||||
@ -57,9 +56,9 @@ fn encode_body (header: Header, data: &[u8]) -> Option<Vec<u8>> {
|
|||||||
match cur {
|
match cur {
|
||||||
// if run is in bounds 0..62
|
// if run is in bounds 0..62
|
||||||
Ops::Run(run) if run < 62 => cur = Ops::Run(run + 1),
|
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 => {
|
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.write_encoded(&mut out);
|
||||||
cur = Ops::Run(1);
|
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)) {
|
if discriminant(&cur) == discriminant(&Ops::Run(0)) {
|
||||||
cur.write_encoded(&mut out);
|
cur.write_encoded(&mut out);
|
||||||
}
|
}
|
||||||
|
|
||||||
let hash = hash(rgba);
|
let hash = hash(rgba);
|
||||||
// INDEX -> DIFF -> LUMA -> RGB(A)
|
// INDEX -> DIFF -> LUMA -> RGB(A)
|
||||||
if known[hash] == rgba {
|
if known[hash] == rgba {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user