Mercurial > hg > xemacs-beta
diff src/rangetab.c @ 398:74fd4e045ea6 r21-2-29
Import from CVS: tag r21-2-29
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:13:30 +0200 |
parents | 8626e4521993 |
children | a86b2b5e0111 |
line wrap: on
line diff
--- a/src/rangetab.c Mon Aug 13 11:12:06 2007 +0200 +++ b/src/rangetab.c Mon Aug 13 11:13:30 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, void (*markobj) (Lisp_Object)) +mark_range_table (Lisp_Object obj) { - struct Lisp_Range_Table *rt = XRANGE_TABLE (obj); + Lisp_Range_Table *rt = XRANGE_TABLE (obj); int i; for (i = 0; i < Dynarr_length (rt->entries); i++) - markobj (Dynarr_at (rt->entries, i).val); + mark_object (Dynarr_at (rt->entries, i).val); return Qnil; } static void print_range_table (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) { - struct Lisp_Range_Table *rt = XRANGE_TABLE (obj); + 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) { - struct Lisp_Range_Table *rt1 = XRANGE_TABLE (obj1); - struct Lisp_Range_Table *rt2 = XRANGE_TABLE (obj2); + Lisp_Range_Table *rt1 = XRANGE_TABLE (obj1); + 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) { - struct Lisp_Range_Table *rt = XRANGE_TABLE (obj); + Lisp_Range_Table *rt = XRANGE_TABLE (obj); int i; int size = Dynarr_length (rt->entries); unsigned long hash = size; @@ -132,10 +132,36 @@ 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, - struct Lisp_Range_Table); + range_table_description, + Lisp_Range_Table); /************************************************************************/ /* Range table operations */ @@ -144,7 +170,7 @@ #ifdef ERROR_CHECK_TYPECHECK static void -verify_range_table (struct Lisp_Range_Table *rt) +verify_range_table (Lisp_Range_Table *rt) { int i; @@ -207,8 +233,8 @@ ()) { Lisp_Object obj; - struct Lisp_Range_Table *rt = alloc_lcrecord_type (struct Lisp_Range_Table, - lrecord_range_table); + Lisp_Range_Table *rt = alloc_lcrecord_type (Lisp_Range_Table, + &lrecord_range_table); rt->entries = Dynarr_new (range_table_entry); XSETRANGE_TABLE (obj, rt); return obj; @@ -220,13 +246,13 @@ */ (old_table)) { - struct Lisp_Range_Table *rt, *rtnew; + Lisp_Range_Table *rt, *rtnew; Lisp_Object obj; CHECK_RANGE_TABLE (old_table); rt = XRANGE_TABLE (old_table); - rtnew = alloc_lcrecord_type (struct Lisp_Range_Table, lrecord_range_table); + rtnew = alloc_lcrecord_type (Lisp_Range_Table, &lrecord_range_table); rtnew->entries = Dynarr_new (range_table_entry); Dynarr_add_many (rtnew->entries, Dynarr_atp (rt->entries, 0), @@ -241,7 +267,7 @@ */ (pos, table, default_)) { - struct Lisp_Range_Table *rt; + Lisp_Range_Table *rt; CHECK_RANGE_TABLE (table); rt = XRANGE_TABLE (table); @@ -258,7 +284,7 @@ { int i; int insert_me_here = -1; - struct Lisp_Range_Table *rt = XRANGE_TABLE (table); + 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