diff options
author | ubq323 <ubq323@ubq323.website> | 2024-06-21 02:46:15 +0100 |
---|---|---|
committer | ubq323 <ubq323@ubq323.website> | 2024-06-21 02:46:15 +0100 |
commit | 671645c370498955eb101695bd9099bf4caf5aea (patch) | |
tree | 119db5228fceaa1e340a2f30017885b5377a2068 /ht.c | |
parent | 5298940fc7798455d701d075b910e0545d3f6048 (diff) |
minor optimization
Diffstat (limited to 'ht.c')
-rw-r--r-- | ht.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -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; } } |