diff options
author | Mike Buland <eichlan@xagasoft.com> | 2012-05-25 19:49:41 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2012-05-25 19:49:41 +0000 |
commit | 8ff104489cf8eb6322bec90ebc8d66fedae665c9 (patch) | |
tree | 1dfd4fc3b82e94989aeb847dec054b97a7311016 /src | |
parent | 0643b03b0ca30ef7c413a00bcd4eb17026dce568 (diff) | |
download | libbu++-8ff104489cf8eb6322bec90ebc8d66fedae665c9.tar.gz libbu++-8ff104489cf8eb6322bec90ebc8d66fedae665c9.tar.bz2 libbu++-8ff104489cf8eb6322bec90ebc8d66fedae665c9.tar.xz libbu++-8ff104489cf8eb6322bec90ebc8d66fedae665c9.zip |
Fixed a *very* rare steady-state issue in rehashing code. There's still
potential for probing to fail in a way that can't be fixed by rehashing, but
it should be amazingly rare.
Diffstat (limited to '')
-rw-r--r-- | src/stable/hash.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/stable/hash.h b/src/stable/hash.h index c7554a8..3bf12cb 100644 --- a/src/stable/hash.h +++ b/src/stable/hash.h | |||
@@ -54,7 +54,12 @@ namespace Bu | |||
54 | } | 54 | } |
55 | // This will hopefully prevent hash tables from growing needlessly | 55 | // This will hopefully prevent hash tables from growing needlessly |
56 | if( nFilled-nDeleted <= nCapacity/2 ) | 56 | if( nFilled-nDeleted <= nCapacity/2 ) |
57 | return nCapacity; | 57 | { |
58 | if( nDeleted == 0 ) | ||
59 | return nCapacity/4*5+1; // Grow just a little | ||
60 | else | ||
61 | return nCapacity; // We're going to delete things | ||
62 | } | ||
58 | // Otherwise, just increase the capacity | 63 | // Otherwise, just increase the capacity |
59 | return nCapacity*2+1; | 64 | return nCapacity*2+1; |
60 | } | 65 | } |
@@ -306,6 +311,7 @@ namespace Bu | |||
306 | 311 | ||
307 | void reHash( uint32_t nNewSize ) | 312 | void reHash( uint32_t nNewSize ) |
308 | { | 313 | { |
314 | //printf("--rehash: %d --> %d (%d, %d)\n", nCapacity, nNewSize, nFilled, nDeleted ); | ||
309 | //printf("---REHASH---"); | 315 | //printf("---REHASH---"); |
310 | //printf("Filled: %d, Deleted: %d, Capacity: %d\n", | 316 | //printf("Filled: %d, Deleted: %d, Capacity: %d\n", |
311 | // nFilled, nDeleted, nCapacity ); | 317 | // nFilled, nDeleted, nCapacity ); |