|
1 | 1 | use crate::iter::adapters::SourceIter;
|
2 | 2 | use crate::iter::{
|
3 |
| - Cloned, Copied, Empty, Filter, FilterMap, Fuse, FusedIterator, Map, Once, OnceWith, |
4 |
| - TrustedFused, TrustedLen, |
| 3 | + Cloned, Copied, Empty, Filter, FilterMap, Fuse, FusedIterator, InfiniteIterator, Map, Once, |
| 4 | + OnceWith, TrustedFused, TrustedLen, |
5 | 5 | };
|
6 | 6 | use crate::num::NonZero;
|
7 | 7 | use crate::ops::{ControlFlow, Try};
|
@@ -172,6 +172,26 @@ where
|
172 | 172 | }
|
173 | 173 | }
|
174 | 174 |
|
| 175 | +#[stable(feature = "infinite_iterator_trait", since = "CURRENT_RUSTC_VERSION")] |
| 176 | +impl<I: !ExactSizeIterator, U, F> !ExactSizeIterator for FlatMap<I, U, F> {} |
| 177 | + |
| 178 | +#[stable(feature = "infinite_iterator_trait", since = "CURRENT_RUSTC_VERSION")] |
| 179 | +impl<I, U, F> !ExactSizeIterator for FlatMap<I, U, F> |
| 180 | +where |
| 181 | + I: ExactSizeIterator<Item = U>, |
| 182 | + U: !ExactSizeIterator, |
| 183 | +{ |
| 184 | +} |
| 185 | + |
| 186 | +#[stable(feature = "infinite_iterator_trait", since = "CURRENT_RUSTC_VERSION")] |
| 187 | +impl<I, U, F> InfiniteIterator for FlatMap<I, U, F> |
| 188 | +where |
| 189 | + I: InfiniteIterator, |
| 190 | + U: IntoIterator, |
| 191 | + F: FnMut(I::Item) -> U, |
| 192 | +{ |
| 193 | +} |
| 194 | + |
175 | 195 | /// An iterator that flattens one level of nesting in an iterator of things
|
176 | 196 | /// that can be turned into iterators.
|
177 | 197 | ///
|
@@ -349,6 +369,20 @@ where
|
349 | 369 | }
|
350 | 370 | }
|
351 | 371 |
|
| 372 | +#[stable(feature = "infinite_iterator_trait", since = "CURRENT_RUSTC_VERSION")] |
| 373 | +impl<I: !ExactSizeIterator> !ExactSizeIterator for Flatten<I> {} |
| 374 | + |
| 375 | +#[stable(feature = "infinite_iterator_trait", since = "CURRENT_RUSTC_VERSION")] |
| 376 | +impl<I> !ExactSizeIterator for Flatten<I> |
| 377 | +where |
| 378 | + I: ExactSizeIterator, |
| 379 | + I::Item: !ExactSizeIterator, |
| 380 | +{ |
| 381 | +} |
| 382 | + |
| 383 | +#[stable(feature = "infinite_iterator_trait", since = "CURRENT_RUSTC_VERSION")] |
| 384 | +impl<I> InfiniteIterator for Flatten<I> where I: InfiniteIterator<Item: IntoIterator> {} |
| 385 | + |
352 | 386 | /// Real logic of both `Flatten` and `FlatMap` which simply delegate to
|
353 | 387 | /// this type.
|
354 | 388 | #[derive(Clone, Debug)]
|
@@ -712,6 +746,25 @@ where
|
712 | 746 | {
|
713 | 747 | }
|
714 | 748 |
|
| 749 | +#[stable(feature = "infinite_iterator_trait", since = "CURRENT_RUSTC_VERSION")] |
| 750 | +impl<I: !ExactSizeIterator, U> !ExactSizeIterator for FlattenCompat<I, U> {} |
| 751 | + |
| 752 | +#[stable(feature = "infinite_iterator_trait", since = "CURRENT_RUSTC_VERSION")] |
| 753 | +impl<I, U> !ExactSizeIterator for FlattenCompat<I, U> |
| 754 | +where |
| 755 | + I: ExactSizeIterator<Item: IntoIterator<IntoIter = U, Item = U::Item>>, |
| 756 | + U: Iterator + !ExactSizeIterator, |
| 757 | +{ |
| 758 | +} |
| 759 | + |
| 760 | +#[stable(feature = "infinite_iterator_trait", since = "CURRENT_RUSTC_VERSION")] |
| 761 | +impl<I, U> InfiniteIterator for FlattenCompat<I, U> |
| 762 | +where |
| 763 | + I: InfiniteIterator<Item: IntoIterator<IntoIter = U, Item = U::Item>>, |
| 764 | + U: Iterator, |
| 765 | +{ |
| 766 | +} |
| 767 | + |
715 | 768 | trait ConstSizeIntoIterator: IntoIterator {
|
716 | 769 | // FIXME(#31844): convert to an associated const once specialization supports that
|
717 | 770 | fn size() -> Option<usize>;
|
|
0 commit comments