parent
9d21acaf9b
commit
686be822ef
2 changed files with 19 additions and 19 deletions
|
@ -14,7 +14,7 @@
|
||||||
use core::cmp::Ordering::{self, Less, Greater, Equal};
|
use core::cmp::Ordering::{self, Less, Greater, Equal};
|
||||||
use core::fmt::Debug;
|
use core::fmt::Debug;
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
use core::iter::{Peekable, Map, FromIterator};
|
use core::iter::{Peekable, FromIterator};
|
||||||
use core::ops::{BitOr, BitAnd, BitXor, Sub};
|
use core::ops::{BitOr, BitAnd, BitXor, Sub};
|
||||||
|
|
||||||
use borrow::Borrow;
|
use borrow::Borrow;
|
||||||
|
@ -52,12 +52,12 @@ pub struct Iter<'a, T: 'a> {
|
||||||
/// An owning iterator over a BTreeSet's items.
|
/// An owning iterator over a BTreeSet's items.
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
pub struct IntoIter<T> {
|
pub struct IntoIter<T> {
|
||||||
iter: Map<::btree_map::IntoIter<T, ()>, fn((T, ())) -> T>,
|
iter: ::btree_map::IntoIter<T, ()>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An iterator over a sub-range of BTreeSet's items.
|
/// An iterator over a sub-range of BTreeSet's items.
|
||||||
pub struct Range<'a, T: 'a> {
|
pub struct Range<'a, T: 'a> {
|
||||||
iter: Map<::btree_map::Range<'a, T, ()>, fn((&'a T, &'a ())) -> &'a T>,
|
iter: ::btree_map::Range<'a, T, ()>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A lazy iterator producing elements in the set difference (in-order).
|
/// A lazy iterator producing elements in the set difference (in-order).
|
||||||
|
@ -160,12 +160,7 @@ impl<T: Ord> BTreeSet<T> {
|
||||||
-> Range<'a, T>
|
-> Range<'a, T>
|
||||||
where T: Borrow<Min> + Borrow<Max>
|
where T: Borrow<Min> + Borrow<Max>
|
||||||
{
|
{
|
||||||
fn first<A, B>((a, _): (A, B)) -> A {
|
Range { iter: self.map.range(min, max) }
|
||||||
a
|
|
||||||
}
|
|
||||||
let first: fn((&'a T, &'a ())) -> &'a T = first; // coerce to fn pointer
|
|
||||||
|
|
||||||
Range { iter: self.map.range(min, max).map(first) }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -548,12 +543,7 @@ impl<T> IntoIterator for BTreeSet<T> {
|
||||||
/// assert_eq!(v, [1, 2, 3, 4]);
|
/// assert_eq!(v, [1, 2, 3, 4]);
|
||||||
/// ```
|
/// ```
|
||||||
fn into_iter(self) -> IntoIter<T> {
|
fn into_iter(self) -> IntoIter<T> {
|
||||||
fn first<A, B>((a, _): (A, B)) -> A {
|
IntoIter { iter: self.map.into_iter() }
|
||||||
a
|
|
||||||
}
|
|
||||||
let first: fn((T, ())) -> T = first; // coerce to fn pointer
|
|
||||||
|
|
||||||
IntoIter { iter: self.map.into_iter().map(first) }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -721,7 +711,7 @@ impl<T> Iterator for IntoIter<T> {
|
||||||
type Item = T;
|
type Item = T;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<T> {
|
fn next(&mut self) -> Option<T> {
|
||||||
self.iter.next()
|
self.iter.next().map(|(k, _)| k)
|
||||||
}
|
}
|
||||||
fn size_hint(&self) -> (usize, Option<usize>) {
|
fn size_hint(&self) -> (usize, Option<usize>) {
|
||||||
self.iter.size_hint()
|
self.iter.size_hint()
|
||||||
|
@ -730,7 +720,7 @@ impl<T> Iterator for IntoIter<T> {
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
impl<T> DoubleEndedIterator for IntoIter<T> {
|
impl<T> DoubleEndedIterator for IntoIter<T> {
|
||||||
fn next_back(&mut self) -> Option<T> {
|
fn next_back(&mut self) -> Option<T> {
|
||||||
self.iter.next_back()
|
self.iter.next_back().map(|(k, _)| k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
|
@ -746,12 +736,12 @@ impl<'a, T> Iterator for Range<'a, T> {
|
||||||
type Item = &'a T;
|
type Item = &'a T;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<&'a T> {
|
fn next(&mut self) -> Option<&'a T> {
|
||||||
self.iter.next()
|
self.iter.next().map(|(k, _)| k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl<'a, T> DoubleEndedIterator for Range<'a, T> {
|
impl<'a, T> DoubleEndedIterator for Range<'a, T> {
|
||||||
fn next_back(&mut self) -> Option<&'a T> {
|
fn next_back(&mut self) -> Option<&'a T> {
|
||||||
self.iter.next_back()
|
self.iter.next_back().map(|(k, _)| k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -254,3 +254,13 @@ fn test_recovery() {
|
||||||
|
|
||||||
assert_eq!(s.iter().next(), None);
|
assert_eq!(s.iter().next(), None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_variance() {
|
||||||
|
use std::collections::btree_set::{IntoIter, Iter, Range};
|
||||||
|
|
||||||
|
fn set<'new>(v: BTreeSet<&'static str>) -> BTreeSet<&'new str> { v }
|
||||||
|
fn iter<'a, 'new>(v: Iter<'a, &'static str>) -> Iter<'a, &'new str> { v }
|
||||||
|
fn into_iter<'new>(v: IntoIter<&'static str>) -> IntoIter<&'new str> { v }
|
||||||
|
fn range<'a, 'new>(v: Range<'a, &'static str>) -> Range<'a, &'new str> { v }
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue