diff --git a/lib.rs b/lib.rs index 208ebba..36266a8 100644 --- a/lib.rs +++ b/lib.rs @@ -611,11 +611,11 @@ impl SmallVec { /// In other words, remove all elements `e` such that `f(&e)` returns `false`. /// This method operates in place and preserves the order of the retained /// elements. - pub fn retain bool>(&mut self, mut f: F) { + pub fn retain bool>(&mut self, mut f: F) { let mut del = 0; let len = self.len; for i in 0..len { - if !f(&self[i]) { + if !f(&mut self[i]) { del += 1; } else if del > 0 { self.swap(i - del, i); @@ -1615,7 +1615,7 @@ pub mod tests { fn test_retain() { // Test inline data storate let mut sv: SmallVec<[i32; 5]> = SmallVec::from_slice(&[1, 2, 3, 3, 4]); - sv.retain(|&i| i != 3); + sv.retain(|&mut i| i != 3); assert_eq!(sv.pop(), Some(4)); assert_eq!(sv.pop(), Some(2)); assert_eq!(sv.pop(), Some(1)); @@ -1623,7 +1623,7 @@ pub mod tests { // Test spilled data storage let mut sv: SmallVec<[i32; 3]> = SmallVec::from_slice(&[1, 2, 3, 3, 4]); - sv.retain(|&i| i != 3); + sv.retain(|&mut i| i != 3); assert_eq!(sv.pop(), Some(4)); assert_eq!(sv.pop(), Some(2)); assert_eq!(sv.pop(), Some(1));