From c0832ea1dfea2de2b2547ae2a0591b8280ee5a91 Mon Sep 17 00:00:00 2001 From: Jeroen Bollen Date: Sun, 2 Apr 2017 18:46:24 +0200 Subject: [PATCH] Added ExactSizeIterator support. This allows people to just use `.len()` on the iterators. --- src/lib.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index afed023f..774f97a9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1197,6 +1197,12 @@ impl<'a, K, V> DoubleEndedIterator for Keys<'a, K, V> { } } +impl<'a, K, V> ExactSizeIterator for Keys<'a, K, V> { + fn len(&self) -> usize { + self.iter.len() + } +} + pub struct Values<'a, K: 'a, V: 'a> { iter: SliceIter<'a, Bucket>, } @@ -1231,6 +1237,12 @@ impl<'a, K, V> DoubleEndedIterator for Values<'a, K, V> { } } +impl<'a, K, V> ExactSizeIterator for Values<'a, K, V> { + fn len(&self) -> usize { + self.iter.len() + } +} + pub struct ValuesMut<'a, K: 'a, V: 'a> { iter: SliceIterMut<'a, Bucket>, } @@ -1265,6 +1277,12 @@ impl<'a, K, V> DoubleEndedIterator for ValuesMut<'a, K, V> { } } +impl<'a, K, V> ExactSizeIterator for ValuesMut<'a, K, V> { + fn len(&self) -> usize { + self.iter.len() + } +} + pub struct Iter<'a, K: 'a, V: 'a> { iter: SliceIter<'a, Bucket>, } @@ -1299,6 +1317,12 @@ impl<'a, K, V> DoubleEndedIterator for Iter<'a, K, V> { } } +impl<'a, K, V> ExactSizeIterator for Iter<'a, K, V> { + fn len(&self) -> usize { + self.iter.len() + } +} + pub struct IterMut<'a, K: 'a, V: 'a> { iter: SliceIterMut<'a, Bucket>, } @@ -1333,6 +1357,12 @@ impl<'a, K, V> DoubleEndedIterator for IterMut<'a, K, V> { } } +impl<'a, K, V> ExactSizeIterator for IterMut<'a, K, V> { + fn len(&self) -> usize { + self.iter.len() + } +} + pub struct IntoIter { iter: VecIntoIter>, } @@ -1367,6 +1397,13 @@ impl<'a, K, V> DoubleEndedIterator for IntoIter { } } +impl ExactSizeIterator for IntoIter { + fn len(&self) -> usize { + self.iter.len() + } +} + + impl<'a, K, V, S> IntoIterator for &'a OrderMap where K: Hash + Eq, S: BuildHasher,