X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fhash.c;h=f6a4558fb855a836763f741f218e5832d715344d;hb=1474b863964dc39064d70b7204a2c60ec9bffe50;hp=54f38abc1af26e8d92abb0a7bf5be6e4ebc0c550;hpb=fda1563ea37180835e0b9c6e7a9c7ae607895446;p=YACASL2.git diff --git a/src/hash.c b/src/hash.c index 54f38ab..f6a4558 100644 --- a/src/hash.c +++ b/src/hash.c @@ -1,21 +1,22 @@ #include "hash.h" -/* ハッシュ値を取得する */ unsigned hash(int keyc, HKEY *keyv[], int tabsize) { - int i; - char *p; + int i, j; unsigned hashval = 0; + enum { + HASHNUM = 31 + }; 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; + for(j = 0; keyv[i]->val.s[j]; j++) { + hashval = keyv[i]->val.s[j] + HASHNUM * hashval; } break; case INT: - hashval = keyv[i]->val.i + 31 * hashval; + hashval = keyv[i]->val.i + HASHNUM * hashval; break; default: break;