Skip to content

Commit d4e4335

Browse files
author
blake2-ppc
committed
---
yaml --- r: 64845 b: refs/heads/snap-stage3 c: f8ae526 h: refs/heads/master i: 64843: a0edbd9 v: v3
1 parent daf9620 commit d4e4335

File tree

5 files changed

+52
-22
lines changed

5 files changed

+52
-22
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 2d28d645422c1617be58c8ca7ad9a457264ca850
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: f68621326ec295de6fd383a5230b807049ec4820
4+
refs/heads/snap-stage3: f8ae526f707c9a9e0540b80209838d2e75dc960b
55
refs/heads/try: 7b78b52e602bb3ea8174f9b2006bff3315f03ef9
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b

branches/snap-stage3/src/libextra/dlist.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
use std::cast;
2626
use std::ptr;
2727
use std::util;
28-
use std::iterator::{FromIterator, Invert};
28+
use std::iterator::{FromIterator, Extendable, Invert};
2929

3030
use container::Deque;
3131

@@ -541,11 +541,17 @@ impl<A> DoubleEndedIterator<A> for ConsumeIterator<A> {
541541
impl<A, T: Iterator<A>> FromIterator<A, T> for DList<A> {
542542
fn from_iterator(iterator: &mut T) -> DList<A> {
543543
let mut ret = DList::new();
544-
for iterator.advance |elt| { ret.push_back(elt); }
544+
ret.extend(iterator);
545545
ret
546546
}
547547
}
548548

549+
impl<A, T: Iterator<A>> Extendable<A, T> for DList<A> {
550+
fn extend(&mut self, iterator: &mut T) {
551+
for iterator.advance |elt| { self.push_back(elt); }
552+
}
553+
}
554+
549555
impl<A: Eq> Eq for DList<A> {
550556
fn eq(&self, other: &DList<A>) -> bool {
551557
self.len() == other.len() &&

branches/snap-stage3/src/libextra/priority_queue.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use std::clone::Clone;
1616
use std::unstable::intrinsics::{move_val_init, init};
1717
use std::util::{replace, swap};
1818
use std::vec;
19-
use std::iterator::FromIterator;
19+
use std::iterator::{FromIterator, Extendable};
2020

2121
/// A priority queue implemented with a binary heap
2222
#[deriving(Clone)]
@@ -191,17 +191,24 @@ impl<'self, T> Iterator<&'self T> for PriorityQueueIterator<'self, T> {
191191
}
192192

193193
impl<T: Ord, Iter: Iterator<T>> FromIterator<T, Iter> for PriorityQueue<T> {
194-
pub fn from_iterator(iter: &mut Iter) -> PriorityQueue<T> {
194+
fn from_iterator(iter: &mut Iter) -> PriorityQueue<T> {
195+
let mut q = PriorityQueue::new();
196+
q.extend(iter);
197+
198+
q
199+
}
200+
}
201+
202+
impl<T: Ord, Iter: Iterator<T>> Extendable<T, Iter> for PriorityQueue<T> {
203+
fn extend(&mut self, iter: &mut Iter) {
195204
let (lower, _) = iter.size_hint();
196205

197-
let mut q = PriorityQueue::new();
198-
q.reserve_at_least(lower);
206+
let len = self.capacity();
207+
self.reserve_at_least(len + lower);
199208

200209
for iter.advance |elem| {
201-
q.push(elem);
210+
self.push(elem);
202211
}
203-
204-
q
205212
}
206213
}
207214

branches/snap-stage3/src/libextra/ringbuf.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
use std::num;
1717
use std::uint;
1818
use std::vec;
19-
use std::iterator::{FromIterator, Invert, RandomAccessIterator};
19+
use std::iterator::{FromIterator, Invert, RandomAccessIterator, Extendable};
2020

2121
use container::Deque;
2222

@@ -325,11 +325,18 @@ impl<A: Eq> Eq for RingBuf<A> {
325325

326326
impl<A, T: Iterator<A>> FromIterator<A, T> for RingBuf<A> {
327327
fn from_iterator(iterator: &mut T) -> RingBuf<A> {
328-
let mut deq = RingBuf::new();
328+
let (lower, _) = iterator.size_hint();
329+
let mut deq = RingBuf::with_capacity(lower);
330+
deq.extend(iterator);
331+
deq
332+
}
333+
}
334+
335+
impl<A, T: Iterator<A>> Extendable<A, T> for RingBuf<A> {
336+
fn extend(&mut self, iterator: &mut T) {
329337
for iterator.advance |elt| {
330-
deq.push_back(elt);
338+
self.push_back(elt);
331339
}
332-
deq
333340
}
334341
}
335342

branches/snap-stage3/src/libextra/treemap.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
use std::num;
1717
use std::util::{swap, replace};
18-
use std::iterator::FromIterator;
18+
use std::iterator::{FromIterator, Extendable};
1919

2020
// This is implemented as an AA tree, which is a simplified variation of
2121
// a red-black tree where red (horizontal) nodes can only be added
@@ -753,26 +753,36 @@ fn remove<K: TotalOrd, V>(node: &mut Option<~TreeNode<K, V>>,
753753
}
754754

755755
impl<K: TotalOrd, V, T: Iterator<(K, V)>> FromIterator<(K, V), T> for TreeMap<K, V> {
756-
pub fn from_iterator(iter: &mut T) -> TreeMap<K, V> {
756+
fn from_iterator(iter: &mut T) -> TreeMap<K, V> {
757757
let mut map = TreeMap::new();
758+
map.extend(iter);
759+
map
760+
}
761+
}
758762

763+
impl<K: TotalOrd, V, T: Iterator<(K, V)>> Extendable<(K, V), T> for TreeMap<K, V> {
764+
#[inline]
765+
fn extend(&mut self, iter: &mut T) {
759766
for iter.advance |(k, v)| {
760-
map.insert(k, v);
767+
self.insert(k, v);
761768
}
762-
763-
map
764769
}
765770
}
766771

767772
impl<T: TotalOrd, Iter: Iterator<T>> FromIterator<T, Iter> for TreeSet<T> {
768773
pub fn from_iterator(iter: &mut Iter) -> TreeSet<T> {
769774
let mut set = TreeSet::new();
775+
set.extend(iter);
776+
set
777+
}
778+
}
770779

780+
impl<T: TotalOrd, Iter: Iterator<T>> Extendable<T, Iter> for TreeSet<T> {
781+
#[inline]
782+
fn extend(&mut self, iter: &mut Iter) {
771783
for iter.advance |elem| {
772-
set.insert(elem);
784+
self.insert(elem);
773785
}
774-
775-
set
776786
}
777787
}
778788

0 commit comments

Comments
 (0)