Skip to content

Commit dd16faa

Browse files
committed
Auto merge of #30998 - apasel422:btree-set-variance, r=Gankro
CC #30642 r? @gankro
2 parents a09a604 + 686be82 commit dd16faa

File tree

2 files changed

+19
-19
lines changed

2 files changed

+19
-19
lines changed

src/libcollections/btree/set.rs

+9-19
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
use core::cmp::Ordering::{self, Less, Greater, Equal};
1515
use core::fmt::Debug;
1616
use core::fmt;
17-
use core::iter::{Peekable, Map, FromIterator};
17+
use core::iter::{Peekable, FromIterator};
1818
use core::ops::{BitOr, BitAnd, BitXor, Sub};
1919

2020
use borrow::Borrow;
@@ -52,12 +52,12 @@ pub struct Iter<'a, T: 'a> {
5252
/// An owning iterator over a BTreeSet's items.
5353
#[stable(feature = "rust1", since = "1.0.0")]
5454
pub struct IntoIter<T> {
55-
iter: Map<::btree_map::IntoIter<T, ()>, fn((T, ())) -> T>,
55+
iter: ::btree_map::IntoIter<T, ()>,
5656
}
5757

5858
/// An iterator over a sub-range of BTreeSet's items.
5959
pub struct Range<'a, T: 'a> {
60-
iter: Map<::btree_map::Range<'a, T, ()>, fn((&'a T, &'a ())) -> &'a T>,
60+
iter: ::btree_map::Range<'a, T, ()>,
6161
}
6262

6363
/// A lazy iterator producing elements in the set difference (in-order).
@@ -160,12 +160,7 @@ impl<T: Ord> BTreeSet<T> {
160160
-> Range<'a, T>
161161
where T: Borrow<Min> + Borrow<Max>
162162
{
163-
fn first<A, B>((a, _): (A, B)) -> A {
164-
a
165-
}
166-
let first: fn((&'a T, &'a ())) -> &'a T = first; // coerce to fn pointer
167-
168-
Range { iter: self.map.range(min, max).map(first) }
163+
Range { iter: self.map.range(min, max) }
169164
}
170165
}
171166

@@ -548,12 +543,7 @@ impl<T> IntoIterator for BTreeSet<T> {
548543
/// assert_eq!(v, [1, 2, 3, 4]);
549544
/// ```
550545
fn into_iter(self) -> IntoIter<T> {
551-
fn first<A, B>((a, _): (A, B)) -> A {
552-
a
553-
}
554-
let first: fn((T, ())) -> T = first; // coerce to fn pointer
555-
556-
IntoIter { iter: self.map.into_iter().map(first) }
546+
IntoIter { iter: self.map.into_iter() }
557547
}
558548
}
559549

@@ -721,7 +711,7 @@ impl<T> Iterator for IntoIter<T> {
721711
type Item = T;
722712

723713
fn next(&mut self) -> Option<T> {
724-
self.iter.next()
714+
self.iter.next().map(|(k, _)| k)
725715
}
726716
fn size_hint(&self) -> (usize, Option<usize>) {
727717
self.iter.size_hint()
@@ -730,7 +720,7 @@ impl<T> Iterator for IntoIter<T> {
730720
#[stable(feature = "rust1", since = "1.0.0")]
731721
impl<T> DoubleEndedIterator for IntoIter<T> {
732722
fn next_back(&mut self) -> Option<T> {
733-
self.iter.next_back()
723+
self.iter.next_back().map(|(k, _)| k)
734724
}
735725
}
736726
#[stable(feature = "rust1", since = "1.0.0")]
@@ -746,12 +736,12 @@ impl<'a, T> Iterator for Range<'a, T> {
746736
type Item = &'a T;
747737

748738
fn next(&mut self) -> Option<&'a T> {
749-
self.iter.next()
739+
self.iter.next().map(|(k, _)| k)
750740
}
751741
}
752742
impl<'a, T> DoubleEndedIterator for Range<'a, T> {
753743
fn next_back(&mut self) -> Option<&'a T> {
754-
self.iter.next_back()
744+
self.iter.next_back().map(|(k, _)| k)
755745
}
756746
}
757747

src/libcollectionstest/btree/set.rs

+10
Original file line numberDiff line numberDiff line change
@@ -254,3 +254,13 @@ fn test_recovery() {
254254

255255
assert_eq!(s.iter().next(), None);
256256
}
257+
258+
#[test]
259+
fn test_variance() {
260+
use std::collections::btree_set::{IntoIter, Iter, Range};
261+
262+
fn set<'new>(v: BTreeSet<&'static str>) -> BTreeSet<&'new str> { v }
263+
fn iter<'a, 'new>(v: Iter<'a, &'static str>) -> Iter<'a, &'new str> { v }
264+
fn into_iter<'new>(v: IntoIter<&'static str>) -> IntoIter<&'new str> { v }
265+
fn range<'a, 'new>(v: Range<'a, &'static str>) -> Range<'a, &'new str> { v }
266+
}

0 commit comments

Comments
 (0)