Skip to content

Commit 6d05636

Browse files
committed
Add impl TrustedLen on BTree{Map,Set} iterators
1 parent 7b9905e commit 6d05636

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

library/alloc/src/collections/btree/map.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use core::cmp::Ordering;
33
use core::error::Error;
44
use core::fmt::{self, Debug};
55
use core::hash::{Hash, Hasher};
6-
use core::iter::FusedIterator;
6+
use core::iter::{FusedIterator, TrustedLen};
77
use core::marker::PhantomData;
88
use core::mem::{self, ManuallyDrop};
99
use core::ops::{Bound, Index, RangeBounds};
@@ -1624,6 +1624,9 @@ impl<K, V> ExactSizeIterator for Iter<'_, K, V> {
16241624
}
16251625
}
16261626

1627+
#[unstable(feature = "trusted_len", issue = "37572")]
1628+
unsafe impl<K, V> TrustedLen for Iter<'_, K, V> {}
1629+
16271630
#[stable(feature = "rust1", since = "1.0.0")]
16281631
impl<K, V> Clone for Iter<'_, K, V> {
16291632
fn clone(&self) -> Self {
@@ -1696,6 +1699,9 @@ impl<K, V> ExactSizeIterator for IterMut<'_, K, V> {
16961699
}
16971700
}
16981701

1702+
#[unstable(feature = "trusted_len", issue = "37572")]
1703+
unsafe impl<K, V> TrustedLen for IterMut<'_, K, V> {}
1704+
16991705
#[stable(feature = "fused", since = "1.26.0")]
17001706
impl<K, V> FusedIterator for IterMut<'_, K, V> {}
17011707

@@ -1817,6 +1823,9 @@ impl<K, V, A: Allocator + Clone> ExactSizeIterator for IntoIter<K, V, A> {
18171823
}
18181824
}
18191825

1826+
#[unstable(feature = "trusted_len", issue = "37572")]
1827+
unsafe impl<K, V, A: Allocator + Clone> TrustedLen for IntoIter<K, V, A> {}
1828+
18201829
#[stable(feature = "fused", since = "1.26.0")]
18211830
impl<K, V, A: Allocator + Clone> FusedIterator for IntoIter<K, V, A> {}
18221831

@@ -1865,6 +1874,9 @@ impl<K, V> ExactSizeIterator for Keys<'_, K, V> {
18651874
}
18661875
}
18671876

1877+
#[unstable(feature = "trusted_len", issue = "37572")]
1878+
unsafe impl<K, V> TrustedLen for Keys<'_, K, V> {}
1879+
18681880
#[stable(feature = "fused", since = "1.26.0")]
18691881
impl<K, V> FusedIterator for Keys<'_, K, V> {}
18701882

@@ -1920,6 +1932,9 @@ impl<K, V> ExactSizeIterator for Values<'_, K, V> {
19201932
}
19211933
}
19221934

1935+
#[unstable(feature = "trusted_len", issue = "37572")]
1936+
unsafe impl<K, V> TrustedLen for Values<'_, K, V> {}
1937+
19231938
#[stable(feature = "fused", since = "1.26.0")]
19241939
impl<K, V> FusedIterator for Values<'_, K, V> {}
19251940

@@ -2160,6 +2175,9 @@ impl<K, V> ExactSizeIterator for ValuesMut<'_, K, V> {
21602175
}
21612176
}
21622177

2178+
#[unstable(feature = "trusted_len", issue = "37572")]
2179+
unsafe impl<K, V> TrustedLen for ValuesMut<'_, K, V> {}
2180+
21632181
#[stable(feature = "fused", since = "1.26.0")]
21642182
impl<K, V> FusedIterator for ValuesMut<'_, K, V> {}
21652183

@@ -2222,6 +2240,9 @@ impl<K, V, A: Allocator + Clone> ExactSizeIterator for IntoKeys<K, V, A> {
22222240
}
22232241
}
22242242

2243+
#[unstable(feature = "trusted_len", issue = "37572")]
2244+
unsafe impl<K, V, A: Allocator + Clone> TrustedLen for IntoKeys<K, V, A> {}
2245+
22252246
#[stable(feature = "map_into_keys_values", since = "1.54.0")]
22262247
impl<K, V, A: Allocator + Clone> FusedIterator for IntoKeys<K, V, A> {}
22272248

@@ -2273,6 +2294,9 @@ impl<K, V, A: Allocator + Clone> ExactSizeIterator for IntoValues<K, V, A> {
22732294
}
22742295
}
22752296

2297+
#[unstable(feature = "trusted_len", issue = "37572")]
2298+
unsafe impl<K, V, A: Allocator + Clone> TrustedLen for IntoValues<K, V, A> {}
2299+
22762300
#[stable(feature = "map_into_keys_values", since = "1.54.0")]
22772301
impl<K, V, A: Allocator + Clone> FusedIterator for IntoValues<K, V, A> {}
22782302

library/alloc/src/collections/btree/set.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use core::cmp::Ordering::{self, Equal, Greater, Less};
33
use core::cmp::{max, min};
44
use core::fmt::{self, Debug};
55
use core::hash::{Hash, Hasher};
6-
use core::iter::{FusedIterator, Peekable};
6+
use core::iter::{FusedIterator, Peekable, TrustedLen};
77
use core::mem::ManuallyDrop;
88
use core::ops::{BitAnd, BitOr, BitXor, Bound, RangeBounds, Sub};
99

@@ -1753,6 +1753,7 @@ impl<T> Clone for Iter<'_, T> {
17531753
Iter { iter: self.iter.clone() }
17541754
}
17551755
}
1756+
17561757
#[stable(feature = "rust1", since = "1.0.0")]
17571758
impl<'a, T> Iterator for Iter<'a, T> {
17581759
type Item = &'a T;
@@ -1783,19 +1784,24 @@ impl<'a, T> Iterator for Iter<'a, T> {
17831784
self.next_back()
17841785
}
17851786
}
1787+
17861788
#[stable(feature = "rust1", since = "1.0.0")]
17871789
impl<'a, T> DoubleEndedIterator for Iter<'a, T> {
17881790
fn next_back(&mut self) -> Option<&'a T> {
17891791
self.iter.next_back()
17901792
}
17911793
}
1794+
17921795
#[stable(feature = "rust1", since = "1.0.0")]
17931796
impl<T> ExactSizeIterator for Iter<'_, T> {
17941797
fn len(&self) -> usize {
17951798
self.iter.len()
17961799
}
17971800
}
17981801

1802+
#[unstable(feature = "trusted_len", issue = "37572")]
1803+
unsafe impl<T> TrustedLen for Iter<'_, T> {}
1804+
17991805
#[stable(feature = "fused", since = "1.26.0")]
18001806
impl<T> FusedIterator for Iter<'_, T> {}
18011807

@@ -1832,13 +1838,17 @@ impl<T, A: Allocator + Clone> DoubleEndedIterator for IntoIter<T, A> {
18321838
self.iter.next_back().map(|(k, _)| k)
18331839
}
18341840
}
1841+
18351842
#[stable(feature = "rust1", since = "1.0.0")]
18361843
impl<T, A: Allocator + Clone> ExactSizeIterator for IntoIter<T, A> {
18371844
fn len(&self) -> usize {
18381845
self.iter.len()
18391846
}
18401847
}
18411848

1849+
#[unstable(feature = "trusted_len", issue = "37572")]
1850+
unsafe impl<T, A: Allocator + Clone> TrustedLen for IntoIter<T, A> {}
1851+
18421852
#[stable(feature = "fused", since = "1.26.0")]
18431853
impl<T, A: Allocator + Clone> FusedIterator for IntoIter<T, A> {}
18441854

0 commit comments

Comments
 (0)