X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fshared%2Fhashtable.pas;h=10b67d97f722af171e2882bb4a0be5ae27745888;hb=9a8ac2323ba1c23f248ff5effe2747135ecc14f6;hp=15d19f6a15e8d6bd296423412e1580114c9552ff;hpb=cef650d6d74c89e95fd9718be4373e351e8f9e40;p=d2df-sdl.git diff --git a/src/shared/hashtable.pas b/src/shared/hashtable.pas index 15d19f6..10b67d9 100644 --- a/src/shared/hashtable.pas +++ b/src/shared/hashtable.pas @@ -77,6 +77,7 @@ type destructor Destroy (); override; procedure clear (); + procedure reset (); // don't shrink buckets procedure rehash (); procedure compact (); // call this instead of `rehash()` after alot of deletions @@ -322,6 +323,32 @@ begin end; +procedure THashBase.reset (); +var + idx: Integer; +begin + if (mBucketsUsed > 0) then + begin + for idx := 0 to High(mBuckets) do mBuckets[idx] := nil; + for idx := 0 to High(mEntries)-1 do + begin + mEntries[idx].hash := 0; + mEntries[idx].nextFree := @mEntries[idx+1]; //idx+1; + end; + mEntries[High(mEntries)].hash := 0; + mEntries[High(mEntries)].nextFree := nil; + + mBucketsUsed := 0; + {$IFDEF RBHASH_SANITY_CHECKS} + mEntriesUsed := 0; + {$ENDIF} + mFreeEntryHead := @mEntries[0]; + mFirstEntry := -1; + mLastEntry := -1; + end; +end; + + function THashBase.getCapacity (): Integer; inline; begin result := Length(mBuckets); end;