private void Grow() {
int newMask = mask * 2 + 1;
XmlName[] oldEntries = entries;
XmlName[] newEntries = new XmlName[newMask+1];
// use oldEntries.Length to eliminate the rangecheck
for ( int i = 0; i < oldEntries.Length; i++ ) {
XmlName name = oldEntries[i];
while ( name != null ) {
int newIndex = name.HashCode & newMask;
XmlName tmp = name.next;
name.next = newEntries[newIndex];
newEntries[newIndex] = name;
name = tmp;
}
}
entries = newEntries;
mask = newMask;
}
}