Skip to content

Commit 4a9d190

Browse files
committed
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]
1 parent 5fa9de1 commit 4a9d190

File tree

16 files changed

+32
-26
lines changed

16 files changed

+32
-26
lines changed

src/libcollections/binary_heap.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -677,7 +677,8 @@ impl<'a, T> IntoIterator for &'a BinaryHeap<T> where T: Ord {
677677

678678
#[stable(feature = "rust1", since = "1.0.0")]
679679
impl<T: Ord> Extend<T> for BinaryHeap<T> {
680-
fn extend<Iter: Iterator<Item=T>>(&mut self, iter: Iter) {
680+
fn extend<I: IntoIterator<Item=T>>(&mut self, iterable: I) {
681+
let iter = iterable.into_iter();
681682
let (lower, _) = iter.size_hint();
682683

683684
self.reserve(lower);

src/libcollections/bit.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -934,7 +934,8 @@ impl FromIterator<bool> for BitVec {
934934
#[stable(feature = "rust1", since = "1.0.0")]
935935
impl Extend<bool> for BitVec {
936936
#[inline]
937-
fn extend<I: Iterator<Item=bool>>(&mut self, iterator: I) {
937+
fn extend<I: IntoIterator<Item=bool>>(&mut self, iterable: I) {
938+
let iterator = iterable.into_iter();
938939
let (min, _) = iterator.size_hint();
939940
self.reserve(min);
940941
for element in iterator {
@@ -1143,8 +1144,8 @@ impl FromIterator<usize> for BitSet {
11431144
#[stable(feature = "rust1", since = "1.0.0")]
11441145
impl Extend<usize> for BitSet {
11451146
#[inline]
1146-
fn extend<I: Iterator<Item=usize>>(&mut self, iterator: I) {
1147-
for i in iterator {
1147+
fn extend<I: IntoIterator<Item=usize>>(&mut self, iter: I) {
1148+
for i in iter {
11481149
self.insert(i);
11491150
}
11501151
}

src/libcollections/btree/map.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,7 @@ impl<K: Ord, V> FromIterator<(K, V)> for BTreeMap<K, V> {
836836
#[stable(feature = "rust1", since = "1.0.0")]
837837
impl<K: Ord, V> Extend<(K, V)> for BTreeMap<K, V> {
838838
#[inline]
839-
fn extend<T: Iterator<Item=(K, V)>>(&mut self, iter: T) {
839+
fn extend<T: IntoIterator<Item=(K, V)>>(&mut self, iter: T) {
840840
for (k, v) in iter {
841841
self.insert(k, v);
842842
}

src/libcollections/btree/set.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ impl<'a, T> IntoIterator for &'a BTreeSet<T> {
503503
#[stable(feature = "rust1", since = "1.0.0")]
504504
impl<T: Ord> Extend<T> for BTreeSet<T> {
505505
#[inline]
506-
fn extend<Iter: Iterator<Item=T>>(&mut self, iter: Iter) {
506+
fn extend<Iter: IntoIterator<Item=T>>(&mut self, iter: Iter) {
507507
for elem in iter {
508508
self.insert(elem);
509509
}

src/libcollections/enum_set.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,8 @@ impl<'a, E> IntoIterator for &'a EnumSet<E> where E: CLike {
268268
}
269269

270270
impl<E:CLike> Extend<E> for EnumSet<E> {
271-
fn extend<I: Iterator<Item=E>>(&mut self, iterator: I) {
272-
for element in iterator {
271+
fn extend<I: IntoIterator<Item=E>>(&mut self, iter: I) {
272+
for element in iter {
273273
self.insert(element);
274274
}
275275
}

src/libcollections/linked_list.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -872,8 +872,8 @@ impl<'a, T> IntoIterator for &'a mut LinkedList<T> {
872872

873873
#[stable(feature = "rust1", since = "1.0.0")]
874874
impl<A> Extend<A> for LinkedList<A> {
875-
fn extend<T: Iterator<Item=A>>(&mut self, iterator: T) {
876-
for elt in iterator { self.push_back(elt); }
875+
fn extend<T: IntoIterator<Item=A>>(&mut self, iter: T) {
876+
for elt in iter { self.push_back(elt); }
877877
}
878878
}
879879

src/libcollections/string.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use core::default::Default;
2121
use core::error::Error;
2222
use core::fmt;
2323
use core::hash;
24-
use core::iter::FromIterator;
24+
use core::iter::{IntoIterator, FromIterator};
2525
use core::mem;
2626
use core::ops::{self, Deref, Add, Index};
2727
use core::ptr;
@@ -728,7 +728,8 @@ impl<'a> FromIterator<&'a str> for String {
728728
#[unstable(feature = "collections",
729729
reason = "waiting on Extend stabilization")]
730730
impl Extend<char> for String {
731-
fn extend<I:Iterator<Item=char>>(&mut self, iterator: I) {
731+
fn extend<I: IntoIterator<Item=char>>(&mut self, iterable: I) {
732+
let iterator = iterable.into_iter();
732733
let (lower_bound, _) = iterator.size_hint();
733734
self.reserve(lower_bound);
734735
for ch in iterator {
@@ -740,7 +741,8 @@ impl Extend<char> for String {
740741
#[unstable(feature = "collections",
741742
reason = "waiting on Extend stabilization")]
742743
impl<'a> Extend<&'a str> for String {
743-
fn extend<I: Iterator<Item=&'a str>>(&mut self, iterator: I) {
744+
fn extend<I: IntoIterator<Item=&'a str>>(&mut self, iterable: I) {
745+
let iterator = iterable.into_iter();
744746
// A guess that at least one byte per iterator element will be needed.
745747
let (lower_bound, _) = iterator.size_hint();
746748
self.reserve(lower_bound);

src/libcollections/vec.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1480,7 +1480,8 @@ impl<'a, T> IntoIterator for &'a mut Vec<T> {
14801480
#[unstable(feature = "collections", reason = "waiting on Extend stability")]
14811481
impl<T> Extend<T> for Vec<T> {
14821482
#[inline]
1483-
fn extend<I: Iterator<Item=T>>(&mut self, iterator: I) {
1483+
fn extend<I: IntoIterator<Item=T>>(&mut self, iterable: I) {
1484+
let iterator = iterable.into_iter();
14841485
let (lower, _) = iterator.size_hint();
14851486
self.reserve(lower);
14861487
for element in iterator {

src/libcollections/vec_deque.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1741,8 +1741,8 @@ impl<'a, T> IntoIterator for &'a mut VecDeque<T> {
17411741

17421742
#[stable(feature = "rust1", since = "1.0.0")]
17431743
impl<A> Extend<A> for VecDeque<A> {
1744-
fn extend<T: Iterator<Item=A>>(&mut self, iterator: T) {
1745-
for elt in iterator {
1744+
fn extend<T: IntoIterator<Item=A>>(&mut self, iter: T) {
1745+
for elt in iter {
17461746
self.push_back(elt);
17471747
}
17481748
}

src/libcollections/vec_map.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,7 @@ impl<'a, T> IntoIterator for &'a mut VecMap<T> {
700700

701701
#[stable(feature = "rust1", since = "1.0.0")]
702702
impl<V> Extend<(usize, V)> for VecMap<V> {
703-
fn extend<Iter: Iterator<Item=(usize, V)>>(&mut self, iter: Iter) {
703+
fn extend<I: IntoIterator<Item=(usize, V)>>(&mut self, iter: I) {
704704
for (k, v) in iter {
705705
self.insert(k, v);
706706
}

0 commit comments

Comments
 (0)