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