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; }
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; }
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; } }
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; }
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; } }
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; }