chore: fix Clippy lint, very slightly optimize optimize_alpha function
This commit is contained in:
parent
82cae58794
commit
2a3aa83928
1 changed files with 19 additions and 2 deletions
|
|
@ -163,11 +163,28 @@ impl RowFilter {
|
||||||
.unwrap_or(i),
|
.unwrap_or(i),
|
||||||
_ => i - 1,
|
_ => i - 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// These assertions help eliminate a few bounds checks in the slice accesses below
|
||||||
|
assert!(prev < pixels.len());
|
||||||
|
assert!(i < prev_pixels.len());
|
||||||
|
|
||||||
match self {
|
match self {
|
||||||
Self::None => unreachable!(),
|
Self::None => unreachable!(),
|
||||||
Self::Sub => {
|
Self::Sub => {
|
||||||
for j in 0..color_bytes {
|
// The code below is roughly equivalent to pixels[i][0..color_bytes].copy_from_slice(&pixels[prev][0..color_bytes]),
|
||||||
pixels[i][j] = pixels[prev][j];
|
// if such a thing was possible to do without violating Rust aliasing rules. See:
|
||||||
|
// https://users.rust-lang.org/t/problem-borrowing-two-elements-of-vec-mutably/21446/2
|
||||||
|
|
||||||
|
if prev < i {
|
||||||
|
let (pixels_head, pixels_tail) = pixels.split_at_mut(prev + 1);
|
||||||
|
pixels_tail[i - prev - 1][0..color_bytes]
|
||||||
|
.copy_from_slice(&pixels_head[prev][0..color_bytes]);
|
||||||
|
} else if prev > i {
|
||||||
|
let (pixels_head, pixels_tail) = pixels.split_at_mut(i + 1);
|
||||||
|
pixels_head[i][0..color_bytes]
|
||||||
|
.copy_from_slice(&pixels_tail[prev - i - 1][0..color_bytes]);
|
||||||
|
} else {
|
||||||
|
// If prev == i, we'd be copying the pixels onto themselves, which is useless
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Self::Up => {
|
Self::Up => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue