f6a4558fb855a836763f741f218e5832d715344d
[YACASL2.git] / src / hash.c
1 #include "hash.h"
2
3 unsigned hash(int keyc, HKEY *keyv[], int tabsize)
4 {
5     int i, j;
6     unsigned hashval = 0;
7     enum {
8         HASHNUM = 31
9     };
10
11     for(i = 0; i < keyc; i++) {
12         switch(keyv[i]->type) {
13         case CHARS:
14             for(j = 0; keyv[i]->val.s[j]; j++) {
15                 hashval = keyv[i]->val.s[j] + HASHNUM * hashval;
16             }
17             break;
18         case INT:
19             hashval = keyv[i]->val.i + HASHNUM * hashval;
20             break;
21         default:
22             break;
23         }
24     }
25     return (hashval % tabsize);
26 }