public static int GetPrime(int min) { if (min < 0) { throw new ArgumentException("Value must be non-negative."); } for (int index = 0; index < PrimeHelper.primes.Length; ++index) { int num = PrimeHelper.primes[index]; if (num >= min) { return(num); } } int candidate = min | 1; while (candidate < int.MaxValue) { if (PrimeHelper.IsPrime(candidate) && (candidate - 1) % 101 != 0) { return(candidate); } candidate += 2; } return(min); }
public static int ExpandPrime(int oldSize) { int min = 2 * oldSize; if ((uint)min > 2146435069U && 2146435069 > oldSize) { return(2146435069); } else { return(PrimeHelper.GetPrime(min)); } }
private void Init(int size) { if (size < 0) throw new ArgumentOutOfRangeException("capacity"); else if (size == 0) size = 5; //set nominal start size size = PrimeHelper.GetPrime(size); _table = new int[size]; _links = new Link[size]; _empty_slot = -1; _slots = new T[size]; _touched = 0; _threshold = (int)((double)_table.Length * 0.899999976158142); if (_threshold != 0 || _table.Length <= 0) return; _threshold = 1; _generation = 0; }
private void Resize() { int length = PrimeHelper.ExpandPrime(_table.Length); int[] numArray = new int[length]; Link[] linkArray = new Link[length]; for (int index1 = 0; index1 < _table.Length; ++index1) { for (int index2 = _table[index1] - 1; index2 != -1; index2 = _links[index2].Next) { int index3 = ((linkArray[index2].HashCode = _comparer.GetHashCode(_slots[index2])) & int.MaxValue) % length; linkArray[index2].Next = numArray[index3] - 1; numArray[index3] = index2 + 1; } } _table = numArray; _links = linkArray; T[] objArray = new T[length]; Array.Copy((Array)_slots, 0, (Array)objArray, 0, _touched); _slots = objArray; _threshold = (int)((double)length * 0.899999976158142); }