comparison src/rangetab.h @ 5168:cf900a2f1fa3

extract gap array from extents.c, use in range tables -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-03-22 Ben Wing <ben@xemacs.org> * Makefile.in.in (objs): * array.c: * array.c (gap_array_adjust_markers): * array.c (gap_array_move_gap): * array.c (gap_array_make_gap): * array.c (gap_array_insert_els): * array.c (gap_array_delete_els): * array.c (gap_array_make_marker): * array.c (gap_array_delete_marker): * array.c (gap_array_delete_all_markers): * array.c (gap_array_clone): * array.h: * depend: * emacs.c (main_1): * extents.c: * extents.c (EXTENT_GAP_ARRAY_AT): * extents.c (extent_list_num_els): * extents.c (extent_list_locate): * extents.c (extent_list_at): * extents.c (extent_list_delete_all): * extents.c (allocate_extent_list): * extents.c (syms_of_extents): * extents.h: * extents.h (XEXTENT_LIST_MARKER): * lisp.h: * rangetab.c: * rangetab.c (mark_range_table): * rangetab.c (print_range_table): * rangetab.c (range_table_equal): * rangetab.c (range_table_hash): * rangetab.c (verify_range_table): * rangetab.c (get_range_table_pos): * rangetab.c (Fmake_range_table): * rangetab.c (Fcopy_range_table): * rangetab.c (Fget_range_table): * rangetab.c (put_range_table): * rangetab.c (Fclear_range_table): * rangetab.c (Fmap_range_table): * rangetab.c (unified_range_table_bytes_needed): * rangetab.c (unified_range_table_copy_data): * rangetab.c (unified_range_table_lookup): * rangetab.h: * rangetab.h (struct range_table_entry): * rangetab.h (struct Lisp_Range_Table): * rangetab.h (rangetab_gap_array_at): * symsinit.h: Rename dynarr.c to array.c. Move gap array from extents.c to array.c. Extract dynarr, gap array and stack-like malloc into new file array.h. Rename GAP_ARRAY_NUM_ELS -> gap_array_length(). Add gap_array_at(), gap_array_atp(). Rewrite range table code to use gap arrays. Make put_range_table() smarter so that its operation is O(log n) for adding a localized range. * gc.c (lispdesc_block_size_1): Don't ABORT() when two elements are located at the same place. This will happen with a size-0 gap array -- both parts of the array (before and after gap) are in the same place.
author Ben Wing <ben@xemacs.org>
date Mon, 22 Mar 2010 19:12:15 -0500
parents a9c41067dd88
children 308d34e9f07d
comparison
equal deleted inserted replaced
5167:e374ea766cc1 5168:cf900a2f1fa3
1 /* XEmacs routines to deal with range tables. 1 /* XEmacs routines to deal with range tables.
2 Copyright (C) 1995 Sun Microsystems, Inc. 2 Copyright (C) 1995 Sun Microsystems, Inc.
3 Copyright (C) 1995, 2004 Ben Wing. 3 Copyright (C) 1995, 2004, 2010 Ben Wing.
4 4
5 This file is part of XEmacs. 5 This file is part of XEmacs.
6 6
7 XEmacs is free software; you can redistribute it and/or modify it 7 XEmacs is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the 8 under the terms of the GNU General Public License as published by the
27 #define INCLUDED_rangetab_h_ 27 #define INCLUDED_rangetab_h_
28 28
29 typedef struct range_table_entry range_table_entry; 29 typedef struct range_table_entry range_table_entry;
30 struct range_table_entry 30 struct range_table_entry
31 { 31 {
32 #ifdef NEW_GC
33 NORMAL_LISP_OBJECT_HEADER header;
34 #endif /* NEW_GC */
32 EMACS_INT first; 35 EMACS_INT first;
33 EMACS_INT last; 36 EMACS_INT last;
34 Lisp_Object val; 37 Lisp_Object val;
35 }; 38 };
36 39
48 }; 51 };
49 52
50 struct Lisp_Range_Table 53 struct Lisp_Range_Table
51 { 54 {
52 NORMAL_LISP_OBJECT_HEADER header; 55 NORMAL_LISP_OBJECT_HEADER header;
53 range_table_entry_dynarr *entries; 56 Gap_Array *entries;
54 enum range_table_type type; 57 enum range_table_type type;
55 }; 58 };
56 typedef struct Lisp_Range_Table Lisp_Range_Table; 59 typedef struct Lisp_Range_Table Lisp_Range_Table;
57 60
58 DECLARE_LISP_OBJECT (range_table, Lisp_Range_Table); 61 DECLARE_LISP_OBJECT (range_table, Lisp_Range_Table);
59 #define XRANGE_TABLE(x) XRECORD (x, range_table, Lisp_Range_Table) 62 #define XRANGE_TABLE(x) XRECORD (x, range_table, Lisp_Range_Table)
60 #define wrap_range_table(p) wrap_record (p, range_table) 63 #define wrap_range_table(p) wrap_record (p, range_table)
61 #define RANGE_TABLEP(x) RECORDP (x, range_table) 64 #define RANGE_TABLEP(x) RECORDP (x, range_table)
62 #define CHECK_RANGE_TABLE(x) CHECK_RECORD (x, range_table) 65 #define CHECK_RANGE_TABLE(x) CHECK_RECORD (x, range_table)
63 66
67 #define rangetab_gap_array_at(ga, pos) \
68 gap_array_at (ga, pos, struct range_table_entry)
69 #define rangetab_gap_array_atp(ga, pos) \
70 gap_array_atp (ga, pos, struct range_table_entry)
64 #endif /* INCLUDED_rangetab_h_ */ 71 #endif /* INCLUDED_rangetab_h_ */