@@ -1553,6 +1553,20 @@ impl<A: Array> DoubleEndedIterator for IntoIter<A> {
1553
1553
impl < A : Array > ExactSizeIterator for IntoIter < A > { }
1554
1554
impl < A : Array > FusedIterator for IntoIter < A > { }
1555
1555
1556
+ impl < A : Array > IntoIter < A > {
1557
+ /// Returns the remaining items of this iterator as a slice.
1558
+ pub fn as_slice ( & self ) -> & [ A :: Item ] {
1559
+ let len = self . end - self . current ;
1560
+ unsafe { core:: slice:: from_raw_parts ( self . data . as_ptr ( ) . add ( self . current ) , len) }
1561
+ }
1562
+
1563
+ /// Returns the remaining items of this iterator as a mutable slice.
1564
+ pub fn as_mut_slice ( & mut self ) -> & mut [ A :: Item ] {
1565
+ let len = self . end - self . current ;
1566
+ unsafe { core:: slice:: from_raw_parts_mut ( self . data . as_mut_ptr ( ) . add ( self . current ) , len) }
1567
+ }
1568
+ }
1569
+
1556
1570
impl < A : Array > IntoIterator for SmallVec < A > {
1557
1571
type IntoIter = IntoIter < A > ;
1558
1572
type Item = A :: Item ;
@@ -2225,6 +2239,20 @@ mod tests {
2225
2239
assert_eq ! ( vec. into_iter( ) . len( ) , 1 ) ;
2226
2240
}
2227
2241
2242
+ #[ test]
2243
+ fn test_into_iter_as_slice ( ) {
2244
+ let vec = SmallVec :: < [ u32 ; 2 ] > :: from ( & [ 1 , 2 , 3 ] [ ..] ) ;
2245
+ let mut iter = vec. clone ( ) . into_iter ( ) ;
2246
+ assert_eq ! ( iter. as_slice( ) , & [ 1 , 2 , 3 ] ) ;
2247
+ assert_eq ! ( iter. as_mut_slice( ) , & [ 1 , 2 , 3 ] ) ;
2248
+ iter. next ( ) ;
2249
+ assert_eq ! ( iter. as_slice( ) , & [ 2 , 3 ] ) ;
2250
+ assert_eq ! ( iter. as_mut_slice( ) , & [ 2 , 3 ] ) ;
2251
+ iter. next_back ( ) ;
2252
+ assert_eq ! ( iter. as_slice( ) , & [ 2 ] ) ;
2253
+ assert_eq ! ( iter. as_mut_slice( ) , & [ 2 ] ) ;
2254
+ }
2255
+
2228
2256
#[ test]
2229
2257
fn shrink_to_fit_unspill ( ) {
2230
2258
let mut vec = SmallVec :: < [ u8 ; 2 ] > :: from_iter ( 0 ..3 ) ;
0 commit comments