private void putEntry(bucket[] newBuckets, Object key, Object nvalue, int hashcode)
{
Debug.Assert(hashcode >= 0, "hashcode >= 0"); // make sure collision bit (sign bit) wasn't set.
uint seed = (uint)hashcode;
uint incr = (uint)(1 + ((seed * HashPrime) % ((uint)newBuckets.Length - 1)));
int bucketNumber = (int)(seed % (uint)newBuckets.Length);
do
{
if ((newBuckets[bucketNumber].key == null) || (newBuckets[bucketNumber].key == _buckets))
{
newBuckets[bucketNumber].val = nvalue;
newBuckets[bucketNumber].key = key;
newBuckets[bucketNumber].hash_coll |= hashcode;
return;
}
if (newBuckets[bucketNumber].hash_coll >= 0)
{
newBuckets[bucketNumber].hash_coll |= unchecked((int)0x80000000);
_occupancy++;
}
bucketNumber = (int)(((long)bucketNumber + incr) % (uint)newBuckets.Length);
} while (true);
}