Simplified DualKeyHash

This commit is contained in:
2026-01-30 16:27:03 +02:00
parent 3fc4f3ec84
commit baa8cc351d

View File

@@ -44,11 +44,8 @@ public:
} }
Entry insert(AKey firstKey, BKey secondKey, Value value) { Entry insert(AKey firstKey, BKey secondKey, Value value) {
std::size_t firstKeyHash = std::hash<AKey>{}(firstKey); DualkeyHash *hash = new DualkeyHash(std::move(firstKey),
std::size_t secondKeyHash = std::hash<BKey>{}(secondKey); std::move(secondKey), std::move(value));
DualkeyHash *hash =
new DualkeyHash(firstKeyHash, std::move(firstKey), secondKeyHash,
std::move(secondKey), std::move(value));
if (graveyard.empty()) { if (graveyard.empty()) {
hashList.push_back(hash); hashList.push_back(hash);
@@ -79,7 +76,6 @@ public:
std::size_t index = 0, amountDeleted = 0; std::size_t index = 0, amountDeleted = 0;
uint8_t stateOfIndexing = isFirstKeyGiven + (isSecondKeyGiven << 1); uint8_t stateOfIndexing = isFirstKeyGiven + (isSecondKeyGiven << 1);
for (DualkeyHash *hash : hashList) { for (DualkeyHash *hash : hashList) {
// Tombstone // Tombstone
if (hash == nullptr) [[unlikely]] { if (hash == nullptr) [[unlikely]] {
continue; continue;
@@ -205,16 +201,16 @@ public:
private: private:
struct DualkeyHash { struct DualkeyHash {
DualkeyHash(std::size_t firstKeyHash, AKey &&firstKey, DualkeyHash(AKey &&firstKey, BKey &&secondKey, Value &&value)
std::size_t secondKeyHash, BKey &&secondKey, Value &&value) : firstKey(std::move(firstKey)), secondKey(std::move(secondKey)),
: firstKeyHash(firstKeyHash), secondKeyHash(secondKeyHash), firstKeyHash(std::hash<AKey>{}(this->firstKey)),
firstKey(std::move(firstKey)), secondKey(std::move(secondKey)), secondKeyHash(std::hash<BKey>{}(this->secondKey)),
value(std::move(value)) {} value(std::move(value)) {}
const std::size_t firstKeyHash;
const std::size_t secondKeyHash;
const AKey firstKey; const AKey firstKey;
const BKey secondKey; const BKey secondKey;
const std::size_t firstKeyHash;
const std::size_t secondKeyHash;
mutable Value value; mutable Value value;
}; };