]> git.proxmox.com Git - mirror_frr.git/commitdiff
Merge pull request #940 from qlyoung/hashtable-expansion-lf
authorDavid Lamparter <equinox@diac24.net>
Wed, 9 Aug 2017 18:43:40 +0000 (20:43 +0200)
committerGitHub <noreply@github.com>
Wed, 9 Aug 2017 18:43:40 +0000 (20:43 +0200)
lib: use load factor as hash expansion trigger

lib/hash.c
lib/hash.h

index 801871f8390c1bd96ae515249ffd6a4e5d14d13b..66341cf2f1af68e9258225d28140aecc66417460 100644 (file)
@@ -141,18 +141,15 @@ void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *))
        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) {
@@ -160,7 +157,7 @@ void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *))
                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);
                }
index 236abbbd6a2c573f34204dfa365343091c476f29..b6fe27e257ece05d05d0b9ba60623a8e7a99ef1d 100644 (file)
@@ -28,8 +28,9 @@ DECLARE_MTYPE(HASH)
 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