]> git.lizzy.rs Git - rust.git/commitdiff
core::iter: Move ExactSizeIterator impls to each struct definition
authorUlrik Sverdrup <bluss@users.noreply.github.com>
Mon, 18 Apr 2016 21:44:02 +0000 (23:44 +0200)
committerUlrik Sverdrup <bluss@users.noreply.github.com>
Mon, 18 Apr 2016 21:44:02 +0000 (23:44 +0200)
src/libcore/iter/mod.rs

index 8449ee78501954864db18e957ad7e4f8f5425ad4..abc199cd1828baf2915c7706306faf45c0779927 100644 (file)
 mod sources;
 mod traits;
 
-// All adaptors that preserve the size of the wrapped iterator are fine
-// Adaptors that may overflow in `size_hint` are not, i.e. `Chain`.
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<I> ExactSizeIterator for Enumerate<I> where I: ExactSizeIterator {}
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<I: ExactSizeIterator, F> ExactSizeIterator for Inspect<I, F> where
-    F: FnMut(&I::Item),
-{}
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<I> ExactSizeIterator for Rev<I>
-    where I: ExactSizeIterator + DoubleEndedIterator {}
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<B, I: ExactSizeIterator, F> ExactSizeIterator for Map<I, F> where
-    F: FnMut(I::Item) -> B,
-{}
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<A, B> ExactSizeIterator for Zip<A, B>
-    where A: ExactSizeIterator, B: ExactSizeIterator {}
-
 /// An double-ended iterator with the direction inverted.
 ///
 /// This `struct` is created by the [`rev()`] method on [`Iterator`]. See its
@@ -382,6 +363,10 @@ impl<I> DoubleEndedIterator for Rev<I> where I: DoubleEndedIterator {
     fn next_back(&mut self) -> Option<<I as Iterator>::Item> { self.iter.next() }
 }
 
+#[stable(feature = "rust1", since = "1.0.0")]
+impl<I> ExactSizeIterator for Rev<I>
+    where I: ExactSizeIterator + DoubleEndedIterator {}
+
 /// An iterator that clones the elements of an underlying iterator.
 ///
 /// This `struct` is created by the [`cloned()`] method on [`Iterator`]. See its
@@ -679,6 +664,10 @@ fn next_back(&mut self) -> Option<(A::Item, B::Item)> {
     }
 }
 
+#[stable(feature = "rust1", since = "1.0.0")]
+impl<A, B> ExactSizeIterator for Zip<A, B>
+    where A: ExactSizeIterator, B: ExactSizeIterator {}
+
 /// An iterator that maps the values of `iter` with `f`.
 ///
 /// This `struct` is created by the [`map()`] method on [`Iterator`]. See its
@@ -771,6 +760,10 @@ fn next_back(&mut self) -> Option<B> {
     }
 }
 
+#[stable(feature = "rust1", since = "1.0.0")]
+impl<B, I: ExactSizeIterator, F> ExactSizeIterator for Map<I, F>
+    where F: FnMut(I::Item) -> B {}
+
 /// An iterator that filters the elements of `iter` with `predicate`.
 ///
 /// This `struct` is created by the [`filter()`] method on [`Iterator`]. See its
@@ -966,6 +959,9 @@ fn next_back(&mut self) -> Option<(usize, <I as Iterator>::Item)> {
     }
 }
 
+#[stable(feature = "rust1", since = "1.0.0")]
+impl<I> ExactSizeIterator for Enumerate<I> where I: ExactSizeIterator {}
+
 /// An iterator with a `peek()` that returns an optional reference to the next
 /// element.
 ///
@@ -1655,3 +1651,7 @@ fn next_back(&mut self) -> Option<I::Item> {
         self.do_inspect(next)
     }
 }
+
+#[stable(feature = "rust1", since = "1.0.0")]
+impl<I: ExactSizeIterator, F> ExactSizeIterator for Inspect<I, F>
+    where F: FnMut(&I::Item) {}