X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fhash.c;h=f4e8b9fbbfd96d96f4193729e4da8f95b95a834c;hp=b673d535f3941c9723c423505b849ad7d3937a56;hb=86e559d164166966a797a1e5855871d48e087ddd;hpb=faec695d5b7ecf7dd3e4a07ac926ea93ca89020b diff --git a/src/hash.c b/src/hash.c index b673d53..f4e8b9f 100644 --- a/src/hash.c +++ b/src/hash.c @@ -1,9 +1,25 @@ -/* ハッシュ値を取得する */ -unsigned hash(const char *key, int size){ - unsigned hashval; +#include "hash.h" - for(hashval = 0; *key != '\0'; key++){ - hashval = *key + 31 * hashval; +unsigned hash(int keyc, HKEY *keyv[], int tabsize) +{ + unsigned hashval = 0; + enum { + HASHNUM = 31 + }; + + for(int i = 0; i < keyc; i++) { + switch(keyv[i]->type) { + case CHARS: + 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 + HASHNUM * hashval; + break; + default: + break; + } } - return hashval % size; + return (hashval % tabsize); }