summaryrefslogtreecommitdiff
path: root/ht.c
diff options
context:
space:
mode:
authorubq323 <ubq323@ubq323.website>2024-06-21 02:46:15 +0100
committerubq323 <ubq323@ubq323.website>2024-06-21 02:46:15 +0100
commit671645c370498955eb101695bd9099bf4caf5aea (patch)
tree119db5228fceaa1e340a2f30017885b5377a2068 /ht.c
parent5298940fc7798455d701d075b910e0545d3f6048 (diff)
minor optimization
Diffstat (limited to 'ht.c')
-rw-r--r--ht.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/ht.c b/ht.c
index 09eec3e..a2845f0 100644
--- a/ht.c
+++ b/ht.c
@@ -24,15 +24,17 @@ Ht ht_new() {
}
static HtEntry *find(HtEntry *b, size_t cap, ObjString *k) {
- size_t ix = k->hash % cap;
+ // cap is guaranteed to be power of 2
+ size_t mask = cap - 1;
+ size_t ix = k->hash & mask;
if (cap == 0) return NULL;
for (;;) {
HtEntry *ent = &b[ix];
// XXX tombstones
- if (ent->k == k || ent->k == NULL) {
+ if (ent->k == NULL || ent->k == k) {
return ent;
}
- ix = (ix+1)%cap;
+ ix = (ix+1) & mask;
}
}