changeset 99975:dddfb4772d33

(hash_get_category_set): New function. (Fmodify_category_entry): Adjusted for the change of char_table_ref_and_range. Call hash_get_category_set to get a category set to store in the table.
author Kenichi Handa <handa@m17n.org>
date Thu, 27 Nov 2008 07:59:21 +0000
parents dd35b16ab453
children 33f97c9e6889
files src/category.c
diffstat 1 files changed, 29 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/category.c	Thu Nov 27 07:59:11 2008 +0000
+++ b/src/category.c	Thu Nov 27 07:59:21 2008 +0000
@@ -58,6 +58,32 @@
 
 /* Category set staff.  */
 
+static Lisp_Object hash_get_category_set P_ ((Lisp_Object, Lisp_Object));
+
+static Lisp_Object
+hash_get_category_set (table, category_set)
+     Lisp_Object table, category_set;
+{
+  Lisp_Object val;
+  struct Lisp_Hash_Table *h;
+  int i;
+  unsigned hash;
+
+  if (NILP (XCHAR_TABLE (table)->extras[1]))
+    XCHAR_TABLE (table)->extras[1]
+      = make_hash_table (Qequal, make_number (DEFAULT_HASH_SIZE),
+			 make_float (DEFAULT_REHASH_SIZE),
+			 make_float (DEFAULT_REHASH_THRESHOLD),
+			 Qnil, Qnil, Qnil);
+  h = XHASH_TABLE (XCHAR_TABLE (table)->extras[1]);
+  i = hash_lookup (h, category_set, &hash);
+  if (i >= 0)
+    return HASH_KEY (h, i);
+  hash_put (h, category_set, Qnil, hash);
+  return category_set;
+}
+
+
 DEFUN ("make-category-set", Fmake_category_set, Smake_category_set, 1, 1, 0,
        doc: /* Return a newly created category-set which contains CATEGORIES.
 CATEGORIES is a string of category mnemonics.
@@ -370,15 +396,14 @@
 
   while (start <= end)
     {
+      from = start, to = end;
       category_set = char_table_ref_and_range (table, start, &from, &to);
       if (CATEGORY_MEMBER (XFASTINT (category), category_set) != NILP (reset))
 	{
 	  category_set = Fcopy_sequence (category_set);
 	  SET_CATEGORY_SET (category_set, category, set_value);
-	  if (to > end)
-	    char_table_set_range (table, start, end, category_set);
-	  else
-	    char_table_set_range (table, start, to, category_set);
+	  category_set = hash_get_category_set (table, category_set);
+	  char_table_set_range (table, start, to, category_set);
 	}
       start = to + 1;
     }