Esempio n. 1
0
        public void Clear()
        {
            if (mi_Count == 0)
            {
                return;
            }

            for (int i = 0; i < mk_Buckets.Length; ++i)
            {
                mk_Buckets[i] = new r_Bucket();
            }

            mi_Count = 0;
        }
Esempio n. 2
0
        private void ExpandBucketsArray()
        {
            int li_NewSize = FindPrimeGreater(mk_Buckets.Length * 2);

            r_Bucket[] lk_Buckets = new r_Bucket[li_NewSize];
            foreach (r_Bucket lr_Bucket in mk_Buckets)
            {
                if (lr_Bucket.mk_Key == null)
                {
                    continue;
                }
                InternalExpandInsert(lk_Buckets, lr_Bucket);
            }

            mk_Buckets  = lk_Buckets;
            mi_GrowSize = (md_LoadFactor < 1.0) ? (int)(md_LoadFactor * li_NewSize) : li_NewSize - 1;
        }
Esempio n. 3
0
        private static void InternalExpandInsert(r_Bucket[] ak_Buckets, r_Bucket ar_Bucket)
        {
            ar_Bucket.mi_HashCode &= 0x7fffffff;
            uint lui_BucketCount = (uint)ak_Buckets.Length;
            uint lui_Increment   = (uint)(1 + ((((uint)ar_Bucket.mi_HashCode >> 5) + 1) % (lui_BucketCount - 1)));

            uint lui_Walker = (uint)ar_Bucket.mi_HashCode % lui_BucketCount;

            for (;;)
            {
                int li_Index = (int)lui_Walker;
                if (ak_Buckets[li_Index].mk_Key == null)
                {
                    ak_Buckets[li_Index] = ar_Bucket;
                    return;
                }

                // since current bucket is occupied mark it as duplicate
                ak_Buckets[li_Index].mi_HashCode |= unchecked ((int)0x80000000);

                lui_Walker += lui_Increment;
                lui_Walker %= lui_BucketCount;
            }
        }
Esempio n. 4
0
        private void ExpandBucketsArray()
        {
            int li_NewSize = FindPrimeGreater(mk_Buckets.Length * 2);

            r_Bucket[] lk_Buckets = new r_Bucket[li_NewSize];
            foreach (r_Bucket lr_Bucket in mk_Buckets)
            {
                if (lr_Bucket.mk_Key == null)
                    continue;
                InternalExpandInsert(lk_Buckets, lr_Bucket);
            }

            mk_Buckets = lk_Buckets;
            mi_GrowSize = (md_LoadFactor < 1.0) ? (int)(md_LoadFactor * li_NewSize) : li_NewSize-1;
        }
Esempio n. 5
0
        private static void InternalExpandInsert(r_Bucket[] ak_Buckets, r_Bucket ar_Bucket)
        {
            ar_Bucket.mi_HashCode &= 0x7fffffff;
            uint lui_BucketCount = (uint)ak_Buckets.Length;
            uint lui_Increment = (uint)(1 + ((((uint)ar_Bucket.mi_HashCode >> 5) + 1) % (lui_BucketCount - 1)));

            uint lui_Walker = (uint)ar_Bucket.mi_HashCode % lui_BucketCount;
            for (;;)
            {
                int li_Index = (int)lui_Walker;
                if (ak_Buckets[li_Index].mk_Key == null)
                {
                    ak_Buckets[li_Index] = ar_Bucket;
                    return;
                }

                // since current bucket is occupied mark it as duplicate
                ak_Buckets[li_Index].mi_HashCode |= unchecked((int)0x80000000);

                lui_Walker += lui_Increment;
                lui_Walker %= lui_BucketCount;
            }
        }
Esempio n. 6
0
        public void Clear()
        {
            if (mi_Count == 0)
                return;

            for (int i=0; i < mk_Buckets.Length; ++i)
                mk_Buckets[i] = new r_Bucket();

            mi_Count = 0;
        }