ソースの推敲
[YACASL2.git] / src / hash.c
index f63b3f5..f6a4558 100644 (file)
@@ -1,38 +1,22 @@
 #include "hash.h"
 
-/* ハッシュ表のサイズを決めるため、引数の数値より大きい最小の素数を返す */
-int hashtabsize(int size)
-{
-    int i;
-    const int prime[] =
-        {2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
-         31, 37, 41, 43, 47, 53, 59, 61, 67,
-         71, 73, 79, 83, 89, 97,
-        };
-    for(i = 0; i < ARRAYSIZE(prime); i++) {
-        if(i > 0 && prime[i] >= size) {
-            break;
-        }
-    }
-    return prime[i];
-}
-
-/* ハッシュ値を取得する */
 unsigned hash(int keyc, HKEY *keyv[], int tabsize)
 {
-    int i;
-    char *p;
+    int i, j;
     unsigned hashval = 0;
+    enum {
+        HASHNUM = 31
+    };
 
     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;
+            for(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;