]> git.lizzy.rs Git - rust.git/commitdiff
Use the default `len` implementation in ExactSizeIterator impls
authorSteven Allen <steven@stebalien.com>
Wed, 21 Jan 2015 05:14:04 +0000 (00:14 -0500)
committerSteven Allen <steven@stebalien.com>
Wed, 21 Jan 2015 16:29:40 +0000 (11:29 -0500)
src/libcore/iter.rs

index cfbccef2a722dbff6da94b045085afd342f13dd9..e39c60a4006e8c3379d33a533179885d3b96a52d 100644 (file)
@@ -1088,10 +1088,7 @@ fn next_back(&mut self) -> Option<<I as Iterator>::Item> { self.iter.next_back()
 }
 
 #[stable]
-impl<'a, I> ExactSizeIterator for ByRef<'a, I> where I: 'a + ExactSizeIterator {
-    #[inline]
-    fn len(&self) -> uint { self.iter.len() }
-}
+impl<'a, I> ExactSizeIterator for ByRef<'a, I> where I: 'a + ExactSizeIterator {}
 
 /// A trait for iterators over elements which can be added together
 #[unstable = "needs to be re-evaluated as part of numerics reform"]
@@ -1797,14 +1794,7 @@ fn size_hint(&self) -> (uint, Option<uint>) {
 }
 
 #[stable]
-impl<T, I> ExactSizeIterator for Peekable<T, I> where I: ExactSizeIterator<Item = T> {
-    #[inline]
-    fn len(&self) -> usize {
-        // This is guarenteed to not overflow because `len()` must have been able to return a valid
-        // value before we peeked.
-        self.iter.len() + if self.peeked.is_some() { 1 } else { 0 }
-    }
-}
+impl<T, I> ExactSizeIterator for Peekable<T, I> where I: ExactSizeIterator<Item = T> {}
 
 #[stable]
 impl<T, I> Peekable<T, I> where I: Iterator<Item=T> {
@@ -1999,10 +1989,7 @@ fn idx(&mut self, index: uint) -> Option<<I as Iterator>::Item> {
 }
 
 #[stable]
-impl<I> ExactSizeIterator for Skip<I> where I: ExactSizeIterator {
-    #[inline]
-    fn len(&self) -> uint { self.iter.len().saturating_sub(self.n) }
-}
+impl<I> ExactSizeIterator for Skip<I> where I: ExactSizeIterator {}
 
 /// An iterator that only iterates over the first `n` iterations of `iter`.
 #[derive(Clone)]
@@ -2060,10 +2047,7 @@ fn idx(&mut self, index: uint) -> Option<<I as Iterator>::Item> {
 }
 
 #[stable]
-impl<I> ExactSizeIterator for Take<I> where I: ExactSizeIterator {
-    #[inline]
-    fn len(&self) -> uint { cmp::min(self.iter.len(), self.n) }
-}
+impl<I> ExactSizeIterator for Take<I> where I: ExactSizeIterator {}
 
 
 /// An iterator to maintain state while iterating another iterator
@@ -2275,10 +2259,7 @@ fn idx(&mut self, index: uint) -> Option<<I as Iterator>::Item> {
 }
 
 #[stable]
-impl<I> ExactSizeIterator for Fuse<I> where I: ExactSizeIterator {
-    #[inline]
-    fn len(&self) -> uint { self.iter.len() }
-}
+impl<I> ExactSizeIterator for Fuse<I> where I: ExactSizeIterator {}
 
 impl<I> Fuse<I> {
     /// Resets the fuse such that the next call to .next() or .next_back() will