Avoid split_at panic in ScanLines
This commit is contained in:
parent
f4e631bce7
commit
d063119d9c
1 changed files with 18 additions and 14 deletions
|
|
@ -24,20 +24,24 @@ impl<'a> Iterator for ScanLines<'a> {
|
||||||
type Item = ScanLine<'a>;
|
type Item = ScanLine<'a>;
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
self.iter.next().map(|(len, pass, num_pixels)| {
|
let (len, pass, num_pixels) = self.iter.next()?;
|
||||||
let (data, rest) = self.raw_data.split_at(len);
|
debug_assert!(self.raw_data.len() >= len);
|
||||||
self.raw_data = rest;
|
debug_assert!(!self.has_filter || len > 1);
|
||||||
let (&filter, data) = if self.has_filter {
|
if self.raw_data.len() < len {
|
||||||
data.split_first().unwrap()
|
return None;
|
||||||
} else {
|
}
|
||||||
(&0, data)
|
let (data, rest) = self.raw_data.split_at(len);
|
||||||
};
|
self.raw_data = rest;
|
||||||
ScanLine {
|
let (&filter, data) = if self.has_filter {
|
||||||
filter,
|
data.split_first().unwrap()
|
||||||
data,
|
} else {
|
||||||
pass,
|
(&0, data)
|
||||||
num_pixels,
|
};
|
||||||
}
|
Some(ScanLine {
|
||||||
|
filter,
|
||||||
|
data,
|
||||||
|
pass,
|
||||||
|
num_pixels,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue