backdrop_arc/
iterator_as_exact_size_iterator.rs1pub(crate) struct IteratorAsExactSizeIterator<I> {
6 iter: I,
7}
8
9impl<I: Iterator> IteratorAsExactSizeIterator<I> {
10 #[inline]
11 pub(crate) fn new(iter: I) -> Self {
12 let (lower, upper) = iter.size_hint();
13 debug_assert_eq!(
14 Some(lower),
15 upper,
16 "IteratorAsExactSizeIterator requires size hint lower == upper"
17 );
18 IteratorAsExactSizeIterator { iter }
19 }
20}
21
22impl<I: Iterator> Iterator for IteratorAsExactSizeIterator<I> {
23 type Item = I::Item;
24
25 #[inline]
26 fn next(&mut self) -> Option<Self::Item> {
27 self.iter.next()
28 }
29
30 #[inline]
31 fn size_hint(&self) -> (usize, Option<usize>) {
32 self.iter.size_hint()
33 }
34}
35
36impl<I: Iterator> ExactSizeIterator for IteratorAsExactSizeIterator<I> {
37 #[inline]
38 fn len(&self) -> usize {
39 let (lower, upper) = self.iter.size_hint();
40 debug_assert_eq!(
41 Some(lower),
42 upper,
43 "IteratorAsExactSizeIterator requires size hint lower == upper"
44 );
45 lower
46 }
47}