X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fhash.c;h=f6a4558fb855a836763f741f218e5832d715344d;hp=3da13dc4fa6a25e481aa0b203405bf410f732908;hb=8365c3016d2564c0498d2dc21300b1bff57e929b;hpb=d1f82970bf7d41db2fea11b08cd8e308f6cb8138 diff --git a/src/hash.c b/src/hash.c index 3da13dc..f6a4558 100644 --- a/src/hash.c +++ b/src/hash.c @@ -1,23 +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;