diff options
| author | TSR Berry <20988865+TSRBerry@users.noreply.github.com> | 2023-04-08 01:22:00 +0200 |
|---|---|---|
| committer | Mary <thog@protonmail.com> | 2023-04-27 23:51:14 +0200 |
| commit | cee712105850ac3385cd0091a923438167433f9f (patch) | |
| tree | 4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /Ryujinx.Graphics.Vulkan/HashTableSlim.cs | |
| parent | cd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff) | |
Move solution and projects to src
Diffstat (limited to 'Ryujinx.Graphics.Vulkan/HashTableSlim.cs')
| -rw-r--r-- | Ryujinx.Graphics.Vulkan/HashTableSlim.cs | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/Ryujinx.Graphics.Vulkan/HashTableSlim.cs b/Ryujinx.Graphics.Vulkan/HashTableSlim.cs deleted file mode 100644 index e4ad3958..00000000 --- a/Ryujinx.Graphics.Vulkan/HashTableSlim.cs +++ /dev/null @@ -1,112 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Ryujinx.Graphics.Vulkan -{ - interface IRefEquatable<T> - { - bool Equals(ref T other); - } - - class HashTableSlim<K, V> where K : IRefEquatable<K> - { - private const int TotalBuckets = 16; // Must be power of 2 - private const int TotalBucketsMask = TotalBuckets - 1; - - private struct Entry - { - public int Hash; - public K Key; - public V Value; - } - - private readonly Entry[][] _hashTable = new Entry[TotalBuckets][]; - - public IEnumerable<K> Keys - { - get - { - foreach (Entry[] bucket in _hashTable) - { - if (bucket != null) - { - foreach (Entry entry in bucket) - { - yield return entry.Key; - } - } - } - } - } - - public IEnumerable<V> Values - { - get - { - foreach (Entry[] bucket in _hashTable) - { - if (bucket != null) - { - foreach (Entry entry in bucket) - { - yield return entry.Value; - } - } - } - } - } - - public void Add(ref K key, V value) - { - var entry = new Entry() - { - Hash = key.GetHashCode(), - Key = key, - Value = value - }; - - int hashCode = key.GetHashCode(); - int bucketIndex = hashCode & TotalBucketsMask; - - var bucket = _hashTable[bucketIndex]; - if (bucket != null) - { - int index = bucket.Length; - - Array.Resize(ref _hashTable[bucketIndex], index + 1); - - _hashTable[bucketIndex][index] = entry; - } - else - { - _hashTable[bucketIndex] = new Entry[] - { - entry - }; - } - } - - public bool TryGetValue(ref K key, out V value) - { - int hashCode = key.GetHashCode(); - - var bucket = _hashTable[hashCode & TotalBucketsMask]; - if (bucket != null) - { - for (int i = 0; i < bucket.Length; i++) - { - ref var entry = ref bucket[i]; - - if (entry.Hash == hashCode && entry.Key.Equals(ref key)) - { - value = entry.Value; - return true; - } - } - } - - value = default; - return false; - } - } -} |
