AK: Add values() method in HashTable

Add HashTable::values() method that returns all values.
This commit is contained in:
Aliaksandr Kalenik 2023-04-28 15:02:38 +03:00 committed by Andreas Kling
parent c9c8f2413f
commit 4c6564e3c1
2 changed files with 25 additions and 0 deletions

View file

@ -423,6 +423,15 @@ public:
return element;
}
[[nodiscard]] Vector<T> values() const
{
Vector<T> list;
list.ensure_capacity(size());
for (auto& value : *this)
list.unchecked_append(value);
return list;
}
private:
bool should_grow() const { return ((m_size + 1) * 100) >= (m_capacity * grow_at_load_factor_percent); }
static constexpr size_t size_in_bytes(size_t capacity) { return sizeof(BucketType) * capacity; }

View file

@ -10,6 +10,7 @@
#include <AK/DeprecatedString.h>
#include <AK/HashTable.h>
#include <AK/NonnullOwnPtr.h>
#include <AK/Vector.h>
TEST_CASE(construct)
{
@ -434,3 +435,18 @@ TEST_CASE(ordered_infinite_loop_clang_regression)
}
}
}
TEST_CASE(values)
{
OrderedHashTable<int> table;
table.set(10);
table.set(30);
table.set(20);
Vector<int> values = table.values();
EXPECT_EQ(values.size(), table.size());
EXPECT_EQ(values[0], 10);
EXPECT_EQ(values[1], 30);
EXPECT_EQ(values[2], 20);
}