diff options
| author | Ralf Jung <post@ralfj.de> | 2025-07-08 06:59:33 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-08 06:59:33 +0000 |
| commit | 9110617cc7192e512511ef74de83cb8a8ab06a69 (patch) | |
| tree | 4376d8c702b0394cca4f7cc3204ed2c521d87530 /library/alloc/src | |
| parent | a96e73f39e99811a2550c1c96923058da3fa0a47 (diff) | |
| parent | bd84ba8ddab8817691022cc7ef6e0bd36015e819 (diff) | |
Merge pull request #4455 from RalfJung/rustup
Rustup
Diffstat (limited to 'library/alloc/src')
| -rw-r--r-- | library/alloc/src/collections/linked_list.rs | 39 | ||||
| -rw-r--r-- | library/alloc/src/string.rs | 8 |
2 files changed, 7 insertions, 40 deletions
diff --git a/library/alloc/src/collections/linked_list.rs b/library/alloc/src/collections/linked_list.rs index d03c1969b5b..70c344e49b7 100644 --- a/library/alloc/src/collections/linked_list.rs +++ b/library/alloc/src/collections/linked_list.rs @@ -1031,7 +1031,7 @@ impl<T, A: Allocator> LinkedList<T, A> { /// Retains only the elements specified by the predicate. /// - /// In other words, remove all elements `e` for which `f(&e)` returns false. + /// In other words, remove all elements `e` for which `f(&mut 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. /// @@ -1047,7 +1047,7 @@ impl<T, A: Allocator> LinkedList<T, A> { /// d.push_front(2); /// d.push_front(3); /// - /// d.retain(|&x| x % 2 == 0); + /// d.retain(|&mut x| x % 2 == 0); /// /// assert_eq!(d.pop_front(), Some(2)); /// assert_eq!(d.pop_front(), None); @@ -1075,41 +1075,6 @@ impl<T, A: Allocator> LinkedList<T, A> { #[unstable(feature = "linked_list_retain", issue = "114135")] pub fn retain<F>(&mut self, mut f: F) where - F: FnMut(&T) -> bool, - { - self.retain_mut(|elem| f(elem)); - } - - /// Retains only the elements specified by the predicate. - /// - /// In other words, remove all elements `e` for which `f(&mut 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 - /// - /// ``` - /// #![feature(linked_list_retain)] - /// use std::collections::LinkedList; - /// - /// let mut d = LinkedList::new(); - /// - /// d.push_front(1); - /// d.push_front(2); - /// d.push_front(3); - /// - /// d.retain_mut(|x| if *x % 2 == 0 { - /// *x += 1; - /// true - /// } else { - /// false - /// }); - /// assert_eq!(d.pop_front(), Some(3)); - /// assert_eq!(d.pop_front(), None); - /// ``` - #[unstable(feature = "linked_list_retain", issue = "114135")] - pub fn retain_mut<F>(&mut self, mut f: F) - where F: FnMut(&mut T) -> bool, { let mut cursor = self.cursor_front_mut(); diff --git a/library/alloc/src/string.rs b/library/alloc/src/string.rs index 5f69f699867..187d1ca71d9 100644 --- a/library/alloc/src/string.rs +++ b/library/alloc/src/string.rs @@ -156,7 +156,7 @@ use crate::vec::{self, Vec}; /// ``` /// /// Next, what should `s[i]` return? Because indexing returns a reference -/// to underlying data it could be `&u8`, `&[u8]`, or something else similar. +/// to underlying data it could be `&u8`, `&[u8]`, or something similar. /// Since we're only providing one index, `&u8` makes the most sense but that /// might not be what the user expects and can be explicitly achieved with /// [`as_bytes()`]: @@ -2875,7 +2875,8 @@ macro_rules! impl_to_string { out = String::with_capacity(SIZE); } - out.push_str(self.unsigned_abs()._fmt(&mut buf)); + // SAFETY: `buf` is always big enough to contain all the digits. + unsafe { out.push_str(self.unsigned_abs()._fmt(&mut buf)); } out } } @@ -2887,7 +2888,8 @@ macro_rules! impl_to_string { const SIZE: usize = $unsigned::MAX.ilog10() as usize + 1; let mut buf = [core::mem::MaybeUninit::<u8>::uninit(); SIZE]; - self._fmt(&mut buf).to_string() + // SAFETY: `buf` is always big enough to contain all the digits. + unsafe { self._fmt(&mut buf).to_string() } } } )* |
