File tree 2 files changed +29
-1
lines changed
2 files changed +29
-1
lines changed Original file line number Diff line number Diff line change 59
59
60
60
#![ stable( feature = "rust1" , since = "1.0.0" ) ]
61
61
62
- use alloc:: raw_vec:: RawVec ;
63
62
use alloc:: boxed:: Box ;
64
63
use alloc:: heap:: EMPTY ;
64
+ use alloc:: raw_vec:: RawVec ;
65
+ use borrow:: ToOwned ;
65
66
use core:: cmp:: Ordering ;
66
67
use core:: fmt;
67
68
use core:: hash:: { self , Hash } ;
@@ -1633,6 +1634,15 @@ impl<T> DoubleEndedIterator for IntoIter<T> {
1633
1634
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1634
1635
impl < T > ExactSizeIterator for IntoIter < T > { }
1635
1636
1637
+ #[ stable( feature = "vec_into_iter_clone" , since = "1.8.0" ) ]
1638
+ impl < T : Clone > Clone for IntoIter < T > {
1639
+ fn clone ( & self ) -> IntoIter < T > {
1640
+ unsafe {
1641
+ slice:: from_raw_parts ( self . ptr , self . len ( ) ) . to_owned ( ) . into_iter ( )
1642
+ }
1643
+ }
1644
+ }
1645
+
1636
1646
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1637
1647
impl < T > Drop for IntoIter < T > {
1638
1648
#[ unsafe_destructor_blind_to_params]
Original file line number Diff line number Diff line change @@ -467,6 +467,24 @@ fn test_into_iter_count() {
467
467
assert_eq ! ( vec![ 1 , 2 , 3 ] . into_iter( ) . count( ) , 3 ) ;
468
468
}
469
469
470
+ #[ test]
471
+ fn test_into_iter_clone ( ) {
472
+ fn iter_equal < I : Iterator < Item =i32 > > ( it : I , slice : & [ i32 ] ) {
473
+ let v: Vec < i32 > = it. collect ( ) ;
474
+ assert_eq ! ( & v[ ..] , slice) ;
475
+ }
476
+ let mut it = vec ! [ 1 , 2 , 3 ] . into_iter ( ) ;
477
+ iter_equal ( it. clone ( ) , & [ 1 , 2 , 3 ] ) ;
478
+ assert_eq ! ( it. next( ) , Some ( 1 ) ) ;
479
+ let mut it = it. rev ( ) ;
480
+ iter_equal ( it. clone ( ) , & [ 3 , 2 ] ) ;
481
+ assert_eq ! ( it. next( ) , Some ( 3 ) ) ;
482
+ iter_equal ( it. clone ( ) , & [ 2 ] ) ;
483
+ assert_eq ! ( it. next( ) , Some ( 2 ) ) ;
484
+ iter_equal ( it. clone ( ) , & [ ] ) ;
485
+ assert_eq ! ( it. next( ) , None ) ;
486
+ }
487
+
470
488
#[ test]
471
489
fn test_cow_from ( ) {
472
490
let borrowed: & [ _ ] = & [ "borrowed" , "(slice)" ] ;
You can’t perform that action at this time.
0 commit comments