X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fhash.c;h=54f38abc1af26e8d92abb0a7bf5be6e4ebc0c550;hp=b673d535f3941c9723c423505b849ad7d3937a56;hb=fda1563ea37180835e0b9c6e7a9c7ae607895446;hpb=1f490c5ea15d073c9ec918b78a5e6117a0a8bd3e diff --git a/src/hash.c b/src/hash.c index b673d53..54f38ab 100644 --- 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); }