ハッシュ関数を共用体版にし、ラベルの範囲をプログラム内だけで有効に
[YACASL2.git] / src / hash.c
1 #include "hash.h"
2
3 /* ハッシュ値を取得する */
4 unsigned hash(int keyc, HKEY *keyv[], int tabsize)
5 {
6     int i;
7     char *p;
8     unsigned hashval = 0;
9
10     for(i = 0; i < keyc; i++) {
11         switch(keyv[i]->type) {
12         case CHARS:
13             for(p = keyv[i]->val.s; *p != '\0'; p++) {
14                 hashval = *p + 31 * hashval;
15             }
16             break;
17         case INT:
18             hashval = keyv[i]->val.i + 31 * hashval;
19             break;
20         default:
21             break;
22         }
23     }
24     return (hashval % tabsize);
25 }