private int FindIndex(int key)
{
int[] keys = this.keys;
if (keys != null)
{
int fraction = key * A;
int index = (int)(((uint)fraction) >> (32 - power));
int entry = keys[index];
if (entry == key)
{
return index;
}
if (entry != EMPTY)
{
// Search in table after first failed attempt
int mask = (1 << power) - 1;
int step = TableLookupStep(fraction, mask, power);
int n = 0;
do
{
index = (index + step) & mask;
entry = keys[index];
if (entry == key)
{
return index;
}
}
while (entry != EMPTY);
}
}
return -1;
}