diff options
author | Marius Vollmer <mvo@zagadka.de> | 2005-01-02 20:49:04 +0000 |
---|---|---|
committer | Marius Vollmer <mvo@zagadka.de> | 2005-01-02 20:49:04 +0000 |
commit | 4057a3e05afde62a4a5039668d129411958f330a (patch) | |
tree | f7240b20d7c05a0a944bfe7e2672ca9dd66f3cc8 /libguile/hash.c | |
parent | f60539dba44057dbcf6179f30d4f03f44c46f0b6 (diff) | |
download | guile-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.c | 15 |
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; } } |