Beispiel #1
0
 void Resize(int newSize, bool forceNewHashCodes)
 {
     RuntimeAssert.GreaterOrEquals(newSize, _entries.Length, nameof(newSize));
     int[] newBuckets = new int[newSize];
     for (int i = 0; i < newBuckets.Length; i++)
     {
         newBuckets[i] = -1;
     }
     Entry[] newEntries = new Entry[newSize];
     Array.Copy(_entries, 0, newEntries, 0, _count);
     if (forceNewHashCodes)
     {
         for (int i = 0; i < _count; i++)
         {
             if (newEntries[i].HashCode != -1)
             {
                 newEntries[i].HashCode = GetKeyHasCode(newEntries[i].Key);
             }
         }
     }
     for (int i = 0; i < _count; i++)
     {
         if (newEntries[i].HashCode >= 0)
         {
             int bucket = newEntries[i].HashCode % newSize;
             newEntries[i].Next = newBuckets[bucket];
             newBuckets[bucket] = i;
         }
     }
     _buckets = newBuckets;
     _entries = newEntries;
 }
Beispiel #2
0
 /// <summary>
 /// Copies all assignments to the specified array at the specified index.
 /// </summary>
 /// <param name="array">Array.</param>
 /// <param name="arrayIndex">Array index.</param>
 public void CopyTo(KeyValuePair <TKey, TValue>[] array, int arrayIndex)
 {
     RuntimeAssert.ArgumentNotNull(array, nameof(array));
     RuntimeAssert.IndexInRange(arrayIndex, 0, array.Length - 1, nameof(arrayIndex));
     RuntimeAssert.GreaterOrEquals(array.Length - arrayIndex, _count, nameof(array));
     if (null != _entries)
     {
         for (var i = 0; i < _count; ++i)
         {
             if (_entries[i].HashCode >= 0)
             {
                 array[i + arrayIndex] = new KeyValuePair <TKey, TValue>(_entries[i].Key, _entries[i].Value);
             }
         }
     }
 }