From 838413d5d9b9cea3b023c481c0a723efcd800513 Mon Sep 17 00:00:00 2001 From: Tessil Date: Tue, 14 Mar 2017 19:13:53 +0100 Subject: [PATCH] Remove 'move_overflow_elements_into' method, regression in performances. --- src/hopscotch_hash.h | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/hopscotch_hash.h b/src/hopscotch_hash.h index 3397092..1fceb1e 100644 --- a/src/hopscotch_hash.h +++ b/src/hopscotch_hash.h @@ -1188,7 +1188,16 @@ class hopscotch_hash { new_map.insert_internal(std::move(bucket.get_value()), hash, ibucket_for_hash); } - move_overflow_elements_into(new_map); + tsl_assert(new_map.m_overflow_elements.empty()); + if(!m_overflow_elements.empty()) { + new_map.m_overflow_elements.swap(m_overflow_elements); + new_map.m_nb_elements += new_map.m_overflow_elements.size(); + + for(const value_type& value : new_map.m_overflow_elements) { + const std::size_t ibucket_for_hash = new_map.bucket_for_hash(new_map.m_hash(KeySelect()(value))); + new_map.m_buckets[ibucket_for_hash].set_overflow(true); + } + } new_map.swap(*this); } @@ -1211,12 +1220,6 @@ class hopscotch_hash { new_map.insert_internal(bucket.get_value(), hash, ibucket_for_hash); } - move_overflow_elements_into(new_map); - - new_map.swap(*this); - } - - void move_overflow_elements_into(hopscotch_hash& new_map) noexcept { tsl_assert(new_map.m_overflow_elements.empty()); if(!m_overflow_elements.empty()) { new_map.m_overflow_elements.swap(m_overflow_elements); @@ -1227,7 +1230,10 @@ class hopscotch_hash { new_map.m_buckets[ibucket_for_hash].set_overflow(true); } } - } + + new_map.swap(*this); + } + /* * Find in m_overflow_elements an element for which the bucket it initially belongs to, * equals original_bucket_for_hash.