diff options
| author | bors <bors@rust-lang.org> | 2013-08-15 02:56:08 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-08-15 02:56:08 -0700 |
| commit | 790e6bb3972c3b167a8e0314305740a20f62d2f0 (patch) | |
| tree | 71defcf608360426b3d209b843465be37e46675f /src/libextra | |
| parent | 7f58552ccec3c0254d333642306a833ff790461d (diff) | |
| parent | 53487a02467ebe8816a3bdf03f16c3db958958a2 (diff) | |
| download | rust-790e6bb3972c3b167a8e0314305740a20f62d2f0.tar.gz rust-790e6bb3972c3b167a8e0314305740a20f62d2f0.zip | |
auto merge of #8490 : huonw/rust/fromiterator-extendable, r=catamorphism
If they are on the trait then it is extremely annoying to use them as
generic parameters to a function, e.g. with the iterator param on the trait
itself, if one was to pass an Extendable<int> to a function that filled it
either from a Range or a Map<VecIterator>, one needs to write something
like:
fn foo<E: Extendable<int, Range<int>> +
Extendable<int, Map<&'self int, int, VecIterator<int>>>
(e: &mut E, ...) { ... }
since using a generic, i.e. `foo<E: Extendable<int, I>, I: Iterator<int>>`
means that `foo` takes 2 type parameters, and the caller has to specify them
(which doesn't work anyway, as they'll mismatch with the iterators used in
`foo` itself).
This patch changes it to:
fn foo<E: Extendable<int>>(e: &mut E, ...) { ... }
Diffstat (limited to 'src/libextra')
| -rw-r--r-- | src/libextra/dlist.rs | 9 | ||||
| -rw-r--r-- | src/libextra/priority_queue.rs | 8 | ||||
| -rw-r--r-- | src/libextra/ringbuf.rs | 8 | ||||
| -rw-r--r-- | src/libextra/treemap.rs | 16 |
4 files changed, 20 insertions, 21 deletions
diff --git a/src/libextra/dlist.rs b/src/libextra/dlist.rs index 788ed726d0f..076e86dd5b0 100644 --- a/src/libextra/dlist.rs +++ b/src/libextra/dlist.rs @@ -573,16 +573,16 @@ impl<A> DoubleEndedIterator<A> for MoveIterator<A> { fn next_back(&mut self) -> Option<A> { self.list.pop_back() } } -impl<A, T: Iterator<A>> FromIterator<A, T> for DList<A> { - fn from_iterator(iterator: &mut T) -> DList<A> { +impl<A> FromIterator<A> for DList<A> { + fn from_iterator<T: Iterator<A>>(iterator: &mut T) -> DList<A> { let mut ret = DList::new(); ret.extend(iterator); ret } } -impl<A, T: Iterator<A>> Extendable<A, T> for DList<A> { - fn extend(&mut self, iterator: &mut T) { +impl<A> Extendable<A> for DList<A> { + fn extend<T: Iterator<A>>(&mut self, iterator: &mut T) { for elt in *iterator { self.push_back(elt); } } } @@ -1163,4 +1163,3 @@ mod tests { } } } - diff --git a/src/libextra/priority_queue.rs b/src/libextra/priority_queue.rs index 4b94219b30d..4f0fed5fccf 100644 --- a/src/libextra/priority_queue.rs +++ b/src/libextra/priority_queue.rs @@ -190,8 +190,8 @@ impl<'self, T> Iterator<&'self T> for PriorityQueueIterator<'self, T> { fn size_hint(&self) -> (uint, Option<uint>) { self.iter.size_hint() } } -impl<T: Ord, Iter: Iterator<T>> FromIterator<T, Iter> for PriorityQueue<T> { - fn from_iterator(iter: &mut Iter) -> PriorityQueue<T> { +impl<T: Ord> FromIterator<T> for PriorityQueue<T> { + fn from_iterator<Iter: Iterator<T>>(iter: &mut Iter) -> PriorityQueue<T> { let mut q = PriorityQueue::new(); q.extend(iter); @@ -199,8 +199,8 @@ impl<T: Ord, Iter: Iterator<T>> FromIterator<T, Iter> for PriorityQueue<T> { } } -impl<T: Ord, Iter: Iterator<T>> Extendable<T, Iter> for PriorityQueue<T> { - fn extend(&mut self, iter: &mut Iter) { +impl<T: Ord> Extendable<T> for PriorityQueue<T> { + fn extend<Iter: Iterator<T>>(&mut self, iter: &mut Iter) { let (lower, _) = iter.size_hint(); let len = self.capacity(); diff --git a/src/libextra/ringbuf.rs b/src/libextra/ringbuf.rs index bb9ac74bc77..a38cb580c50 100644 --- a/src/libextra/ringbuf.rs +++ b/src/libextra/ringbuf.rs @@ -322,8 +322,8 @@ impl<A: Eq> Eq for RingBuf<A> { } } -impl<A, T: Iterator<A>> FromIterator<A, T> for RingBuf<A> { - fn from_iterator(iterator: &mut T) -> RingBuf<A> { +impl<A> FromIterator<A> for RingBuf<A> { + fn from_iterator<T: Iterator<A>>(iterator: &mut T) -> RingBuf<A> { let (lower, _) = iterator.size_hint(); let mut deq = RingBuf::with_capacity(lower); deq.extend(iterator); @@ -331,8 +331,8 @@ impl<A, T: Iterator<A>> FromIterator<A, T> for RingBuf<A> { } } -impl<A, T: Iterator<A>> Extendable<A, T> for RingBuf<A> { - fn extend(&mut self, iterator: &mut T) { +impl<A> Extendable<A> for RingBuf<A> { + fn extend<T: Iterator<A>>(&mut self, iterator: &mut T) { for elt in *iterator { self.push_back(elt); } diff --git a/src/libextra/treemap.rs b/src/libextra/treemap.rs index 486a7dab5c1..118754ec028 100644 --- a/src/libextra/treemap.rs +++ b/src/libextra/treemap.rs @@ -835,34 +835,34 @@ fn remove<K: TotalOrd, V>(node: &mut Option<~TreeNode<K, V>>, }; } -impl<K: TotalOrd, V, T: Iterator<(K, V)>> FromIterator<(K, V), T> for TreeMap<K, V> { - fn from_iterator(iter: &mut T) -> TreeMap<K, V> { +impl<K: TotalOrd, V> FromIterator<(K, V)> for TreeMap<K, V> { + fn from_iterator<T: Iterator<(K, V)>>(iter: &mut T) -> TreeMap<K, V> { let mut map = TreeMap::new(); map.extend(iter); map } } -impl<K: TotalOrd, V, T: Iterator<(K, V)>> Extendable<(K, V), T> for TreeMap<K, V> { +impl<K: TotalOrd, V> Extendable<(K, V)> for TreeMap<K, V> { #[inline] - fn extend(&mut self, iter: &mut T) { + fn extend<T: Iterator<(K, V)>>(&mut self, iter: &mut T) { for (k, v) in *iter { self.insert(k, v); } } } -impl<T: TotalOrd, Iter: Iterator<T>> FromIterator<T, Iter> for TreeSet<T> { - fn from_iterator(iter: &mut Iter) -> TreeSet<T> { +impl<T: TotalOrd> FromIterator<T> for TreeSet<T> { + fn from_iterator<Iter: Iterator<T>>(iter: &mut Iter) -> TreeSet<T> { let mut set = TreeSet::new(); set.extend(iter); set } } -impl<T: TotalOrd, Iter: Iterator<T>> Extendable<T, Iter> for TreeSet<T> { +impl<T: TotalOrd> Extendable<T> for TreeSet<T> { #[inline] - fn extend(&mut self, iter: &mut Iter) { + fn extend<Iter: Iterator<T>>(&mut self, iter: &mut Iter) { for elem in *iter { self.insert(elem); } |
