From 7c8064f6a6b73bcd10e708fcc0c4f20297f47b69 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 17 Nov 2019 14:32:07 -0800 Subject: [PATCH] Implement ExactSizeIterator for Chain --- src/chain.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/chain.rs b/src/chain.rs index 45b7e60..e2937cb 100644 --- a/src/chain.rs +++ b/src/chain.rs @@ -26,6 +26,11 @@ impl<'a> Iterator for Chain<'a> { Buffered { rest } => rest.next(), } } + + fn size_hint(&self) -> (usize, Option) { + 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(), + } + } +}