diff --git a/db/Cargo.toml b/db/Cargo.toml index a356fb2c..f89121b7 100644 --- a/db/Cargo.toml +++ b/db/Cargo.toml @@ -14,7 +14,6 @@ indexmap = "1" itertools = "0.7" lazy_static = "0.2" log = "0.4" -num = "0.1" ordered-float = "0.5" time = "0.1" petgraph = "0.4.12" diff --git a/db/src/cache.rs b/db/src/cache.rs index 144e746d..ef1a7bb4 100644 --- a/db/src/cache.rs +++ b/db/src/cache.rs @@ -76,8 +76,6 @@ use failure::{ ResultExt, }; -use num; - use rusqlite; use mentat_core::{ @@ -128,17 +126,10 @@ trait Remove where T: PartialEq { impl Remove for Vec where T: PartialEq { /// Remove all occurrences from a vector in-place, by equality. - /// Eventually replace with unstable feature: #40062. fn remove_every(&mut self, item: &T) -> usize { - let mut removed = 0; - let range = num::range_step_inclusive(self.len() as isize - 1, 0, -1); - for i in range { - if self.get(i as usize).map_or(false, |x| x == item) { - self.remove(i as usize); - removed += 1; - } - } - removed + let initial_len = self.len(); + self.retain(|v| v != item); + initial_len - self.len() } } @@ -187,10 +178,14 @@ impl ExtendByAbsorbing for BTreeMap where K: Ord, V: Absorb { #[test] fn test_vec_remove_item() { let mut v = vec![1, 2, 3, 4, 5, 4, 3]; - v.remove_every(&3); + let count = v.remove_every(&3); assert_eq!(v, vec![1, 2, 4, 5, 4]); - v.remove_every(&4); + assert_eq!(count, 2); + let count = v.remove_every(&4); assert_eq!(v, vec![1, 2, 5]); + assert_eq!(count, 2); + let count = v.remove_every(&9); + assert_eq!(count, 0); } // diff --git a/db/src/lib.rs b/db/src/lib.rs index bd8fe154..c42b8eaf 100644 --- a/db/src/lib.rs +++ b/db/src/lib.rs @@ -15,7 +15,6 @@ extern crate itertools; #[macro_use] extern crate lazy_static; #[macro_use] extern crate log; -extern crate num; extern crate petgraph; extern crate rusqlite; extern crate tabwriter;