1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 13:37:44 +00:00

AK: HashTable add a constructor that allows preallocation of capacity + Use in CppLexer. (#3147)

1. Add general utility to get array number of elements.
2. Add Needed API to AK::HashTable
3. Refactor CppLexer initialization
This commit is contained in:
Muhammad Zahalqa 2020-08-16 12:04:00 +03:00 committed by GitHub
parent fc276946fb
commit a68650a7b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 166 additions and 135 deletions

View file

@ -111,7 +111,12 @@ private:
using Bucket = SinglyLinkedList<T>;
public:
HashTable() {}
HashTable() { }
HashTable(size_t capacity)
: m_buckets(new Bucket[capacity])
, m_capacity(capacity)
{
}
HashTable(const HashTable& other)
{
ensure_capacity(other.size());
@ -164,6 +169,15 @@ public:
HashSetResult set(const T&);
HashSetResult set(T&&);
template<typename U, size_t N>
void set_from(U (&from_array)[N])
{
for (size_t i = 0; i < N; ++i) {
set(from_array[i]);
}
}
bool contains(const T&) const;
void clear();

View file

@ -40,6 +40,13 @@ inline constexpr unsigned round_up_to_power_of_two(unsigned value, unsigned powe
namespace AK {
template<typename T, typename SizeType = decltype(sizeof(T)), SizeType N>
constexpr SizeType array_size(T (&)[N])
{
return N;
}
template<typename T>
inline constexpr T min(const T& a, const T& b)
{
@ -497,6 +504,7 @@ using CopyConst =
}
using AK::AddConst;
using AK::array_size;
using AK::ceil_div;
using AK::clamp;
using AK::Conditional;