예제 #1
0
            protected override MemorySafeEnumerator <T> Clone()
            {
                var enumerator = new HashEnumerator(MemoryType)
                {
                    Current  = default(T),
                    _hashSet = _hashSet,
                };

                return(enumerator);
            }
예제 #2
0
        /// <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);
        }