summaryrefslogtreecommitdiff
path: root/src/ht.c
diff options
context:
space:
mode:
authorJSDurand <mmemmew@gmail.com>2022-02-01 12:22:34 +0800
committerJSDurand <mmemmew@gmail.com>2022-02-01 12:22:34 +0800
commit3fb5430080199a6d92a63f8259fe4a88df9b83ba (patch)
tree767c3266b59566e98234ec81b228cf8115096939 /src/ht.c
parenteb007d554251456a2a508849edf91b15aab1333e (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.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/ht.c b/src/ht.c
index 45953f4..770eff6 100644
--- a/src/ht.c
+++ b/src/ht.c
@@ -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;