diff src/rangetab.c @ 412:697ef44129c6 r21-2-14

Import from CVS: tag r21-2-14
author cvs
date Mon, 13 Aug 2007 11:20:41 +0200
parents 501cfd01ee6d
children 41dbb7a9d5f2
line wrap: on
line diff
--- a/src/rangetab.c	Mon Aug 13 11:19:22 2007 +0200
+++ b/src/rangetab.c	Mon Aug 13 11:20:41 2007 +0200
@@ -41,20 +41,20 @@
    is not hard but just requires moving that stuff out of that file. */
 
 static Lisp_Object
-mark_range_table (Lisp_Object obj)
+mark_range_table (Lisp_Object obj, void (*markobj) (Lisp_Object))
 {
-  Lisp_Range_Table *rt = XRANGE_TABLE (obj);
+  struct Lisp_Range_Table *rt = XRANGE_TABLE (obj);
   int i;
 
   for (i = 0; i < Dynarr_length (rt->entries); i++)
-    mark_object (Dynarr_at (rt->entries, i).val);
+    markobj (Dynarr_at (rt->entries, i).val);
   return Qnil;
 }
 
 static void
 print_range_table (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 {
-  Lisp_Range_Table *rt = XRANGE_TABLE (obj);
+  struct Lisp_Range_Table *rt = XRANGE_TABLE (obj);
   char buf[200];
   int i;
 
@@ -77,8 +77,8 @@
 static int
 range_table_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
 {
-  Lisp_Range_Table *rt1 = XRANGE_TABLE (obj1);
-  Lisp_Range_Table *rt2 = XRANGE_TABLE (obj2);
+  struct Lisp_Range_Table *rt1 = XRANGE_TABLE (obj1);
+  struct Lisp_Range_Table *rt2 = XRANGE_TABLE (obj2);
   int i;
 
   if (Dynarr_length (rt1->entries) != Dynarr_length (rt2->entries))
@@ -107,7 +107,7 @@
 static unsigned long
 range_table_hash (Lisp_Object obj, int depth)
 {
-  Lisp_Range_Table *rt = XRANGE_TABLE (obj);
+  struct Lisp_Range_Table *rt = XRANGE_TABLE (obj);
   int i;
   int size = Dynarr_length (rt->entries);
   unsigned long hash = size;
@@ -132,36 +132,10 @@
   return hash;
 }
 
-static const struct lrecord_description rte_description_1[] = {
-  { XD_LISP_OBJECT, offsetof (range_table_entry, val) },
-  { XD_END }
-};
-
-static const struct struct_description rte_description = {
-  sizeof (range_table_entry),
-  rte_description_1
-};
-
-static const struct lrecord_description rted_description_1[] = {
-  XD_DYNARR_DESC (range_table_entry_dynarr, &rte_description),
-  { XD_END }
-};
-
-static const struct struct_description rted_description = {
-  sizeof (range_table_entry_dynarr),
-  rted_description_1
-};
-
-static const struct lrecord_description range_table_description[] = {
-  { XD_STRUCT_PTR,  offsetof (Lisp_Range_Table, entries),  1, &rted_description },
-  { XD_END }
-};
-
 DEFINE_LRECORD_IMPLEMENTATION ("range-table", range_table,
                                mark_range_table, print_range_table, 0,
 			       range_table_equal, range_table_hash,
-			       range_table_description,
-			       Lisp_Range_Table);
+			       struct Lisp_Range_Table);
 
 /************************************************************************/
 /*                        Range table operations                        */
@@ -170,7 +144,7 @@
 #ifdef ERROR_CHECK_TYPECHECK
 
 static void
-verify_range_table (Lisp_Range_Table *rt)
+verify_range_table (struct Lisp_Range_Table *rt)
 {
   int i;
 
@@ -233,8 +207,8 @@
        ())
 {
   Lisp_Object obj;
-  Lisp_Range_Table *rt = alloc_lcrecord_type (Lisp_Range_Table,
-					      &lrecord_range_table);
+  struct Lisp_Range_Table *rt = alloc_lcrecord_type (struct Lisp_Range_Table,
+						     &lrecord_range_table);
   rt->entries = Dynarr_new (range_table_entry);
   XSETRANGE_TABLE (obj, rt);
   return obj;
@@ -246,13 +220,13 @@
 */
        (old_table))
 {
-  Lisp_Range_Table *rt, *rtnew;
+  struct Lisp_Range_Table *rt, *rtnew;
   Lisp_Object obj;
 
   CHECK_RANGE_TABLE (old_table);
   rt = XRANGE_TABLE (old_table);
 
-  rtnew = alloc_lcrecord_type (Lisp_Range_Table, &lrecord_range_table);
+  rtnew = alloc_lcrecord_type (struct Lisp_Range_Table, &lrecord_range_table);
   rtnew->entries = Dynarr_new (range_table_entry);
 
   Dynarr_add_many (rtnew->entries, Dynarr_atp (rt->entries, 0),
@@ -267,7 +241,7 @@
 */
        (pos, table, default_))
 {
-  Lisp_Range_Table *rt;
+  struct Lisp_Range_Table *rt;
 
   CHECK_RANGE_TABLE (table);
   rt = XRANGE_TABLE (table);
@@ -284,7 +258,7 @@
 {
   int i;
   int insert_me_here = -1;
-  Lisp_Range_Table *rt = XRANGE_TABLE (table);
+  struct Lisp_Range_Table *rt = XRANGE_TABLE (table);
 
   /* Now insert in the proper place.  This gets tricky because
      we may be overlapping one or more existing ranges and need
@@ -443,47 +417,10 @@
 DEFUN ("map-range-table", Fmap_range_table, 2, 2, 0, /*
 Map FUNCTION over entries in TABLE, calling it with three args,
 the beginning and end of the range and the corresponding value.
-
-Results are guaranteed to be correct (i.e. each entry processed
-exactly once) if FUNCTION modifies or deletes the current entry
-(i.e. passes the current range to `put-range-table' or
-`remove-range-table'), but not otherwise.
 */
        (function, table))
 {
-  Lisp_Range_Table *rt;
-  int i;
-
-  CHECK_RANGE_TABLE (table);
-  CHECK_FUNCTION (function);
-
-  rt = XRANGE_TABLE (table);
-
-  /* Do not "optimize" by pulling out the length computation below!
-     FUNCTION may have changed the table. */
-  for (i = 0; i < Dynarr_length (rt->entries); i++)
-    {
-      struct range_table_entry *entry = Dynarr_atp (rt->entries, i);
-      EMACS_INT first, last;
-      Lisp_Object args[4];
-      int oldlen;
-      
-    again:
-      first = entry->first;
-      last = entry->last;
-      oldlen = Dynarr_length (rt->entries);
-      args[0] = function;
-      args[1] = make_int (first);
-      args[2] = make_int (last);
-      args[3] = entry->val;
-      Ffuncall (countof (args), args);
-      /* Has FUNCTION removed the entry? */
-      if (oldlen > Dynarr_length (rt->entries)
-	  && i < Dynarr_length (rt->entries)
-	  && (first != entry->first || last != entry->last))
-	goto again;
-      }
-
+  error ("not yet implemented");
   return Qnil;
 }
 
@@ -741,8 +678,6 @@
 void
 syms_of_rangetab (void)
 {
-  INIT_LRECORD_IMPLEMENTATION (range_table);
-
   defsymbol (&Qrange_tablep, "range-table-p");
   defsymbol (&Qrange_table, "range-table");