forked from Bananymous/banan-os
BAN: Fix unstable hash map rebucket
This commit is contained in:
parent
3963afe343
commit
bacc0db778
|
@ -223,20 +223,15 @@ namespace BAN
|
||||||
if (new_buckets.resize(new_bucket_count).is_error())
|
if (new_buckets.resize(new_bucket_count).is_error())
|
||||||
return Error::from_errno(ENOMEM);
|
return Error::from_errno(ENOMEM);
|
||||||
|
|
||||||
if constexpr(STABLE)
|
for (auto& bucket : m_buckets)
|
||||||
{
|
{
|
||||||
// NOTE: We have to copy the old entries to the new entries and not move
|
for (Entry& entry : bucket)
|
||||||
// since we might run out of memory half way through.
|
|
||||||
for (auto& bucket : m_buckets)
|
|
||||||
{
|
{
|
||||||
for (Entry& entry : bucket)
|
size_type bucket_index = HASH()(entry.key) % new_buckets.size();
|
||||||
{
|
if constexpr(STABLE)
|
||||||
size_type bucket_index = HASH()(entry.key) % new_buckets.size();
|
TRY(new_buckets[bucket_index].push_back(entry));
|
||||||
if constexpr(STABLE)
|
else
|
||||||
TRY(new_buckets[bucket_index].push_back(entry));
|
TRY(new_buckets[bucket_index].push_back(BAN::move(entry)));
|
||||||
else
|
|
||||||
TRY(new_buckets[bucket_index].push_back(BAN::move(entry)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue