File tree 1 file changed +25
-0
lines changed
1 file changed +25
-0
lines changed Original file line number Diff line number Diff line change @@ -1618,6 +1618,19 @@ pub struct MoveItems<T> {
1618
1618
iter : Items < ' static , T >
1619
1619
}
1620
1620
1621
+ impl < T > MoveItems < T > {
1622
+ #[ inline]
1623
+ /// Drops all items that have not yet been moved and returns the empty vector.
1624
+ pub fn unwrap ( mut self ) -> Vec < T > {
1625
+ unsafe {
1626
+ for _x in self { }
1627
+ let MoveItems { allocation, cap, iter : _iter } = self ;
1628
+ mem:: forget ( self ) ;
1629
+ Vec { ptr : allocation, cap : cap, len : 0 }
1630
+ }
1631
+ }
1632
+ }
1633
+
1621
1634
impl < T > Iterator < T > for MoveItems < T > {
1622
1635
#[ inline]
1623
1636
fn next < ' a > ( & ' a mut self ) -> Option < T > {
@@ -2016,6 +2029,18 @@ mod tests {
2016
2029
assert_eq ! ( vec. swap_remove( 0 ) , None ) ;
2017
2030
}
2018
2031
2032
+ #[ test]
2033
+ fn test_move_iter_unwrap ( ) {
2034
+ let mut vec: Vec < uint > = Vec :: with_capacity ( 7 ) ;
2035
+ vec. push ( 1 ) ;
2036
+ vec. push ( 2 ) ;
2037
+ let ptr = vec. as_ptr ( ) ;
2038
+ vec = vec. move_iter ( ) . unwrap ( ) ;
2039
+ assert_eq ! ( vec. as_ptr( ) , ptr) ;
2040
+ assert_eq ! ( vec. capacity( ) , 7 ) ;
2041
+ assert_eq ! ( vec. len( ) , 0 ) ;
2042
+ }
2043
+
2019
2044
#[ bench]
2020
2045
fn bench_new ( b : & mut Bencher ) {
2021
2046
b. iter ( || {
You can’t perform that action at this time.
0 commit comments