summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hash.c21
-rw-r--r--hash.h1
2 files changed, 10 insertions, 12 deletions
diff --git a/hash.c b/hash.c
index 5b472130..9b1d4b46 100644
--- a/hash.c
+++ b/hash.c
@@ -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));
}
diff --git a/hash.h b/hash.h
index 608ecddd..f5af5c0a 100644
--- a/hash.h
+++ b/hash.h
@@ -32,6 +32,7 @@ val make_hash(val weak_keys, val weak_vals, val equal_based);
val make_similar_hash(val existing);
val copy_hash(val existing);
val gethash_c(val hash, val key, loc new_p);
+val gethash_e(val hash, val key);
val gethash(val hash, val key);
val inhash(val hash, val key, val init);
val gethash_n(val hash, val key, val notfound_val);