diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-01-29 14:08:07 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-01-29 14:08:07 -0800 |
commit | 3dc7aa2ef572a26f9c5e0ea134b43c80a013e8f5 (patch) | |
tree | ba497af2f84050dfa253b6860e26854150544496 /hash.c | |
parent | 06a0dd484bc93a02bd3cf4ff77d2b99474c84c4e (diff) | |
download | txr-3dc7aa2ef572a26f9c5e0ea134b43c80a013e8f5.tar.gz txr-3dc7aa2ef572a26f9c5e0ea134b43c80a013e8f5.tar.bz2 txr-3dc7aa2ef572a26f9c5e0ea134b43c80a013e8f5.zip |
Simplify gethash variants using new function.
* hash.c (gethash_e): New function. Just returns the entry cell if
found, or else nil. This should have been written first.
(gethash, gethash_f, gethash_n): Replace body with trivial one-liner
based on gethash_e.
* hash.h (gethash_e): Declared.
Diffstat (limited to 'hash.c')
-rw-r--r-- | hash.c | 21 |
1 files changed, 9 insertions, 12 deletions
@@ -676,13 +676,18 @@ val gethash_c(val hash, val key, loc new_p) return cell; } -val gethash(val hash, val key) +val gethash_e(val hash, val key) { struct hash *h = coerce(struct hash *, cobj_handle(hash, hash_s)); int lim = hash_rec_limit; cnum hv = h->hash_fun(key, &lim); val chain = vecref(h->table, num_fast(hv % h->modulus)); - val found = h->assoc_fun(key, hv, chain); + return h->assoc_fun(key, hv, chain); +} + +val gethash(val hash, val key) +{ + val found = gethash_e(hash, key); return cdr(found); } @@ -704,21 +709,13 @@ val inhash(val hash, val key, val init) val gethash_f(val hash, val key, loc found) { - struct hash *h = coerce(struct hash *, cobj_handle(hash, hash_s)); - int lim = hash_rec_limit; - cnum hv = h->hash_fun(key, &lim); - val chain = vecref(h->table, num_fast(hv % h->modulus)); - set(found, h->assoc_fun(key, hv, chain)); + set(found, gethash_e(hash, key)); return cdr(deref(found)); } val gethash_n(val hash, val key, val notfound_val) { - struct hash *h = coerce(struct hash *, cobj_handle(hash, hash_s)); - int lim = hash_rec_limit; - cnum hv = h->hash_fun(key, &lim); - val chain = vecref(h->table, num_fast(hv % h->modulus)); - val existing = h->assoc_fun(key, hv, chain); + val existing = gethash_e(hash, key); return if3(existing, cdr(existing), default_bool_arg(notfound_val)); } |