Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 39 additions & 39 deletions src/SharpArena/Collections/ArenaDictionary.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,10 @@ private readonly int FindBucket(TKey key)

while (true)
{
int entryIdxPlusOne = buckets[index];
if (entryIdxPlusOne == 0) return (int)index;
int entryIdx = buckets[index] - 1;
if (entryIdx < 0) return (int)index;

if (keys[entryIdxPlusOne - 1].Equals(key)) return (int)index;
if (keys[entryIdx].Equals(key)) return (int)index;

index = (index + 1) & mask;
}
Expand Down Expand Up @@ -167,8 +167,8 @@ public bool TryAdd(TKey key, TValue value)
}

int bucketIdx = FindBucket(key);
int entryIdxPlusOne = _header->Buckets[bucketIdx];
if (entryIdxPlusOne != 0) return false;
int entryIdx = _header->Buckets[bucketIdx] - 1;
if (entryIdx >= 0) return false;

int newEntryIdx = _header->Count++;
_header->Buckets[bucketIdx] = newEntryIdx + 1;
Expand All @@ -186,8 +186,8 @@ private void AddOrUpdate(TKey key, TValue value)
}

int bucketIdx = FindBucket(key);
int entryIdxPlusOne = _header->Buckets[bucketIdx];
if (entryIdxPlusOne == 0)
int entryIdx = _header->Buckets[bucketIdx] - 1;
if (entryIdx < 0)
{
int newEntryIdx = _header->Count++;
_header->Buckets[bucketIdx] = newEntryIdx + 1;
Expand All @@ -196,7 +196,7 @@ private void AddOrUpdate(TKey key, TValue value)
}
else
{
((TValue*)_header->Values)[entryIdxPlusOne - 1] = value;
((TValue*)_header->Values)[entryIdx] = value;
}
}

Expand Down Expand Up @@ -264,9 +264,9 @@ public readonly bool ContainsKey(ReadOnlySpan<char> key)

while (true)
{
int entryIdxPlusOne = buckets[index];
if (entryIdxPlusOne == 0) return false;
if (keys[entryIdxPlusOne - 1].Equals(key)) return true;
int entryIdx = buckets[index] - 1;
if (entryIdx < 0) return false;
if (keys[entryIdx].Equals(key)) return true;
index = (index + 1) & mask;
}
}
Expand All @@ -290,9 +290,9 @@ public readonly bool ContainsKey(ReadOnlySpan<char> key)
uint index = hash & mask;
while (true)
{
int entryIdxPlusOne = buckets[index];
if (entryIdxPlusOne == 0) return false;
if (keys[entryIdxPlusOne - 1].Equals(byteKey)) return true;
int entryIdx = buckets[index] - 1;
if (entryIdx < 0) return false;
if (keys[entryIdx].Equals(byteKey)) return true;
index = (index + 1) & mask;
}
}
Expand Down Expand Up @@ -323,9 +323,9 @@ public readonly bool ContainsKey(ReadOnlySpan<byte> key)
uint index = hash & mask;
while (true)
{
int entryIdxPlusOne = buckets[index];
if (entryIdxPlusOne == 0) return false;
if (keys[entryIdxPlusOne - 1].Equals(key)) return true;
int entryIdx = buckets[index] - 1;
if (entryIdx < 0) return false;
if (keys[entryIdx].Equals(key)) return true;
index = (index + 1) & mask;
}
}
Expand All @@ -350,9 +350,9 @@ public readonly bool ContainsKey(ReadOnlySpan<byte> key)

while (true)
{
int entryIdxPlusOne = buckets[index];
if (entryIdxPlusOne == 0) return false;
if (keys[entryIdxPlusOne - 1].Equals(charKey)) return true;
int entryIdx = buckets[index] - 1;
if (entryIdx < 0) return false;
if (keys[entryIdx].Equals(charKey)) return true;
index = (index + 1) & mask;
}
}
Expand All @@ -375,10 +375,10 @@ public readonly bool TryGetValue(TKey key, out TValue value)
{
CheckAlive();
int bucketIdx = FindBucket(key);
int entryIdxPlusOne = _header->Buckets[bucketIdx];
if (entryIdxPlusOne != 0)
int entryIdx = _header->Buckets[bucketIdx] - 1;
if (entryIdx >= 0)
{
value = ((TValue*)_header->Values)[entryIdxPlusOne - 1];
value = ((TValue*)_header->Values)[entryIdx];
return true;
}
value = default;
Expand Down Expand Up @@ -408,11 +408,11 @@ public readonly bool TryGetValue(ReadOnlySpan<char> key, out TValue value)

while (true)
{
int entryIdxPlusOne = buckets[index];
if (entryIdxPlusOne == 0) break;
if (keys[entryIdxPlusOne - 1].Equals(key))
int entryIdx = buckets[index] - 1;
if (entryIdx < 0) break;
if (keys[entryIdx].Equals(key))
{
value = values[entryIdxPlusOne - 1];
value = values[entryIdx];
return true;
}
index = (index + 1) & mask;
Expand All @@ -439,11 +439,11 @@ public readonly bool TryGetValue(ReadOnlySpan<char> key, out TValue value)
uint index = hash & mask;
while (true)
{
int entryIdxPlusOne = buckets[index];
if (entryIdxPlusOne == 0) break;
if (keys[entryIdxPlusOne - 1].Equals(byteKey))
int entryIdx = buckets[index] - 1;
if (entryIdx < 0) break;
if (keys[entryIdx].Equals(byteKey))
{
value = values[entryIdxPlusOne - 1];
value = values[entryIdx];
return true;
}
index = (index + 1) & mask;
Expand Down Expand Up @@ -479,11 +479,11 @@ public readonly bool TryGetValue(ReadOnlySpan<byte> key, out TValue value)
uint index = hash & mask;
while (true)
{
int entryIdxPlusOne = buckets[index];
if (entryIdxPlusOne == 0) break;
if (keys[entryIdxPlusOne - 1].Equals(key))
int entryIdx = buckets[index] - 1;
if (entryIdx < 0) break;
if (keys[entryIdx].Equals(key))
{
value = values[entryIdxPlusOne - 1];
value = values[entryIdx];
return true;
}
index = (index + 1) & mask;
Expand Down Expand Up @@ -511,11 +511,11 @@ public readonly bool TryGetValue(ReadOnlySpan<byte> key, out TValue value)

while (true)
{
int entryIdxPlusOne = buckets[index];
if (entryIdxPlusOne == 0) break;
if (keys[entryIdxPlusOne - 1].Equals(charKey))
int entryIdx = buckets[index] - 1;
if (entryIdx < 0) break;
if (keys[entryIdx].Equals(charKey))
{
value = values[entryIdxPlusOne - 1];
value = values[entryIdx];
return true;
}
index = (index + 1) & mask;
Expand Down
Loading