@@ -611,11 +611,11 @@ impl<A: Array> SmallVec<A> {
611
611
/// In other words, remove all elements `e` such that `f(&e)` returns `false`.
612
612
/// This method operates in place and preserves the order of the retained
613
613
/// 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 ) {
615
615
let mut del = 0 ;
616
616
let len = self . len ;
617
617
for i in 0 ..len {
618
- if !f ( & self [ i] ) {
618
+ if !f ( & mut self [ i] ) {
619
619
del += 1 ;
620
620
} else if del > 0 {
621
621
self . swap ( i - del, i) ;
@@ -1615,15 +1615,15 @@ pub mod tests {
1615
1615
fn test_retain ( ) {
1616
1616
// Test inline data storate
1617
1617
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 ) ;
1619
1619
assert_eq ! ( sv. pop( ) , Some ( 4 ) ) ;
1620
1620
assert_eq ! ( sv. pop( ) , Some ( 2 ) ) ;
1621
1621
assert_eq ! ( sv. pop( ) , Some ( 1 ) ) ;
1622
1622
assert_eq ! ( sv. pop( ) , None ) ;
1623
1623
1624
1624
// Test spilled data storage
1625
1625
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 ) ;
1627
1627
assert_eq ! ( sv. pop( ) , Some ( 4 ) ) ;
1628
1628
assert_eq ! ( sv. pop( ) , Some ( 2 ) ) ;
1629
1629
assert_eq ! ( sv. pop( ) , Some ( 1 ) ) ;
0 commit comments