Mercurial > hg > xemacs-beta
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");