protected void Rehash() {
int oldCapacity = table.Length;
IntHashtableEntry[] oldTable = table;
int newCapacity = oldCapacity * 2 + 1;
IntHashtableEntry[] newTable = new IntHashtableEntry[newCapacity];
threshold = (int) ( newCapacity * loadFactor );
table = newTable;
for ( int i = oldCapacity ; i-- > 0 ; ) {
for ( IntHashtableEntry old = oldTable[i] ; old != null ; ) {
IntHashtableEntry e = old;
old = old.next;
int index = ( e.hash & 0x7FFFFFFF ) % newCapacity;
e.next = newTable[index];
newTable[index] = e;
}
}
}