@@ -14,7 +14,12 @@ use super::Map;
1414#[ must_use = "iterators are lazy and do nothing unless consumed" ]
1515#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1616pub struct FlatMap < I , U : IntoIterator , F > {
17- pub ( in super :: super ) inner : FlattenCompat < Map < I , F > , <U as IntoIterator >:: IntoIter >
17+ inner : FlattenCompat < Map < I , F > , <U as IntoIterator >:: IntoIter >
18+ }
19+ impl < I : Iterator , U : IntoIterator , F : FnMut ( I :: Item ) -> U > FlatMap < I , U , F > {
20+ pub ( in super :: super ) fn new ( iter : I , f : F ) -> FlatMap < I , U , F > {
21+ FlatMap { inner : FlattenCompat :: new ( iter. map ( f) ) }
22+ }
1823}
1924
2025#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -100,7 +105,13 @@ impl<I, U, F> FusedIterator for FlatMap<I, U, F>
100105#[ stable( feature = "iterator_flatten" , since = "1.29.0" ) ]
101106pub struct Flatten < I : Iterator >
102107where I :: Item : IntoIterator {
103- pub ( in super :: super ) inner : FlattenCompat < I , <I :: Item as IntoIterator >:: IntoIter > ,
108+ inner : FlattenCompat < I , <I :: Item as IntoIterator >:: IntoIter > ,
109+ }
110+ impl < I : Iterator > Flatten < I >
111+ where I :: Item : IntoIterator {
112+ pub ( in super :: super ) fn new ( iter : I ) -> Flatten < I > {
113+ Flatten { inner : FlattenCompat :: new ( iter) }
114+ }
104115}
105116
106117#[ stable( feature = "iterator_flatten" , since = "1.29.0" ) ]
@@ -177,19 +188,20 @@ impl<I, U> FusedIterator for Flatten<I>
177188 where I : FusedIterator , U : Iterator ,
178189 I :: Item : IntoIterator < IntoIter = U , Item = U :: Item > { }
179190
180- /// Adapts an iterator by flattening it, for use in `flatten()` and `flat_map()`.
181- pub ( in super :: super ) fn flatten_compat < I , U > ( iter : I ) -> FlattenCompat < I , U > {
182- FlattenCompat { iter, frontiter : None , backiter : None }
183- }
184-
185191/// Real logic of both `Flatten` and `FlatMap` which simply delegate to
186192/// this type.
187193#[ derive( Clone , Debug ) ]
188- pub ( in super :: super ) struct FlattenCompat < I , U > {
194+ struct FlattenCompat < I , U > {
189195 iter : I ,
190196 frontiter : Option < U > ,
191197 backiter : Option < U > ,
192198}
199+ impl < I , U > FlattenCompat < I , U > {
200+ /// Adapts an iterator by flattening it, for use in `flatten()` and `flat_map()`.
201+ fn new ( iter : I ) -> FlattenCompat < I , U > {
202+ FlattenCompat { iter, frontiter : None , backiter : None }
203+ }
204+ }
193205
194206impl < I , U > Iterator for FlattenCompat < I , U >
195207 where I : Iterator , U : Iterator ,
0 commit comments