diff options
-rw-r--r-- | src/hash.h | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -42,10 +42,22 @@ namespace Bu | |||
42 | */ | 42 | */ |
43 | struct __calcNextTSize_fast | 43 | struct __calcNextTSize_fast |
44 | { | 44 | { |
45 | uint32_t operator()( uint32_t nCapacity, uint32_t, uint32_t nDeleted ) const | 45 | uint32_t operator()( uint32_t nCapacity, uint32_t nFilled, |
46 | uint32_t nDeleted ) const | ||
46 | { | 47 | { |
47 | if( nDeleted >= nCapacity/2 ) | 48 | // This frist case will allow hashtables that are mostly deleted |
49 | // items to reset to small allocations | ||
50 | if( nFilled-nDeleted <= nCapacity/4 ) | ||
51 | { | ||
52 | nCapacity = 11; | ||
53 | while( nCapacity < nFilled*5/4 ) | ||
54 | nCapacity = nCapacity*2+1; | ||
55 | return nCapacity; | ||
56 | } | ||
57 | // This will hopefully prevent hash tables from growing needlessly | ||
58 | if( nFilled-nDeleted <= nCapacity/2 ) | ||
48 | return nCapacity; | 59 | return nCapacity; |
60 | // Otherwise, just increase the capacity | ||
49 | return nCapacity*2+1; | 61 | return nCapacity*2+1; |
50 | } | 62 | } |
51 | }; | 63 | }; |