@@ -611,11 +611,11 @@ impl<A: Array> SmallVec<A> {
611611 /// In other words, remove all elements `e` such that `f(&e)` returns `false`.
612612 /// This method operates in place and preserves the order of the retained
613613 /// elements.
614- pub fn retain < F : FnMut ( & A :: Item ) -> bool > ( & mut self , mut f : F ) {
614+ pub fn retain < F : FnMut ( & mut A :: Item ) -> bool > ( & mut self , mut f : F ) {
615615 let mut del = 0 ;
616616 let len = self . len ;
617617 for i in 0 ..len {
618- if !f ( & self [ i] ) {
618+ if !f ( & mut self [ i] ) {
619619 del += 1 ;
620620 } else if del > 0 {
621621 self . swap ( i - del, i) ;
@@ -1615,15 +1615,15 @@ pub mod tests {
16151615 fn test_retain ( ) {
16161616 // Test inline data storate
16171617 let mut sv: SmallVec < [ i32 ; 5 ] > = SmallVec :: from_slice ( & [ 1 , 2 , 3 , 3 , 4 ] ) ;
1618- sv. retain ( |& i| i != 3 ) ;
1618+ sv. retain ( |& mut i| i != 3 ) ;
16191619 assert_eq ! ( sv. pop( ) , Some ( 4 ) ) ;
16201620 assert_eq ! ( sv. pop( ) , Some ( 2 ) ) ;
16211621 assert_eq ! ( sv. pop( ) , Some ( 1 ) ) ;
16221622 assert_eq ! ( sv. pop( ) , None ) ;
16231623
16241624 // Test spilled data storage
16251625 let mut sv: SmallVec < [ i32 ; 3 ] > = SmallVec :: from_slice ( & [ 1 , 2 , 3 , 3 , 4 ] ) ;
1626- sv. retain ( |& i| i != 3 ) ;
1626+ sv. retain ( |& mut i| i != 3 ) ;
16271627 assert_eq ! ( sv. pop( ) , Some ( 4 ) ) ;
16281628 assert_eq ! ( sv. pop( ) , Some ( 2 ) ) ;
16291629 assert_eq ! ( sv. pop( ) , Some ( 1 ) ) ;
0 commit comments