about summary refs log tree commit diff
path: root/src/libcore/iter
diff options
context:
space:
mode:
authorTim Vermeulen <tvermeulen@me.com>2020-02-05 00:09:02 +0100
committerTim Vermeulen <tvermeulen@me.com>2020-02-10 13:32:21 +0100
commit16a23e72d05b0e3cb48f0a5442e651725bf27ae8 (patch)
treede8a366639ab4f87a0c8e22e705dfbbfb7a84d3d /src/libcore/iter
parent14bcf0aaa51138afdd95190d814f4b46013f990e (diff)
downloadrust-16a23e72d05b0e3cb48f0a5442e651725bf27ae8.tar.gz
rust-16a23e72d05b0e3cb48f0a5442e651725bf27ae8.zip
Fuse FlattenCompat's inner iterator
Diffstat (limited to 'src/libcore/iter')
-rw-r--r--src/libcore/iter/adapters/flatten.rs11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/libcore/iter/adapters/flatten.rs b/src/libcore/iter/adapters/flatten.rs
index 0a7a9f26f89..6000214af43 100644
--- a/src/libcore/iter/adapters/flatten.rs
+++ b/src/libcore/iter/adapters/flatten.rs
@@ -1,7 +1,7 @@
 use crate::fmt;
 use crate::ops::Try;
 
-use super::super::{DoubleEndedIterator, FusedIterator, Iterator};
+use super::super::{DoubleEndedIterator, Fuse, FusedIterator, Iterator};
 use super::Map;
 
 /// An iterator that maps each element to an iterator, and yields the elements
@@ -239,14 +239,17 @@ where
 /// this type.
 #[derive(Clone, Debug)]
 struct FlattenCompat<I, U> {
-    iter: I,
+    iter: Fuse<I>,
     frontiter: Option<U>,
     backiter: Option<U>,
 }
-impl<I, U> FlattenCompat<I, U> {
+impl<I, U> FlattenCompat<I, U>
+where
+    I: Iterator,
+{
     /// Adapts an iterator by flattening it, for use in `flatten()` and `flat_map()`.
     fn new(iter: I) -> FlattenCompat<I, U> {
-        FlattenCompat { iter, frontiter: None, backiter: None }
+        FlattenCompat { iter: iter.fuse(), frontiter: None, backiter: None }
     }
 }