Mercurial > hg > xemacs-beta
comparison src/elhash.c @ 2421:ab71ad6ff3dd
[xemacs-hg @ 2004-12-06 03:50:53 by ben]
(none)
README.packages: Document use of --package-prefix.
Fix error in specifying standard package location.
make-docfile.c: Use QXE_PATH_MAX.
info.el: Correct doc string giving example package path.
menubar-items.el: Move Prefix Rectangle command up one level.
xemacs/packages.texi: Add long form of Lisp Reference Manual to links.
Add links pointing to Lisp Reference Manual for more detailed
package discussion.
lispref/range-tables.texi: Document range-table changes.
internals/internals.texi: Update history section.
elhash.c, elhash.h, profile.c: Create inchash_eq() to allow direct incrementing of hash-table
entry. Use in profile.c to try to reduce profiling overhead.
Increase initial size of profile hash tables to reduce profiling
overhead.
buffer.c, device-msw.c, dialog-msw.c, dired-msw.c, editfns.c, event-msw.c, events.c, glyphs-msw.c, keymap.c, objects-msw.c, process-nt.c, syswindows.h, text.c, text.h, unexnt.c: Rename xetcs* -> qxetcs* for consistency with qxestr*.
Rename ei*_c(_*) -> ei*_ascii(_*) since they work with ASCII-only
strings not "C strings", whatever those are. This is the last
place where "c" was incorrectly being used for "ascii".
dialog-msw.c, dumper.c, event-msw.c, fileio.c, glyphs-gtk.c, glyphs-x.c, nt.c, process-nt.c, realpath.c, sysdep.c, sysfile.h, unexcw.c, unexnext.c, unexnt.c: Try to avoid differences in systems that do or do not include
final null byte in PATH_MAX. Create PATH_MAX_INTERNAL and
PATH_MAX_EXTERNAL and use them everywhere. Rewrite code in
dumper.c to avoid use of PATH_MAX. When necessary in nt.c,
use _MAX_PATH instead of MAX_PATH to be consistent with
other places.
text.c: Code to short-circuit when binary or Unicode was not working
due to EOL wrapping. Fix this code to work when either no
EOL autodetection or no CR's or LF's in the text.
lisp.h, rangetab.c, rangetab.h, regex.c, search.c: Implement different types of ranges (open/closed start and end).
Change default to be start-closed, end-open.
author | ben |
---|---|
date | Mon, 06 Dec 2004 03:52:23 +0000 |
parents | ecf1ebac70d8 |
children | 3d8143fc88e1 |
comparison
equal
deleted
inserted
replaced
2420:ad56e5a6d09f | 2421:ab71ad6ff3dd |
---|---|
1 /* Implementation of the hash table lisp object type. | 1 /* Implementation of the hash table lisp object type. |
2 Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. | 2 Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. |
3 Copyright (C) 1995, 1996, 2002 Ben Wing. | 3 Copyright (C) 1995, 1996, 2002, 2004 Ben Wing. |
4 Copyright (C) 1997 Free Software Foundation, Inc. | 4 Copyright (C) 1997 Free Software Foundation, Inc. |
5 | 5 |
6 This file is part of XEmacs. | 6 This file is part of XEmacs. |
7 | 7 |
8 XEmacs is free software; you can redistribute it and/or modify it | 8 XEmacs is free software; you can redistribute it and/or modify it |
400 print_hash_table_data (ht, printcharfun); | 400 print_hash_table_data (ht, printcharfun); |
401 | 401 |
402 if (print_readably) | 402 if (print_readably) |
403 write_c_string (printcharfun, ")"); | 403 write_c_string (printcharfun, ")"); |
404 else | 404 else |
405 { | 405 write_fmt_string (printcharfun, " 0x%x>", ht->header.uid); |
406 write_fmt_string (printcharfun, " 0x%x>", ht->header.uid); | |
407 } | |
408 } | 406 } |
409 | 407 |
410 static void | 408 static void |
411 free_hentries (htentry *hentries, | 409 free_hentries (htentry *hentries, |
412 #ifdef ERROR_CHECK_STRUCTURES | 410 #ifdef ERROR_CHECK_STRUCTURES |
788 Lisp_Object rehash_size = Qnil; | 786 Lisp_Object rehash_size = Qnil; |
789 Lisp_Object rehash_threshold = Qnil; | 787 Lisp_Object rehash_threshold = Qnil; |
790 Lisp_Object weakness = Qnil; | 788 Lisp_Object weakness = Qnil; |
791 Lisp_Object data = Qnil; | 789 Lisp_Object data = Qnil; |
792 | 790 |
793 while (!NILP (plist)) | 791 PROPERTY_LIST_LOOP_3 (key, value, plist) |
794 { | 792 { |
795 Lisp_Object key, value; | |
796 key = XCAR (plist); plist = XCDR (plist); | |
797 value = XCAR (plist); plist = XCDR (plist); | |
798 | |
799 if (EQ (key, Qtest)) test = value; | 793 if (EQ (key, Qtest)) test = value; |
800 else if (EQ (key, Qsize)) size = value; | 794 else if (EQ (key, Qsize)) size = value; |
801 else if (EQ (key, Qrehash_size)) rehash_size = value; | 795 else if (EQ (key, Qrehash_size)) rehash_size = value; |
802 else if (EQ (key, Qrehash_threshold)) rehash_threshold = value; | 796 else if (EQ (key, Qrehash_threshold)) rehash_threshold = value; |
803 else if (EQ (key, Qweakness)) weakness = value; | 797 else if (EQ (key, Qweakness)) weakness = value; |
1061 LINEAR_PROBING_LOOP (probe, entries, ht->size) | 1055 LINEAR_PROBING_LOOP (probe, entries, ht->size) |
1062 if (KEYS_EQUAL_P (probe->key, key, test_function)) | 1056 if (KEYS_EQUAL_P (probe->key, key, test_function)) |
1063 break; | 1057 break; |
1064 | 1058 |
1065 return probe; | 1059 return probe; |
1060 } | |
1061 | |
1062 /* A version of Fputhash() that increments the value by the specified | |
1063 amount and dispenses will all error checks. Assumes that tables does | |
1064 comparison using EQ. Used by the profiling routines to avoid | |
1065 overhead -- profiling overhead was being recorded at up to 15% of the | |
1066 total time. */ | |
1067 | |
1068 void | |
1069 inchash_eq (Lisp_Object key, Lisp_Object table, EMACS_INT offset) | |
1070 { | |
1071 Lisp_Hash_Table *ht = XHASH_TABLE (table); | |
1072 htentry *entries = ht->hentries; | |
1073 htentry *probe = entries + HASHCODE (key, ht); | |
1074 | |
1075 LINEAR_PROBING_LOOP (probe, entries, ht->size) | |
1076 if (EQ (probe->key, key)) | |
1077 break; | |
1078 | |
1079 if (!HTENTRY_CLEAR_P (probe)) | |
1080 probe->value = make_int (XINT (probe->value) + offset); | |
1081 else | |
1082 { | |
1083 probe->key = key; | |
1084 probe->value = make_int (offset); | |
1085 | |
1086 if (++ht->count >= ht->rehash_count) | |
1087 enlarge_hash_table (ht); | |
1088 } | |
1066 } | 1089 } |
1067 | 1090 |
1068 DEFUN ("gethash", Fgethash, 2, 3, 0, /* | 1091 DEFUN ("gethash", Fgethash, 2, 3, 0, /* |
1069 Find hash value for KEY in HASH-TABLE. | 1092 Find hash value for KEY in HASH-TABLE. |
1070 If there is no corresponding value, return DEFAULT (which defaults to nil). | 1093 If there is no corresponding value, return DEFAULT (which defaults to nil). |