From 322a221f0746c26ecfc86e0def5192a9836ae236 Mon Sep 17 00:00:00 2001 From: Merry Date: Sun, 1 May 2022 18:26:17 +0100 Subject: [PATCH] mcl: hmap: Bugfix skip_empty_or_tombstone --- include/mcl/container/hmap.hpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/include/mcl/container/hmap.hpp b/include/mcl/container/hmap.hpp index f6322d0..b122807 100644 --- a/include/mcl/container/hmap.hpp +++ b/include/mcl/container/hmap.hpp @@ -280,15 +280,14 @@ private: if (!mb_ptr) return; - while (!is_full(*mb_ptr)) { + while (*mb_ptr == detail::meta_byte::empty || *mb_ptr == detail::meta_byte::tombstone) { ++mb_ptr; ++slot_ptr; + } - if (*mb_ptr == detail::meta_byte::end_sentinel) { - mb_ptr = nullptr; - slot_ptr = nullptr; - return; - } + if (*mb_ptr == detail::meta_byte::end_sentinel) { + mb_ptr = nullptr; + slot_ptr = nullptr; } } @@ -320,6 +319,7 @@ private: static_assert(!std::is_reference_v); static constexpr size_t group_size{16}; + static constexpr size_t average_max_group_load{group_size - 2}; public: hmap() @@ -637,7 +637,7 @@ private: initialize_members(new_group_count); - for (; iter != iterator{}; ++iter) { + for (; iter != end(); ++iter) { const size_t hash{hasher{}(iter->first)}; const size_t item_index{find_empty_slot_to_insert(hash)}; @@ -661,7 +661,7 @@ private: { const size_t group_count{group_index_mask + 1}; - empty_slots = group_count * group_size * 7 / 8; + empty_slots = group_count * average_max_group_load; full_slots = 0; std::memset(mbs.get(), static_cast(detail::meta_byte::empty), group_count * group_size);