diff options
| author | bors <bors@rust-lang.org> | 2016-02-17 16:18:54 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2016-02-17 16:18:54 +0000 |
| commit | 2051a92134bae8b4c5fd3fdeab32c78b7bd74014 (patch) | |
| tree | ccc3515b6500cb008e3e75353919db104537b6e4 /src/libstd | |
| parent | b54770c24578311ad6cc782fcf1d0dc8cb41e997 (diff) | |
| parent | f890772383c900f9a409a4105df13b6630ebb1f5 (diff) | |
| download | rust-2051a92134bae8b4c5fd3fdeab32c78b7bd74014.tar.gz rust-2051a92134bae8b4c5fd3fdeab32c78b7bd74014.zip | |
Auto merge of #31718 - apasel422:issue-31711, r=bluss
This changes the performance of `drop` from linear to constant time for such `HashMap`s. Closes #31711. r? @bluss
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/collections/hash/table.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/libstd/collections/hash/table.rs b/src/libstd/collections/hash/table.rs index 316c7595266..97cab94b67b 100644 --- a/src/libstd/collections/hash/table.rs +++ b/src/libstd/collections/hash/table.rs @@ -12,6 +12,7 @@ use alloc::heap::{allocate, deallocate, EMPTY}; use cmp; use hash::{Hash, Hasher, BuildHasher}; +use intrinsics::needs_drop; use marker; use mem::{align_of, size_of}; use mem; @@ -1009,7 +1010,9 @@ impl<K, V> Drop for RawTable<K, V> { // dropping empty tables such as on resize. // Also avoid double drop of elements that have been already moved out. unsafe { - for _ in self.rev_move_buckets() {} + if needs_drop::<(K, V)>() { // avoid linear runtime for types that don't need drop + for _ in self.rev_move_buckets() {} + } } let hashes_size = self.capacity * size_of::<u64>(); |
