提交 4a9d1904 编写于 作者: A Alexis

make Extend use IntoIterator

This breaks all implementors of Extend, as they must now accept IntoIterator instead of Iterator. The fix for this is generally trivial (change the bound, and maybe call into_iter() on the argument to get the old argument).

Users of Extend should be unaffected because Iterators are IntoIterator.

[breaking-change]
上级 5fa9de16
......@@ -677,7 +677,8 @@ fn into_iter(self) -> Iter<'a, T> {
#[stable(feature = "rust1", since = "1.0.0")]
impl<T: Ord> Extend<T> for BinaryHeap<T> {
fn extend<Iter: Iterator<Item=T>>(&mut self, iter: Iter) {
fn extend<I: IntoIterator<Item=T>>(&mut self, iterable: I) {
let iter = iterable.into_iter();
let (lower, _) = iter.size_hint();
self.reserve(lower);
......
......@@ -934,7 +934,8 @@ fn from_iter<I:Iterator<Item=bool>>(iterator: I) -> BitVec {
#[stable(feature = "rust1", since = "1.0.0")]
impl Extend<bool> for BitVec {
#[inline]
fn extend<I: Iterator<Item=bool>>(&mut self, iterator: I) {
fn extend<I: IntoIterator<Item=bool>>(&mut self, iterable: I) {
let iterator = iterable.into_iter();
let (min, _) = iterator.size_hint();
self.reserve(min);
for element in iterator {
......@@ -1143,8 +1144,8 @@ fn from_iter<I:Iterator<Item=usize>>(iterator: I) -> BitSet {
#[stable(feature = "rust1", since = "1.0.0")]
impl Extend<usize> for BitSet {
#[inline]
fn extend<I: Iterator<Item=usize>>(&mut self, iterator: I) {
for i in iterator {
fn extend<I: IntoIterator<Item=usize>>(&mut self, iter: I) {
for i in iter {
self.insert(i);
}
}
......
......@@ -836,7 +836,7 @@ fn from_iter<T: Iterator<Item=(K, V)>>(iter: T) -> BTreeMap<K, V> {
#[stable(feature = "rust1", since = "1.0.0")]
impl<K: Ord, V> Extend<(K, V)> for BTreeMap<K, V> {
#[inline]
fn extend<T: Iterator<Item=(K, V)>>(&mut self, iter: T) {
fn extend<T: IntoIterator<Item=(K, V)>>(&mut self, iter: T) {
for (k, v) in iter {
self.insert(k, v);
}
......
......@@ -503,7 +503,7 @@ fn into_iter(self) -> Iter<'a, T> {
#[stable(feature = "rust1", since = "1.0.0")]
impl<T: Ord> Extend<T> for BTreeSet<T> {
#[inline]
fn extend<Iter: Iterator<Item=T>>(&mut self, iter: Iter) {
fn extend<Iter: IntoIterator<Item=T>>(&mut self, iter: Iter) {
for elem in iter {
self.insert(elem);
}
......
......@@ -268,8 +268,8 @@ fn into_iter(self) -> Iter<E> {
}
impl<E:CLike> Extend<E> for EnumSet<E> {
fn extend<I: Iterator<Item=E>>(&mut self, iterator: I) {
for element in iterator {
fn extend<I: IntoIterator<Item=E>>(&mut self, iter: I) {
for element in iter {
self.insert(element);
}
}
......
......@@ -872,8 +872,8 @@ fn into_iter(mut self) -> IterMut<'a, T> {
#[stable(feature = "rust1", since = "1.0.0")]
impl<A> Extend<A> for LinkedList<A> {
fn extend<T: Iterator<Item=A>>(&mut self, iterator: T) {
for elt in iterator { self.push_back(elt); }
fn extend<T: IntoIterator<Item=A>>(&mut self, iter: T) {
for elt in iter { self.push_back(elt); }
}
}
......
......@@ -21,7 +21,7 @@
use core::error::Error;
use core::fmt;
use core::hash;
use core::iter::FromIterator;
use core::iter::{IntoIterator, FromIterator};
use core::mem;
use core::ops::{self, Deref, Add, Index};
use core::ptr;
......@@ -728,7 +728,8 @@ fn from_iter<I:Iterator<Item=&'a str>>(iterator: I) -> String {
#[unstable(feature = "collections",
reason = "waiting on Extend stabilization")]
impl Extend<char> for String {
fn extend<I:Iterator<Item=char>>(&mut self, iterator: I) {
fn extend<I: IntoIterator<Item=char>>(&mut self, iterable: I) {
let iterator = iterable.into_iter();
let (lower_bound, _) = iterator.size_hint();
self.reserve(lower_bound);
for ch in iterator {
......@@ -740,7 +741,8 @@ fn extend<I:Iterator<Item=char>>(&mut self, iterator: I) {
#[unstable(feature = "collections",
reason = "waiting on Extend stabilization")]
impl<'a> Extend<&'a str> for String {
fn extend<I: Iterator<Item=&'a str>>(&mut self, iterator: I) {
fn extend<I: IntoIterator<Item=&'a str>>(&mut self, iterable: I) {
let iterator = iterable.into_iter();
// A guess that at least one byte per iterator element will be needed.
let (lower_bound, _) = iterator.size_hint();
self.reserve(lower_bound);
......
......@@ -1480,7 +1480,8 @@ fn into_iter(mut self) -> slice::IterMut<'a, T> {
#[unstable(feature = "collections", reason = "waiting on Extend stability")]
impl<T> Extend<T> for Vec<T> {
#[inline]
fn extend<I: Iterator<Item=T>>(&mut self, iterator: I) {
fn extend<I: IntoIterator<Item=T>>(&mut self, iterable: I) {
let iterator = iterable.into_iter();
let (lower, _) = iterator.size_hint();
self.reserve(lower);
for element in iterator {
......
......@@ -1741,8 +1741,8 @@ fn into_iter(mut self) -> IterMut<'a, T> {
#[stable(feature = "rust1", since = "1.0.0")]
impl<A> Extend<A> for VecDeque<A> {
fn extend<T: Iterator<Item=A>>(&mut self, iterator: T) {
for elt in iterator {
fn extend<T: IntoIterator<Item=A>>(&mut self, iter: T) {
for elt in iter {
self.push_back(elt);
}
}
......
......@@ -700,7 +700,7 @@ fn into_iter(mut self) -> IterMut<'a, T> {
#[stable(feature = "rust1", since = "1.0.0")]
impl<V> Extend<(usize, V)> for VecMap<V> {
fn extend<Iter: Iterator<Item=(usize, V)>>(&mut self, iter: Iter) {
fn extend<I: IntoIterator<Item=(usize, V)>>(&mut self, iter: I) {
for (k, v) in iter {
self.insert(k, v);
}
......
......@@ -147,7 +147,7 @@ fn into_iter(self) -> I {
pub trait Extend<A> {
/// Extend a container with the elements yielded by an arbitrary iterator
#[stable(feature = "rust1", since = "1.0.0")]
fn extend<T: Iterator<Item=A>>(&mut self, iterator: T);
fn extend<T: IntoIterator<Item=A>>(&mut self, iterable: T);
}
/// An extension trait providing numerous methods applicable to all iterators.
......
......@@ -1570,7 +1570,7 @@ impl<K, V, S, H> Extend<(K, V)> for HashMap<K, V, S>
S: HashState<Hasher=H>,
H: hash::Hasher<Output=u64>
{
fn extend<T: Iterator<Item=(K, V)>>(&mut self, iter: T) {
fn extend<T: IntoIterator<Item=(K, V)>>(&mut self, iter: T) {
for (k, v) in iter {
self.insert(k, v);
}
......
......@@ -636,7 +636,7 @@ impl<T, S, H> Extend<T> for HashSet<T, S>
S: HashState<Hasher=H>,
H: hash::Hasher<Output=u64>
{
fn extend<I: Iterator<Item=T>>(&mut self, iter: I) {
fn extend<I: IntoIterator<Item=T>>(&mut self, iter: I) {
for k in iter {
self.insert(k);
}
......
......@@ -110,7 +110,7 @@
use ascii::*;
use borrow::BorrowFrom;
use cmp;
use iter;
use iter::{self, IntoIterator};
use mem;
use ops::{self, Deref};
use string::CowString;
......@@ -961,7 +961,7 @@ fn from_iter<I: Iterator<Item = &'a P>>(iter: I) -> PathBuf {
}
impl<'a, P: ?Sized + 'a> iter::Extend<&'a P> for PathBuf where P: AsPath {
fn extend<I: Iterator<Item = &'a P>>(&mut self, iter: I) {
fn extend<I: IntoIterator<Item = &'a P>>(&mut self, iter: I) {
for p in iter {
self.push(p)
}
......
......@@ -32,7 +32,7 @@
use cmp;
use fmt;
use hash::{Hash, Writer, Hasher};
use iter::FromIterator;
use iter::{FromIterator, IntoIterator};
use mem;
use num::Int;
use ops;
......@@ -368,7 +368,8 @@ fn from_iter<T: Iterator<Item=CodePoint>>(iterator: T) -> Wtf8Buf {
/// This replaces surrogate code point pairs with supplementary code points,
/// like concatenating ill-formed UTF-16 strings effectively would.
impl Extend<CodePoint> for Wtf8Buf {
fn extend<T: Iterator<Item=CodePoint>>(&mut self, iterator: T) {
fn extend<T: IntoIterator<Item=CodePoint>>(&mut self, iterable: T) {
let iterator = iterable.into_iter();
let (low, _high) = iterator.size_hint();
// Lower bound of one byte per code point (ASCII only)
self.bytes.reserve(low);
......
......@@ -11,7 +11,7 @@
use self::SmallVectorRepr::*;
use self::IntoIterRepr::*;
use std::iter::FromIterator;
use std::iter::{IntoIterator, FromIterator};
use std::mem;
use std::slice;
use std::vec;
......@@ -38,7 +38,7 @@ fn from_iter<I: Iterator<Item=T>>(iter: I) -> SmallVector<T> {
}
impl<T> Extend<T> for SmallVector<T> {
fn extend<I: Iterator<Item=T>>(&mut self, iter: I) {
fn extend<I: IntoIterator<Item=T>>(&mut self, iter: I) {
for val in iter {
self.push(val);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册