File tree Expand file tree Collapse file tree 2 files changed +29
-1
lines changed Expand file tree Collapse file tree 2 files changed +29
-1
lines changed Original file line number Diff line number Diff line change 5959
6060#![ stable( feature = "rust1" , since = "1.0.0" ) ]
6161
62- use alloc:: raw_vec:: RawVec ;
6362use alloc:: boxed:: Box ;
6463use alloc:: heap:: EMPTY ;
64+ use alloc:: raw_vec:: RawVec ;
65+ use borrow:: ToOwned ;
6566use core:: cmp:: Ordering ;
6667use core:: fmt;
6768use core:: hash:: { self , Hash } ;
@@ -1633,6 +1634,15 @@ impl<T> DoubleEndedIterator for IntoIter<T> {
16331634#[ stable( feature = "rust1" , since = "1.0.0" ) ]
16341635impl < T > ExactSizeIterator for IntoIter < T > { }
16351636
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+
16361646#[ stable( feature = "rust1" , since = "1.0.0" ) ]
16371647impl < T > Drop for IntoIter < T > {
16381648 #[ unsafe_destructor_blind_to_params]
Original file line number Diff line number Diff line change @@ -467,6 +467,24 @@ fn test_into_iter_count() {
467467 assert_eq ! ( vec![ 1 , 2 , 3 ] . into_iter( ) . count( ) , 3 ) ;
468468}
469469
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+
470488#[ test]
471489fn test_cow_from ( ) {
472490 let borrowed: & [ _ ] = & [ "borrowed" , "(slice)" ] ;
You can’t perform that action at this time.
0 commit comments