Implement ExactSizeIterator for Chain

This commit is contained in:
David Tolnay 2019-11-17 14:32:07 -08:00
parent a2caba0748
commit 7c8064f6a6
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82

View File

@ -26,6 +26,11 @@ impl<'a> Iterator for Chain<'a> {
Buffered { rest } => rest.next(),
}
}
fn size_hint(&self) -> (usize, Option<usize>) {
let len = self.len();
(len, Some(len))
}
}
impl DoubleEndedIterator for Chain<'_> {
@ -46,3 +51,19 @@ impl DoubleEndedIterator for Chain<'_> {
}
}
}
impl ExactSizeIterator for Chain<'_> {
fn len(&self) -> usize {
match &self.state {
Linked { mut next } => {
let mut len = 0;
while let Some(cause) = next {
next = cause.source();
len += 1;
}
len
}
Buffered { rest } => rest.len(),
}
}
}