update.
[chise/concord.git] / name.c
diff --git a/name.c b/name.c
index 517c6b2..3f44b12 100644 (file)
--- a/name.c
+++ b/name.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003,2004,2005 MORIOKA Tomohiko
+/* Copyright (C) 2003, 2004, 2005, 2006, 2013 MORIOKA Tomohiko
    This file is part of the CONCORD Library.
 
    The CONCORD Library is free software; you can redistribute it and/or
 #include <string.h>
 #include <stdlib.h>
 #include "concord-name.h"
-
-struct CONCORD_HASH_TABLE_ENTRY
-{
-  void *key;
-  void *value;
-};
-
-struct CONCORD_HASH_TABLE
-{
-  size_t size;
-  CONCORD_HASH_TABLE_ENTRY *data;
-};
-
-CONCORD_HASH_TABLE* concord_make_hash_table (size_t size);
-void concord_destroy_hash_table (CONCORD_HASH_TABLE* hash);
-int concord_hash_c_string (const unsigned char *ptr);
+#include "hash-i.h"
 
 CONCORD_HASH_TABLE*
 concord_make_hash_table (size_t size)
@@ -70,14 +55,14 @@ concord_destroy_hash_table (CONCORD_HASH_TABLE* table)
 
 
 /* derived from hashpjw, Dragon Book P436. */
-int
+unsigned long
 concord_hash_c_string (const unsigned char *ptr)
 {
-  int hash = 0;
+  unsigned long hash = 0;
 
   while (*ptr != '\0')
     {
-      int g;
+      unsigned long g;
       hash = (hash << 4) + *ptr++;
       g = hash & 0xf0000000;
       if (g)
@@ -114,7 +99,7 @@ concord_destroy_name_table (CONCORD_NAME_TABLE* table)
 
 int
 concord_name_table_put (CONCORD_NAME_TABLE* table,
-                     const unsigned char *key, void *value)
+                       const char *key, void *value)
 {
   int i, index;
   CONCORD_NAME_TABLE_ENTRY* entry;
@@ -122,7 +107,7 @@ concord_name_table_put (CONCORD_NAME_TABLE* table,
   if (table == NULL)
     return -1;
 
-  index = concord_hash_c_string (key) % table->size;
+  index = concord_hash_c_string ((unsigned char*)key) % table->size;
   for (i = index; i < table->size; i++)
     {
       entry = &table->data[i];
@@ -149,8 +134,7 @@ concord_name_table_put (CONCORD_NAME_TABLE* table,
 }
 
 void *
-concord_name_table_get (CONCORD_NAME_TABLE* table,
-                       const unsigned char *key)
+concord_name_table_get (CONCORD_NAME_TABLE* table, const char *key)
 {
   int i, index;
   CONCORD_NAME_TABLE_ENTRY entry;
@@ -158,7 +142,7 @@ concord_name_table_get (CONCORD_NAME_TABLE* table,
   if (table == NULL)
     return NULL;
 
-  index = concord_hash_c_string (key) % table->size;
+  index = concord_hash_c_string ((unsigned char*)key) % table->size;
   for (i = index; i < table->size; i++)
     {
       entry = table->data[i];
@@ -195,6 +179,7 @@ concord_name_table_grow (CONCORD_NAME_TABLE* table)
            }
        }
     }
+  free (table->data);
   table->size = new_table->size;
   table->data = new_table->data;
   free (new_table);