mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-25 23:14:12 +00:00
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]
This commit is contained in:
parent
5fa9de16df
commit
4a9d190423
@ -677,7 +677,8 @@ impl<'a, T> IntoIterator for &'a BinaryHeap<T> where T: Ord {
|
||||
|
||||
#[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 @@ impl FromIterator<bool> for 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 @@ impl FromIterator<usize> for 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 @@ impl<K: Ord, V> FromIterator<(K, V)> for 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 @@ impl<'a, T> IntoIterator for &'a BTreeSet<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 @@ impl<'a, E> IntoIterator for &'a EnumSet<E> where E: CLike {
|
||||
}
|
||||
|
||||
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 @@ impl<'a, T> IntoIterator for &'a mut LinkedList<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::default::Default;
|
||||
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 @@ impl<'a> FromIterator<&'a str> for 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 @@ impl Extend<char> for String {
|
||||
#[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 @@ impl<'a, T> IntoIterator for &'a mut Vec<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 @@ impl<'a, T> IntoIterator for &'a mut VecDeque<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 @@ impl<'a, T> IntoIterator for &'a mut VecMap<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 @@ impl<I: Iterator> IntoIterator for 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 core::prelude::*;
|
||||
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 @@ impl<'a, P: ?Sized + 'a> iter::FromIterator<&'a P> for PathBuf where P: AsPath {
|
||||
}
|
||||
|
||||
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 borrow::Cow;
|
||||
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 @@ impl FromIterator<CodePoint> for 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 @@ impl<T> FromIterator<T> for 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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user