Skip to content

Commit 0b96f60

Browse files
committed
Auto merge of #79245 - ssomers:btree_curb_ord_bound, r=dtolnay
BTree: remove Ord bound where it is absent elsewhere Some btree methods don't really need an Ord bound and don't have one, while some methods that more obviously don't need it, do have one. An example of the former is `iter`, even though it explicitly exposes the work of the Ord implementation (["sorted by key"](https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.iter) - but I'm not suggesting it should have the Ord bound). An example of the latter is `new`, which doesn't involve any keys whatsoever.
2 parents 4940dd4 + 9066c73 commit 0b96f60

File tree

4 files changed

+22
-20
lines changed

4 files changed

+22
-20
lines changed

Diff for: library/alloc/src/collections/btree/map.rs

+4-13
Original file line numberDiff line numberDiff line change
@@ -500,11 +500,8 @@ impl<K, V> BTreeMap<K, V> {
500500
/// assert!(a.is_empty());
501501
/// ```
502502
#[stable(feature = "rust1", since = "1.0.0")]
503-
pub fn clear(&mut self)
504-
where
505-
K: Ord,
506-
{
507-
*self = BTreeMap::new();
503+
pub fn clear(&mut self) {
504+
*self = BTreeMap { root: None, length: 0 };
508505
}
509506

510507
/// Returns a reference to the value corresponding to the key.
@@ -1227,10 +1224,7 @@ impl<K, V> BTreeMap<K, V> {
12271224
/// ```
12281225
#[inline]
12291226
#[unstable(feature = "map_into_keys_values", issue = "75294")]
1230-
pub fn into_keys(self) -> IntoKeys<K, V>
1231-
where
1232-
K: Ord,
1233-
{
1227+
pub fn into_keys(self) -> IntoKeys<K, V> {
12341228
IntoKeys { inner: self.into_iter() }
12351229
}
12361230

@@ -1253,10 +1247,7 @@ impl<K, V> BTreeMap<K, V> {
12531247
/// ```
12541248
#[inline]
12551249
#[unstable(feature = "map_into_keys_values", issue = "75294")]
1256-
pub fn into_values(self) -> IntoValues<K, V>
1257-
where
1258-
K: Ord,
1259-
{
1250+
pub fn into_values(self) -> IntoValues<K, V> {
12601251
IntoValues { inner: self.into_iter() }
12611252
}
12621253
}

Diff for: library/alloc/src/collections/btree/map/tests.rs

+15-2
Original file line numberDiff line numberDiff line change
@@ -1711,12 +1711,19 @@ fn test_ord_absence() {
17111711
fn map<K>(mut map: BTreeMap<K, ()>) {
17121712
map.is_empty();
17131713
map.len();
1714+
map.clear();
17141715
map.iter();
17151716
map.iter_mut();
17161717
map.keys();
17171718
map.values();
17181719
map.values_mut();
1719-
map.into_iter();
1720+
if true {
1721+
map.into_values();
1722+
} else if true {
1723+
map.into_iter();
1724+
} else {
1725+
map.into_keys();
1726+
}
17201727
}
17211728

17221729
fn map_debug<K: Debug>(mut map: BTreeMap<K, ()>) {
@@ -1726,7 +1733,13 @@ fn test_ord_absence() {
17261733
format!("{:?}", map.keys());
17271734
format!("{:?}", map.values());
17281735
format!("{:?}", map.values_mut());
1729-
format!("{:?}", map.into_iter());
1736+
if true {
1737+
format!("{:?}", map.into_iter());
1738+
} else if true {
1739+
format!("{:?}", map.into_keys());
1740+
} else {
1741+
format!("{:?}", map.into_values());
1742+
}
17301743
}
17311744

17321745
fn map_clone<K: Clone>(mut map: BTreeMap<K, ()>) {

Diff for: library/alloc/src/collections/btree/set.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -457,10 +457,7 @@ impl<T> BTreeSet<T> {
457457
/// assert!(v.is_empty());
458458
/// ```
459459
#[stable(feature = "rust1", since = "1.0.0")]
460-
pub fn clear(&mut self)
461-
where
462-
T: Ord,
463-
{
460+
pub fn clear(&mut self) {
464461
self.map.clear()
465462
}
466463

Diff for: library/alloc/src/collections/btree/set/tests.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -641,9 +641,10 @@ fn test_send() {
641641

642642
#[allow(dead_code)]
643643
fn test_ord_absence() {
644-
fn set<K>(set: BTreeSet<K>) {
644+
fn set<K>(mut set: BTreeSet<K>) {
645645
set.is_empty();
646646
set.len();
647+
set.clear();
647648
set.iter();
648649
set.into_iter();
649650
}

0 commit comments

Comments
 (0)