File tree Expand file tree Collapse file tree 2 files changed +43
-0
lines changed Expand file tree Collapse file tree 2 files changed +43
-0
lines changed Original file line number Diff line number Diff line change @@ -748,6 +748,30 @@ impl<A: Array> Drop for IntoIter<A> {
748
748
}
749
749
}
750
750
751
+ impl < A : Array > Clone for IntoIter < A >
752
+ where
753
+ A :: Item : Clone ,
754
+ {
755
+ fn clone ( & self ) -> IntoIter < A > {
756
+ self . v [ self . index . to_usize ( ) ..]
757
+ . iter ( )
758
+ . cloned ( )
759
+ . collect :: < ArrayVec < A > > ( )
760
+ . into_iter ( )
761
+ }
762
+ }
763
+
764
+ impl < A : Array > fmt:: Debug for IntoIter < A >
765
+ where
766
+ A :: Item : fmt:: Debug ,
767
+ {
768
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
769
+ f. debug_list ( )
770
+ . entries ( & self . v [ self . index . to_usize ( ) ..] )
771
+ . finish ( )
772
+ }
773
+ }
774
+
751
775
/// A draining iterator for `ArrayVec`.
752
776
pub struct Drain < ' a , A >
753
777
where A : Array ,
Original file line number Diff line number Diff line change @@ -55,6 +55,7 @@ fn test_drop() {
55
55
56
56
let flag = & Cell :: new ( 0 ) ;
57
57
58
+ #[ derive( Clone ) ]
58
59
struct Bump < ' a > ( & ' a Cell < i32 > ) ;
59
60
60
61
impl < ' a > Drop for Bump < ' a > {
@@ -105,6 +106,24 @@ fn test_drop() {
105
106
assert_eq ! ( flag. get( ) , 3 ) ;
106
107
}
107
108
109
+ // test cloning into_iter
110
+ flag. set ( 0 ) ;
111
+ {
112
+ let mut array = ArrayVec :: < [ _ ; 3 ] > :: new ( ) ;
113
+ array. push ( Bump ( flag) ) ;
114
+ array. push ( Bump ( flag) ) ;
115
+ array. push ( Bump ( flag) ) ;
116
+ let mut iter = array. into_iter ( ) ;
117
+ assert_eq ! ( flag. get( ) , 0 ) ;
118
+ iter. next ( ) ;
119
+ assert_eq ! ( flag. get( ) , 1 ) ;
120
+ let clone = iter. clone ( ) ;
121
+ assert_eq ! ( flag. get( ) , 1 ) ;
122
+ drop ( clone) ;
123
+ assert_eq ! ( flag. get( ) , 3 ) ;
124
+ drop ( iter) ;
125
+ assert_eq ! ( flag. get( ) , 5 ) ;
126
+ }
108
127
}
109
128
110
129
#[ test]
You can’t perform that action at this time.
0 commit comments