1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 00:47:45 +00:00

AK: Use kfree_sized() in AK::HashTable

This commit is contained in:
Andreas Kling 2021-07-11 13:22:58 +02:00
parent 05a00c3978
commit 3aabace9f5

View file

@ -129,7 +129,7 @@ public:
m_buckets[i].slot()->~T(); m_buckets[i].slot()->~T();
} }
kfree(m_buckets); kfree_sized(m_buckets, size_in_bytes(m_capacity));
} }
HashTable(const HashTable& other) HashTable(const HashTable& other)
@ -360,22 +360,32 @@ private:
} }
} }
static size_t size_in_bytes(size_t capacity)
{
if constexpr (IsOrdered) {
return sizeof(BucketType) * capacity;
} else {
return sizeof(BucketType) * (capacity + 1);
}
}
void rehash(size_t new_capacity) void rehash(size_t new_capacity)
{ {
new_capacity = max(new_capacity, static_cast<size_t>(4)); new_capacity = max(new_capacity, static_cast<size_t>(4));
new_capacity = kmalloc_good_size(new_capacity * sizeof(BucketType)) / sizeof(BucketType); new_capacity = kmalloc_good_size(new_capacity * sizeof(BucketType)) / sizeof(BucketType);
auto* old_buckets = m_buckets; auto* old_buckets = m_buckets;
auto old_capacity = m_capacity;
Iterator old_iter = begin(); Iterator old_iter = begin();
if constexpr (IsOrdered) { if constexpr (IsOrdered) {
m_buckets = (BucketType*)kmalloc(sizeof(BucketType) * (new_capacity)); m_buckets = (BucketType*)kmalloc(size_in_bytes(new_capacity));
__builtin_memset(m_buckets, 0, sizeof(BucketType) * (new_capacity)); __builtin_memset(m_buckets, 0, size_in_bytes(new_capacity));
m_collection_data = { nullptr, nullptr }; m_collection_data = { nullptr, nullptr };
} else { } else {
m_buckets = (BucketType*)kmalloc(sizeof(BucketType) * (new_capacity + 1)); m_buckets = (BucketType*)kmalloc(size_in_bytes(new_capacity));
__builtin_memset(m_buckets, 0, sizeof(BucketType) * (new_capacity + 1)); __builtin_memset(m_buckets, 0, size_in_bytes(new_capacity));
} }
m_capacity = new_capacity; m_capacity = new_capacity;
@ -392,7 +402,7 @@ private:
it->~T(); it->~T();
} }
kfree(old_buckets); kfree_sized(old_buckets, size_in_bytes(old_capacity));
} }
template<typename Finder> template<typename Finder>