lib: use load factor as hash expansion trigger
unsigned int key;
unsigned int index;
void *newdata;
- unsigned int len;
struct hash_backet *backet;
key = (*hash->hash_key)(data);
index = key & (hash->size - 1);
- len = 0;
for (backet = hash->index[index]; backet != NULL;
backet = backet->next) {
if (backet->key == key && (*hash->hash_cmp)(backet->data, data))
return backet->data;
- ++len;
}
if (alloc_func) {
if (newdata == NULL)
return NULL;
- if (len > HASH_THRESHOLD) {
+ if (HASH_THRESHOLD(hash->count + 1, hash->size)) {
hash_expand(hash);
index = key & (hash->size - 1);
}
DECLARE_MTYPE(HASH_BACKET)
/* Default hash table size. */
-#define HASH_INITIAL_SIZE 256 /* initial number of backets. */
-#define HASH_THRESHOLD 10 /* expand when backet. */
+#define HASH_INITIAL_SIZE 256
+/* Expansion threshold */
+#define HASH_THRESHOLD(used, size) ((used) > (size))
#define HASHWALK_CONTINUE 0
#define HASHWALK_ABORT -1