projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ハッシュ関数を共用体版にし、ラベルの範囲をプログラム内だけで有効に
[YACASL2.git]
/
src
/
hash.c
diff --git
a/src/hash.c
b/src/hash.c
index
b673d53
..
54f38ab
100644
(file)
--- a/
src/hash.c
+++ b/
src/hash.c
@@
-1,9
+1,25
@@
+#include "hash.h"
+
/* ハッシュ値を取得する */
/* ハッシュ値を取得する */
-unsigned hash(const char *key, int size){
- unsigned hashval;
+unsigned hash(int keyc, HKEY *keyv[], int tabsize)
+{
+ int i;
+ char *p;
+ unsigned hashval = 0;
- for(hashval = 0; *key != '\0'; key++){
- hashval = *key + 31 * hashval;
+ for(i = 0; i < keyc; i++) {
+ switch(keyv[i]->type) {
+ case CHARS:
+ for(p = keyv[i]->val.s; *p != '\0'; p++) {
+ hashval = *p + 31 * hashval;
+ }
+ break;
+ case INT:
+ hashval = keyv[i]->val.i + 31 * hashval;
+ break;
+ default:
+ break;
+ }
}
}
- return
hashval % size
;
+ return
(hashval % tabsize)
;
}
}