From 6d0563664557279ad15df82a9eced806e1c44adb Mon Sep 17 00:00:00 2001 From: Yotam Ofek Date: Thu, 27 Nov 2025 14:47:54 +0200 Subject: [PATCH] Add `impl TrustedLen` on `BTree{Map,Set}` iterators --- library/alloc/src/collections/btree/map.rs | 26 +++++++++++++++++++++- library/alloc/src/collections/btree/set.rs | 12 +++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/library/alloc/src/collections/btree/map.rs b/library/alloc/src/collections/btree/map.rs index 766f4589177a8..71ed8ca1468a7 100644 --- a/library/alloc/src/collections/btree/map.rs +++ b/library/alloc/src/collections/btree/map.rs @@ -3,7 +3,7 @@ use core::cmp::Ordering; use core::error::Error; use core::fmt::{self, Debug}; use core::hash::{Hash, Hasher}; -use core::iter::FusedIterator; +use core::iter::{FusedIterator, TrustedLen}; use core::marker::PhantomData; use core::mem::{self, ManuallyDrop}; use core::ops::{Bound, Index, RangeBounds}; @@ -1624,6 +1624,9 @@ impl ExactSizeIterator for Iter<'_, K, V> { } } +#[unstable(feature = "trusted_len", issue = "37572")] +unsafe impl TrustedLen for Iter<'_, K, V> {} + #[stable(feature = "rust1", since = "1.0.0")] impl Clone for Iter<'_, K, V> { fn clone(&self) -> Self { @@ -1696,6 +1699,9 @@ impl ExactSizeIterator for IterMut<'_, K, V> { } } +#[unstable(feature = "trusted_len", issue = "37572")] +unsafe impl TrustedLen for IterMut<'_, K, V> {} + #[stable(feature = "fused", since = "1.26.0")] impl FusedIterator for IterMut<'_, K, V> {} @@ -1817,6 +1823,9 @@ impl ExactSizeIterator for IntoIter { } } +#[unstable(feature = "trusted_len", issue = "37572")] +unsafe impl TrustedLen for IntoIter {} + #[stable(feature = "fused", since = "1.26.0")] impl FusedIterator for IntoIter {} @@ -1865,6 +1874,9 @@ impl ExactSizeIterator for Keys<'_, K, V> { } } +#[unstable(feature = "trusted_len", issue = "37572")] +unsafe impl TrustedLen for Keys<'_, K, V> {} + #[stable(feature = "fused", since = "1.26.0")] impl FusedIterator for Keys<'_, K, V> {} @@ -1920,6 +1932,9 @@ impl ExactSizeIterator for Values<'_, K, V> { } } +#[unstable(feature = "trusted_len", issue = "37572")] +unsafe impl TrustedLen for Values<'_, K, V> {} + #[stable(feature = "fused", since = "1.26.0")] impl FusedIterator for Values<'_, K, V> {} @@ -2160,6 +2175,9 @@ impl ExactSizeIterator for ValuesMut<'_, K, V> { } } +#[unstable(feature = "trusted_len", issue = "37572")] +unsafe impl TrustedLen for ValuesMut<'_, K, V> {} + #[stable(feature = "fused", since = "1.26.0")] impl FusedIterator for ValuesMut<'_, K, V> {} @@ -2222,6 +2240,9 @@ impl ExactSizeIterator for IntoKeys { } } +#[unstable(feature = "trusted_len", issue = "37572")] +unsafe impl TrustedLen for IntoKeys {} + #[stable(feature = "map_into_keys_values", since = "1.54.0")] impl FusedIterator for IntoKeys {} @@ -2273,6 +2294,9 @@ impl ExactSizeIterator for IntoValues { } } +#[unstable(feature = "trusted_len", issue = "37572")] +unsafe impl TrustedLen for IntoValues {} + #[stable(feature = "map_into_keys_values", since = "1.54.0")] impl FusedIterator for IntoValues {} diff --git a/library/alloc/src/collections/btree/set.rs b/library/alloc/src/collections/btree/set.rs index 28d26699d7d2c..fd27e87b1f470 100644 --- a/library/alloc/src/collections/btree/set.rs +++ b/library/alloc/src/collections/btree/set.rs @@ -3,7 +3,7 @@ use core::cmp::Ordering::{self, Equal, Greater, Less}; use core::cmp::{max, min}; use core::fmt::{self, Debug}; use core::hash::{Hash, Hasher}; -use core::iter::{FusedIterator, Peekable}; +use core::iter::{FusedIterator, Peekable, TrustedLen}; use core::mem::ManuallyDrop; use core::ops::{BitAnd, BitOr, BitXor, Bound, RangeBounds, Sub}; @@ -1753,6 +1753,7 @@ impl Clone for Iter<'_, T> { Iter { iter: self.iter.clone() } } } + #[stable(feature = "rust1", since = "1.0.0")] impl<'a, T> Iterator for Iter<'a, T> { type Item = &'a T; @@ -1783,12 +1784,14 @@ impl<'a, T> Iterator for Iter<'a, T> { self.next_back() } } + #[stable(feature = "rust1", since = "1.0.0")] impl<'a, T> DoubleEndedIterator for Iter<'a, T> { fn next_back(&mut self) -> Option<&'a T> { self.iter.next_back() } } + #[stable(feature = "rust1", since = "1.0.0")] impl ExactSizeIterator for Iter<'_, T> { fn len(&self) -> usize { @@ -1796,6 +1799,9 @@ impl ExactSizeIterator for Iter<'_, T> { } } +#[unstable(feature = "trusted_len", issue = "37572")] +unsafe impl TrustedLen for Iter<'_, T> {} + #[stable(feature = "fused", since = "1.26.0")] impl FusedIterator for Iter<'_, T> {} @@ -1832,6 +1838,7 @@ impl DoubleEndedIterator for IntoIter { self.iter.next_back().map(|(k, _)| k) } } + #[stable(feature = "rust1", since = "1.0.0")] impl ExactSizeIterator for IntoIter { fn len(&self) -> usize { @@ -1839,6 +1846,9 @@ impl ExactSizeIterator for IntoIter { } } +#[unstable(feature = "trusted_len", issue = "37572")] +unsafe impl TrustedLen for IntoIter {} + #[stable(feature = "fused", since = "1.26.0")] impl FusedIterator for IntoIter {}