Skip to content

Commit 1c06f64

Browse files
committed
Auto merge of #31225 - mbrubeck:btreeset-size-hint, r=Gankro
None
2 parents 38e23e8 + 6ff177e commit 1c06f64

File tree

1 file changed

+27
-2
lines changed
  • src/libcollections/btree

1 file changed

+27
-2
lines changed

src/libcollections/btree/set.rs

+27-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// to TreeMap
1313

1414
use core::cmp::Ordering::{self, Less, Greater, Equal};
15+
use core::cmp::{min, max};
1516
use core::fmt::Debug;
1617
use core::fmt;
1718
use core::iter::{Peekable, FromIterator};
@@ -703,7 +704,9 @@ impl<'a, T> DoubleEndedIterator for Iter<'a, T> {
703704
}
704705
}
705706
#[stable(feature = "rust1", since = "1.0.0")]
706-
impl<'a, T> ExactSizeIterator for Iter<'a, T> {}
707+
impl<'a, T> ExactSizeIterator for Iter<'a, T> {
708+
fn len(&self) -> usize { self.iter.len() }
709+
}
707710

708711

709712
#[stable(feature = "rust1", since = "1.0.0")]
@@ -724,7 +727,9 @@ impl<T> DoubleEndedIterator for IntoIter<T> {
724727
}
725728
}
726729
#[stable(feature = "rust1", since = "1.0.0")]
727-
impl<T> ExactSizeIterator for IntoIter<T> {}
730+
impl<T> ExactSizeIterator for IntoIter<T> {
731+
fn len(&self) -> usize { self.iter.len() }
732+
}
728733

729734

730735
impl<'a, T> Clone for Range<'a, T> {
@@ -780,6 +785,12 @@ impl<'a, T: Ord> Iterator for Difference<'a, T> {
780785
}
781786
}
782787
}
788+
789+
fn size_hint(&self) -> (usize, Option<usize>) {
790+
let a_len = self.a.len();
791+
let b_len = self.b.len();
792+
(a_len.saturating_sub(b_len), Some(a_len))
793+
}
783794
}
784795

785796
impl<'a, T> Clone for SymmetricDifference<'a, T> {
@@ -806,6 +817,10 @@ impl<'a, T: Ord> Iterator for SymmetricDifference<'a, T> {
806817
}
807818
}
808819
}
820+
821+
fn size_hint(&self) -> (usize, Option<usize>) {
822+
(0, Some(self.a.len() + self.b.len()))
823+
}
809824
}
810825

811826
impl<'a, T> Clone for Intersection<'a, T> {
@@ -842,6 +857,10 @@ impl<'a, T: Ord> Iterator for Intersection<'a, T> {
842857
}
843858
}
844859
}
860+
861+
fn size_hint(&self) -> (usize, Option<usize>) {
862+
(0, Some(min(self.a.len(), self.b.len())))
863+
}
845864
}
846865

847866
impl<'a, T> Clone for Union<'a, T> {
@@ -868,4 +887,10 @@ impl<'a, T: Ord> Iterator for Union<'a, T> {
868887
}
869888
}
870889
}
890+
891+
fn size_hint(&self) -> (usize, Option<usize>) {
892+
let a_len = self.a.len();
893+
let b_len = self.b.len();
894+
(max(a_len, b_len), Some(a_len + b_len))
895+
}
871896
}

0 commit comments

Comments
 (0)