protected override MemorySafeEnumerator <T> Clone() { var enumerator = new HashEnumerator(MemoryType) { Current = default(T), _hashSet = _hashSet, }; return(enumerator); }
/// <summary> /// Create a hash set with external item equalityComparer. /// </summary> /// <param name="capacity">Initial table size (rounded to power of 2, at least 16)</param> /// <param name="fill">Fill threshold (in range 10% to 90%)</param> /// <param name="itemequalityComparer">The external item equalitySCG.Comparer</param> /// <param name="memoryType"></param> public HashSet(int capacity, double fill, SCG.IEqualityComparer <T> itemequalityComparer, MemoryType memoryType = MemoryType.Normal) : base(itemequalityComparer, memoryType) { _randomhashfactor = (Debug.UseDeterministicHashing) ? 1529784659 : (2 * (uint)Random.Next() + 1) * 1529784659; if (fill < 0.1 || fill > 0.9) { throw new ArgumentException("Fill outside valid range [0.1, 0.9]"); } if (capacity <= 0) { throw new ArgumentException("Capacity must be non-negative"); } //this.itemequalityComparer = itemequalityComparer; origbits = 4; while (capacity - 1 >> origbits > 0) { origbits++; } clear(); _hashEnumerator = new HashEnumerator(memoryType); }