summaryrefslogtreecommitdiff
path: root/libguile/hash.c
diff options
context:
space:
mode:
authorMarius Vollmer <mvo@zagadka.de>2005-01-02 20:49:04 +0000
committerMarius Vollmer <mvo@zagadka.de>2005-01-02 20:49:04 +0000
commit4057a3e05afde62a4a5039668d129411958f330a (patch)
treef7240b20d7c05a0a944bfe7e2672ca9dd66f3cc8 /libguile/hash.c
parentf60539dba44057dbcf6179f30d4f03f44c46f0b6 (diff)
downloadguile-4057a3e05afde62a4a5039668d129411958f330a.tar.gz
Use new vector elements API or simple vector API, as appropriate.
Removed SCM_HAVE_ARRAYS ifdefery. Replaced all uses of SCM_HASHTABLE_BUCKETS with SCM_HASHTABLE_BUCKET.
Diffstat (limited to 'libguile/hash.c')
-rw-r--r--libguile/hash.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/libguile/hash.c b/libguile/hash.c
index 5123c2c15..9036d06db 100644
--- a/libguile/hash.c
+++ b/libguile/hash.c
@@ -120,20 +120,27 @@ scm_hasher(SCM obj, unsigned long n, size_t d)
case scm_tc7_wvect:
case scm_tc7_vector:
{
- size_t len = SCM_VECTOR_LENGTH(obj);
- SCM const *data = SCM_VELTS(obj);
+ size_t len = SCM_SIMPLE_VECTOR_LENGTH (obj);
if (len > 5)
{
size_t i = d/2;
unsigned long h = 1;
- while (i--) h = ((h << 8) + (scm_hasher (data[h % len], n, 2))) % n;
+ while (i--)
+ {
+ SCM elt = SCM_SIMPLE_VECTOR_REF (obj, h % len);
+ h = ((h << 8) + (scm_hasher (elt, n, 2))) % n;
+ }
return h;
}
else
{
size_t i = len;
unsigned long h = (n)-1;
- while (i--) h = ((h << 8) + (scm_hasher (data[i], n, d/len))) % n;
+ while (i--)
+ {
+ SCM elt = SCM_SIMPLE_VECTOR_REF (obj, h % len);
+ h = ((h << 8) + (scm_hasher (elt, n, d/len))) % n;
+ }
return h;
}
}