diff options
Diffstat (limited to 'vendor/thin-vec')
-rw-r--r-- | vendor/thin-vec/.cargo-checksum.json | 2 | ||||
-rw-r--r-- | vendor/thin-vec/Cargo.toml | 2 | ||||
-rw-r--r-- | vendor/thin-vec/src/lib.rs | 75 |
3 files changed, 70 insertions, 9 deletions
diff --git a/vendor/thin-vec/.cargo-checksum.json b/vendor/thin-vec/.cargo-checksum.json index fc4888d7f..33ca74234 100644 --- a/vendor/thin-vec/.cargo-checksum.json +++ b/vendor/thin-vec/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"596cca0e2a5b1abe635e3fcdd3fa1f5f7256a5f2abf63b9c6bba0cce32258b02","README.md":"9f102f13ccbabe9cdec7a206aa298d65e33dea84da9f08dd17b358ff44fe0286","src/lib.rs":"d6300952a66dc289328a464b466f4b281272b133e42e20e1e2cd0e6f8690087d"},"package":"104c2cb3180b6fb6d5b2278768e9b88b578d32ba751ea6e8d026688a40d7ed87"}
\ No newline at end of file +{"files":{"Cargo.toml":"49f429a38e2c6216dfddc1f23af64a3b06cf92217d75cae2a9ac389bc3f76e46","README.md":"9f102f13ccbabe9cdec7a206aa298d65e33dea84da9f08dd17b358ff44fe0286","src/lib.rs":"6a5451d75037e3cb12bde5198266a0db00432e1370cad74b0dda8df8fb64f067"},"package":"ceb05e71730d396f960f8f3901cdb41be2d339b303e9d7d3a07c5ff0536e671b"}
\ No newline at end of file diff --git a/vendor/thin-vec/Cargo.toml b/vendor/thin-vec/Cargo.toml index 38908830d..8361d94d4 100644 --- a/vendor/thin-vec/Cargo.toml +++ b/vendor/thin-vec/Cargo.toml @@ -12,7 +12,7 @@ [package] edition = "2018" name = "thin-vec" -version = "0.2.8" +version = "0.2.9" authors = ["Aria Beingessner <a.beingessner@gmail.com>"] description = "A vec that takes up less space on the stack" homepage = "https://github.com/gankra/thin-vec" diff --git a/vendor/thin-vec/src/lib.rs b/vendor/thin-vec/src/lib.rs index 60785150e..a2384c62e 100644 --- a/vendor/thin-vec/src/lib.rs +++ b/vendor/thin-vec/src/lib.rs @@ -403,7 +403,9 @@ unsafe impl<T: Send> Send for ThinVec<T> {} /// Creates a `ThinVec` containing the arguments. /// -/// ``` +// A hack to avoid linking problems with `cargo test --features=gecko-ffi`. +#[cfg_attr(not(feature = "gecko-ffi"), doc = "```")] +#[cfg_attr(feature = "gecko-ffi", doc = "```ignore")] /// #[macro_use] extern crate thin_vec; /// /// fn main() { @@ -771,7 +773,9 @@ impl<T> ThinVec<T> { /// /// # Examples /// - /// ``` + // A hack to avoid linking problems with `cargo test --features=gecko-ffi`. + #[cfg_attr(not(feature = "gecko-ffi"), doc = "```")] + #[cfg_attr(feature = "gecko-ffi", doc = "```ignore")] /// # #[macro_use] extern crate thin_vec; /// # fn main() { /// let mut vec = thin_vec![1, 2, 3, 4]; @@ -783,13 +787,41 @@ impl<T> ThinVec<T> { where F: FnMut(&T) -> bool, { + self.retain_mut(|x| f(&*x)); + } + + /// Retains only the elements specified by the predicate, passing a mutable reference to it. + /// + /// In other words, remove all elements `e` such that `f(&mut e)` returns `false`. + /// This method operates in place and preserves the order of the retained + /// elements. + /// + /// # Examples + /// + // A hack to avoid linking problems with `cargo test --features=gecko-ffi`. + #[cfg_attr(not(feature = "gecko-ffi"), doc = "```")] + #[cfg_attr(feature = "gecko-ffi", doc = "```ignore")] + /// # #[macro_use] extern crate thin_vec; + /// # fn main() { + /// let mut vec = thin_vec![1, 2, 3, 4, 5]; + /// vec.retain_mut(|x| { + /// *x += 1; + /// (*x)%2 == 0 + /// }); + /// assert_eq!(vec, [2, 4, 6]); + /// # } + /// ``` + pub fn retain_mut<F>(&mut self, mut f: F) + where + F: FnMut(&mut T) -> bool, + { let len = self.len(); let mut del = 0; { let v = &mut self[..]; for i in 0..len { - if !f(&v[i]) { + if !f(&mut v[i]) { del += 1; } else if del > 0 { v.swap(i - del, i); @@ -807,7 +839,9 @@ impl<T> ThinVec<T> { /// /// # Examples /// - /// ``` + // A hack to avoid linking problems with `cargo test --features=gecko-ffi`. + #[cfg_attr(not(feature = "gecko-ffi"), doc = "```")] + #[cfg_attr(feature = "gecko-ffi", doc = "```ignore")] /// # #[macro_use] extern crate thin_vec; /// # fn main() { /// let mut vec = thin_vec![10, 20, 21, 30, 20]; @@ -835,7 +869,9 @@ impl<T> ThinVec<T> { /// /// # Examples /// - /// ``` + // A hack to avoid linking problems with `cargo test --features=gecko-ffi`. + #[cfg_attr(not(feature = "gecko-ffi"), doc = "```")] + #[cfg_attr(feature = "gecko-ffi", doc = "```ignore")] /// # #[macro_use] extern crate thin_vec; /// # fn main() { /// let mut vec = thin_vec!["foo", "bar", "Bar", "baz", "bar"]; @@ -1014,7 +1050,9 @@ impl<T: Clone> ThinVec<T> { /// /// # Examples /// - /// ``` + // A hack to avoid linking problems with `cargo test --features=gecko-ffi`. + #[cfg_attr(not(feature = "gecko-ffi"), doc = "```")] + #[cfg_attr(feature = "gecko-ffi", doc = "```ignore")] /// # #[macro_use] extern crate thin_vec; /// # fn main() { /// let mut vec = thin_vec!["hello"]; @@ -1056,7 +1094,9 @@ impl<T: PartialEq> ThinVec<T> { /// /// # Examples /// - /// ``` + // A hack to avoid linking problems with `cargo test --features=gecko-ffi`. + #[cfg_attr(not(feature = "gecko-ffi"), doc = "```")] + #[cfg_attr(feature = "gecko-ffi", doc = "```ignore")] /// # #[macro_use] extern crate thin_vec; /// # fn main() { /// let mut vec = thin_vec![1, 2, 2, 3, 2]; @@ -1814,6 +1854,15 @@ mod tests { { let mut v = ThinVec::<i32>::new(); + v.retain_mut(|_| unreachable!()); + + assert_eq!(v.len(), 0); + assert_eq!(v.capacity(), 0); + assert_eq!(&v[..], &[]); + } + + { + let mut v = ThinVec::<i32>::new(); v.dedup_by_key(|x| *x); assert_eq!(v.len(), 0); @@ -2090,6 +2139,18 @@ mod std_tests { } #[test] + fn test_retain_mut() { + let mut vec = thin_vec![9, 9, 9, 9]; + let mut i = 0; + vec.retain_mut(|x| { + i += 1; + *x = i; + i != 4 + }); + assert_eq!(vec, [1, 2, 3]); + } + + #[test] fn test_dedup() { fn case(a: ThinVec<i32>, b: ThinVec<i32>) { let mut v = a; |