Define a LH_LOAD_FACTOR constant and note the range that it can be set to.
Change the resize check from "count > size" to "count >= size" to avoid a potential infinite loop with high load factors and a full hash table.
This commit is contained in:
@@ -125,7 +125,7 @@ int lh_table_insert(struct lh_table *t, void *k, const void *v)
|
|||||||
unsigned long h, n;
|
unsigned long h, n;
|
||||||
|
|
||||||
t->inserts++;
|
t->inserts++;
|
||||||
if(t->count > t->size * 0.66) lh_table_resize(t, t->size * 2);
|
if(t->count >= t->size * LH_LOAD_FACTOR) lh_table_resize(t, t->size * 2);
|
||||||
|
|
||||||
h = t->hash_fn(k);
|
h = t->hash_fn(k);
|
||||||
n = h % t->size;
|
n = h % t->size;
|
||||||
|
|||||||
@@ -21,6 +21,13 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
#define LH_PRIME 0x9e370001UL
|
#define LH_PRIME 0x9e370001UL
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The fraction of filled hash buckets until an insert will cause the table
|
||||||
|
* to be resized.
|
||||||
|
* This can range from just above 0 up to 1.0.
|
||||||
|
*/
|
||||||
|
#define LH_LOAD_FACTOR 0.66
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sentinel pointer value for empty slots
|
* sentinel pointer value for empty slots
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user