diff options
author | JSDurand <mmemmew@gmail.com> | 2022-02-01 12:22:34 +0800 |
---|---|---|
committer | JSDurand <mmemmew@gmail.com> | 2022-02-01 12:22:34 +0800 |
commit | 3fb5430080199a6d92a63f8259fe4a88df9b83ba (patch) | |
tree | 767c3266b59566e98234ec81b228cf8115096939 /src/ht.c | |
parent | eb007d554251456a2a508849edf91b15aab1333e (diff) |
need to stop abusing hash tables
Hash tables take too much space!
If I use hash tables, the length of the input will be severely
limited, to an unacceptable extent. So we have to use arrays
instead.
Diffstat (limited to 'src/ht.c')
-rw-r--r-- | src/ht.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -3,7 +3,7 @@ #include <stdio.h> #include "ht.h" -#define HT_REHASH_THRESHOLD 0.5 +#define HT_REHASH_THRESHOLD 0.7 P_ATTR static NUM @@ -171,7 +171,10 @@ destroy_ht(ht * restrict htp, HT_DESTROY_FLAG flag) static BOOL ht_expand(ht *htp) { - htp->capability <<= 1; + UNUM newcap = htp->capability << 1; + + if (newcap < htp->capability + (1 << 20)) htp->capability = newcap; + else htp->capability = htp->capability + (1 << 20); void **keys = NULL; NUM size = htp->size; |