diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-04-06 22:52:46 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-04-06 22:52:46 +0200 |
| commit | 76d818cf73cd49f09f0dede8d06214d8fda833b4 (patch) | |
| tree | e61696cb41473e3f578ebb8bb850d77c196d1662 /src/liballoc | |
| parent | ed45788e532449e27411e9ccebecc36562c4bbcf (diff) | |
| parent | 0730a01c5ca3b0e8760d72a05c47d4199bd64728 (diff) | |
| download | rust-76d818cf73cd49f09f0dede8d06214d8fda833b4.tar.gz rust-76d818cf73cd49f09f0dede8d06214d8fda833b4.zip | |
Rollup merge of #59740 - cuviper:folded-extend, r=scottmcm
Use for_each to extend collections This updates the `Extend` implementations to use `for_each` for many collections: `BinaryHeap`, `BTreeMap`, `BTreeSet`, `LinkedList`, `Path`, `TokenStream`, `VecDeque`, and `Wtf8Buf`. Folding with `for_each` enables better performance than a `for`-loop for some iterators, especially if they can just forward to internal iterators, like `Chain` and `FlatMap` do.
Diffstat (limited to 'src/liballoc')
| -rw-r--r-- | src/liballoc/collections/binary_heap.rs | 4 | ||||
| -rw-r--r-- | src/liballoc/collections/btree/map.rs | 4 | ||||
| -rw-r--r-- | src/liballoc/collections/btree/set.rs | 4 | ||||
| -rw-r--r-- | src/liballoc/collections/linked_list.rs | 4 | ||||
| -rw-r--r-- | src/liballoc/collections/vec_deque.rs | 4 |
5 files changed, 7 insertions, 13 deletions
diff --git a/src/liballoc/collections/binary_heap.rs b/src/liballoc/collections/binary_heap.rs index a171f128c24..8c142a3d317 100644 --- a/src/liballoc/collections/binary_heap.rs +++ b/src/liballoc/collections/binary_heap.rs @@ -1177,9 +1177,7 @@ impl<T: Ord> BinaryHeap<T> { self.reserve(lower); - for elem in iterator { - self.push(elem); - } + iterator.for_each(move |elem| self.push(elem)); } } diff --git a/src/liballoc/collections/btree/map.rs b/src/liballoc/collections/btree/map.rs index ce29978856f..6b079fc87cc 100644 --- a/src/liballoc/collections/btree/map.rs +++ b/src/liballoc/collections/btree/map.rs @@ -1727,9 +1727,9 @@ impl<K: Ord, V> FromIterator<(K, V)> for BTreeMap<K, V> { impl<K: Ord, V> Extend<(K, V)> for BTreeMap<K, V> { #[inline] fn extend<T: IntoIterator<Item = (K, V)>>(&mut self, iter: T) { - for (k, v) in iter { + iter.into_iter().for_each(move |(k, v)| { self.insert(k, v); - } + }); } } diff --git a/src/liballoc/collections/btree/set.rs b/src/liballoc/collections/btree/set.rs index e71767077ca..16a96ca19b8 100644 --- a/src/liballoc/collections/btree/set.rs +++ b/src/liballoc/collections/btree/set.rs @@ -883,9 +883,9 @@ impl<'a, T> IntoIterator for &'a BTreeSet<T> { impl<T: Ord> Extend<T> for BTreeSet<T> { #[inline] fn extend<Iter: IntoIterator<Item = T>>(&mut self, iter: Iter) { - for elem in iter { + iter.into_iter().for_each(move |elem| { self.insert(elem); - } + }); } } diff --git a/src/liballoc/collections/linked_list.rs b/src/liballoc/collections/linked_list.rs index c2ee2e63156..d6d84a4f083 100644 --- a/src/liballoc/collections/linked_list.rs +++ b/src/liballoc/collections/linked_list.rs @@ -1107,9 +1107,7 @@ impl<T> Extend<T> for LinkedList<T> { impl<I: IntoIterator> SpecExtend<I> for LinkedList<I::Item> { default fn spec_extend(&mut self, iter: I) { - for elt in iter { - self.push_back(elt); - } + iter.into_iter().for_each(move |elt| self.push_back(elt)); } } diff --git a/src/liballoc/collections/vec_deque.rs b/src/liballoc/collections/vec_deque.rs index 4e90f783ec6..4bea615ab86 100644 --- a/src/liballoc/collections/vec_deque.rs +++ b/src/liballoc/collections/vec_deque.rs @@ -2677,9 +2677,7 @@ 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: IntoIterator<Item = A>>(&mut self, iter: T) { - for elt in iter { - self.push_back(elt); - } + iter.into_iter().for_each(move |elt| self.push_back(elt)); } } |
