Upgrade rust/crates/protobuf to 2.17.0
* Android.bp was regenerated. New rustc warnings were found.
* Keep local change in src/lib.rs to include out/version.rs.
* Update out/version.rs to the new version.
Change-Id: I9c2f7d412dcd42fe3769505629e05ab949300fe6
Test: make
diff --git a/src/repeated.rs b/src/repeated.rs
index e5072cf..6ceae53 100644
--- a/src/repeated.rs
+++ b/src/repeated.rs
@@ -16,7 +16,7 @@
use std::slice;
use std::vec;
-use clear::Clear;
+use crate::clear::Clear;
/// Wrapper around vector to avoid deallocations on clear.
pub struct RepeatedField<T> {
@@ -207,6 +207,31 @@
self.vec.remove(index)
}
+ /// Retains only the elements specified by the predicate.
+ ///
+ /// In other words, remove all elements `e` such that `f(&e)` returns `false`.
+ /// This method operates in place, visiting each element exactly once in the
+ /// original order, and preserves the order of the retained elements.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// # use protobuf::RepeatedField;
+ ///
+ /// let mut vec = RepeatedField::from(vec![1, 2, 3, 4]);
+ /// vec.retain(|&x| x % 2 == 0);
+ /// assert_eq!(vec, RepeatedField::from(vec![2, 4]));
+ /// ```
+ pub fn retain<F>(&mut self, f: F)
+ where
+ F: FnMut(&T) -> bool,
+ {
+ // suboptimal
+ self.vec.truncate(self.len);
+ self.vec.retain(f);
+ self.len = self.vec.len();
+ }
+
/// Truncate at specified length.
#[inline]
pub fn truncate(&mut self, len: usize) {