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

AK: Defer to Traits<T> for equality comparison in container templates.

This is prep work for supporting HashMap with NonnullRefPtr<T> as values.
It's currently not possible because many HashTable functions require being
able to default-construct the value type.
This commit is contained in:
Andreas Kling 2019-06-29 19:14:03 +02:00
parent 9a7dc06567
commit d5bb98acbc
14 changed files with 61 additions and 31 deletions

View file

@ -181,7 +181,7 @@ void HashTable<T, TraitsForT>::set(T&& value)
rehash(1);
auto& bucket = lookup(value);
for (auto& e : bucket) {
if (e == value) {
if (TraitsForT::equals(e, value)) {
e = move(value);
return;
}
@ -202,7 +202,7 @@ void HashTable<T, TraitsForT>::set(const T& value)
rehash(1);
auto& bucket = lookup(value);
for (auto& e : bucket) {
if (e == value) {
if (TraitsForT::equals(e, value)) {
e = value;
return;
}
@ -267,7 +267,7 @@ bool HashTable<T, TraitsForT>::contains(const T& value) const
return false;
auto& bucket = lookup(value);
for (auto& e : bucket) {
if (e == value)
if (TraitsForT::equals(e, value))
return true;
}
return false;
@ -280,7 +280,7 @@ auto HashTable<T, TraitsForT>::find(const T& value) -> Iterator
return end();
int bucket_index;
auto& bucket = lookup(value, &bucket_index);
auto bucket_iterator = bucket.find(value);
auto bucket_iterator = bucket.template find<TraitsForT>(value);
if (bucket_iterator != bucket.end())
return Iterator(*this, false, bucket_iterator, bucket_index);
return end();
@ -293,7 +293,7 @@ auto HashTable<T, TraitsForT>::find(const T& value) const -> ConstIterator
return end();
int bucket_index;
const auto& bucket = lookup(value, &bucket_index);
auto bucket_iterator = bucket.find(value);
auto bucket_iterator = bucket.template find<TraitsForT>(value);
if (bucket_iterator != bucket.end())
return ConstIterator(*this, false, bucket_iterator, bucket_index);
return end();