From ba3932579cf70feac6d4bc622cda071e418700f4 Mon Sep 17 00:00:00 2001 From: Dirk Herrmann Date: Tue, 12 Dec 2000 13:57:26 +0000 Subject: [PATCH] * Moved function scm_string_hash to hash.c. --- libguile/ChangeLog | 5 +++++ libguile/hash.c | 22 ++++++++++++++++++++++ libguile/hash.h | 1 + libguile/symbols.c | 23 +---------------------- libguile/symbols.h | 2 -- 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/libguile/ChangeLog b/libguile/ChangeLog index 8b13ca64c..9485de2cc 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,3 +1,8 @@ +2000-12-12 Dirk Herrmann + + * hash.[ch] (scm_string_hash), symbols.[ch] (scm_string_hash): + Moved function scm_string_hash to hash.c. + 2000-12-11 Marius Vollmer * gc_os_dep.c (scm_get_stack_base) [MSWIN32]: Added detection of diff --git a/libguile/hash.c b/libguile/hash.c index 529ad9fa0..ff9e45fd3 100644 --- a/libguile/hash.c +++ b/libguile/hash.c @@ -61,6 +61,28 @@ extern double floor(); #endif +unsigned long +scm_string_hash (const unsigned char *str, scm_sizet len) +{ + if (len > 5) + { + scm_sizet i = 5; + unsigned long h = 264; + while (i--) + h = (h << 8) + ((unsigned) (scm_downcase (str[h % len]))); + return h; + } + else + { + scm_sizet i = len; + unsigned long h = 0; + while (i) + h = (h << 8) + ((unsigned) (scm_downcase (str[--i]))); + return h; + } +} + + /* Dirk:FIXME:: why downcase for characters? (2x: scm_hasher, scm_ihashv) */ /* Dirk:FIXME:: scm_hasher could be made static. */ diff --git a/libguile/hash.h b/libguile/hash.h index 6017a5e93..0b2ba1037 100644 --- a/libguile/hash.h +++ b/libguile/hash.h @@ -48,6 +48,7 @@ +extern unsigned long scm_string_hash (const unsigned char *str, scm_sizet len); extern unsigned long scm_hasher (SCM obj, unsigned long n, scm_sizet d); extern unsigned int scm_ihashq (SCM obj, unsigned int n); extern SCM scm_hashq (SCM obj, SCM n); diff --git a/libguile/symbols.c b/libguile/symbols.c index a50c57367..dc5be4729 100644 --- a/libguile/symbols.c +++ b/libguile/symbols.c @@ -48,6 +48,7 @@ #include "libguile/_scm.h" #include "libguile/chars.h" #include "libguile/eval.h" +#include "libguile/hash.h" #include "libguile/smob.h" #include "libguile/variable.h" #include "libguile/alist.h" @@ -81,28 +82,6 @@ duplicate_string (const char * src, unsigned long length) */ -unsigned long -scm_string_hash (const unsigned char *str, scm_sizet len) -{ - if (len > 5) - { - scm_sizet i = 5; - unsigned long h = 264; - while (i--) - h = (h << 8) + ((unsigned) (scm_downcase (str[h % len]))); - return h; - } - else - { - scm_sizet i = len; - unsigned long h = 0; - while (i) - h = (h << 8) + ((unsigned) (scm_downcase (str[--i]))); - return h; - } -} - - /* scm_sym2vcell * looks up the symbol in the symhash table. */ diff --git a/libguile/symbols.h b/libguile/symbols.h index 848d985f9..423a7a148 100644 --- a/libguile/symbols.h +++ b/libguile/symbols.h @@ -71,8 +71,6 @@ -extern unsigned long scm_string_hash (const unsigned char *str, scm_sizet len); - extern SCM scm_mem2symbol (const char*, scm_sizet); extern SCM scm_str2symbol (const char*); -- 2.20.1