@@ -4,7 +4,8 @@ use crate::mem;
4
4
use crate :: ops:: { self , Try } ;
5
5
6
6
use super :: {
7
- FusedIterator , TrustedLen , TrustedRandomAccess , TrustedRandomAccessNoCoerce , TrustedStep ,
7
+ FusedIterator , PeekableIterator , TrustedLen , TrustedRandomAccess , TrustedRandomAccessNoCoerce ,
8
+ TrustedStep ,
8
9
} ;
9
10
10
11
// Safety: All invariants are upheld.
@@ -765,6 +766,13 @@ impl<A: Step> Iterator for ops::Range<A> {
765
766
}
766
767
}
767
768
769
+ #[ unstable( feature = "peekable_iterator" , issue = "none" ) ]
770
+ impl < A : Step > PeekableIterator for ops:: Range < A > {
771
+ fn peek ( & self ) -> Option < A > {
772
+ if self . start < self . end { Some ( self . start . clone ( ) ) } else { None }
773
+ }
774
+ }
775
+
768
776
// These macros generate `ExactSizeIterator` impls for various range types.
769
777
//
770
778
// * `ExactSizeIterator::len` is required to always return an exact `usize`,
@@ -879,6 +887,13 @@ impl<A: Step> Iterator for ops::RangeFrom<A> {
879
887
}
880
888
}
881
889
890
+ #[ unstable( feature = "peekable_iterator" , issue = "none" ) ]
891
+ impl < A : Step > PeekableIterator for ops:: RangeFrom < A > {
892
+ fn peek ( & self ) -> Option < A > {
893
+ Some ( self . start . clone ( ) )
894
+ }
895
+ }
896
+
882
897
// Safety: See above implementation for `ops::Range<A>`
883
898
#[ unstable( feature = "trusted_len" , issue = "37572" ) ]
884
899
unsafe impl < A : TrustedStep > TrustedLen for ops:: RangeFrom < A > { }
@@ -1186,6 +1201,13 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> {
1186
1201
}
1187
1202
}
1188
1203
1204
+ #[ unstable( feature = "peekable_iterator" , issue = "none" ) ]
1205
+ impl < A : Step > PeekableIterator for ops:: RangeInclusive < A > {
1206
+ fn peek ( & self ) -> Option < A > {
1207
+ if self . is_empty ( ) { None } else { Some ( self . start . clone ( ) ) }
1208
+ }
1209
+ }
1210
+
1189
1211
#[ stable( feature = "inclusive_range" , since = "1.26.0" ) ]
1190
1212
impl < A : Step > DoubleEndedIterator for ops:: RangeInclusive < A > {
1191
1213
#[ inline]
0 commit comments