25% speed improvement in filter mode 2 by using iter instead of for

This commit is contained in:
Joshua Holmer 2016-05-02 14:49:30 -04:00
parent c0fddfe4e6
commit 32c35596ea
3 changed files with 12 additions and 7 deletions

View file

@ -1,5 +1,6 @@
**Version 0.6.1 (unreleased)**
- Minor compression improvement on interlaced images
- Performance optimizations
**Version 0.6.0**
- Fix issue where output directory would not be created if it did not exist

View file

@ -21,6 +21,9 @@ name = "oxipng"
path = "src/main.rs"
doc = false
[profile.release]
debug = true
[dependencies]
bit-vec = "^0.4.2"
byteorder = "^0.5.0"

View file

@ -1081,13 +1081,14 @@ fn filter_line(filter: u8, bpp: usize, data: &[u8], last_line: &[u8]) -> Vec<u8>
}
}
2 => {
for (i, byte) in data.iter().enumerate() {
if last_line.is_empty() {
filtered.push(*byte);
} else {
filtered.push(byte.wrapping_sub(last_line[i]));
};
}
if last_line.is_empty() {
filtered.extend_from_slice(data);
} else {
filtered.extend_from_slice(&data.iter()
.zip(last_line.iter())
.map(|(cur, last)| cur.wrapping_sub(*last))
.collect::<Vec<u8>>());
};
}
3 => {
for (i, byte) in data.iter().enumerate() {