comparison src/lrecord.h @ 5191:71ee43b8a74d

Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API tests/ChangeLog addition: 2010-04-05 Aidan Kehoe <kehoea@parhasard.net> * automated/hash-table-tests.el: Test the new built-in #'equalp hash table test. Test #'define-hash-table-test. * automated/lisp-tests.el: When asserting that two objects are #'equalp, also assert that their #'equalp-hash is identical. man/ChangeLog addition: 2010-04-03 Aidan Kehoe <kehoea@parhasard.net> * lispref/hash-tables.texi (Introduction to Hash Tables): Document that we now support #'equalp as a hash table test by default, and mention #'define-hash-table-test. (Working With Hash Tables): Document #'define-hash-table-test. src/ChangeLog addition: 2010-04-05 Aidan Kehoe <kehoea@parhasard.net> * elhash.h: * elhash.c (struct Hash_Table_Test, lisp_object_eql_equal) (lisp_object_eql_hash, lisp_object_equal_equal) (lisp_object_equal_hash, lisp_object_equalp_hash) (lisp_object_equalp_equal, lisp_object_general_hash) (lisp_object_general_equal, Feq_hash, Feql_hash, Fequal_hash) (Fequalp_hash, define_hash_table_test, Fdefine_hash_table_test) (init_elhash_once_early, mark_hash_table_tests, string_equalp_hash): * glyphs.c (vars_of_glyphs): Add a new hash table test in C, #'equalp. Make it possible to specify new hash table tests with functions define_hash_table_test, #'define-hash-table-test. Use define_hash_table_test() in glyphs.c. Expose the hash functions (besides that used for #'equal) to Lisp, for people writing functions to be used with #'define-hash-table-test. Call define_hash_table_test() very early in temacs, to create the built-in hash table tests. * ui-gtk.c (emacs_gtk_boxed_hash): * specifier.h (struct specifier_methods): * specifier.c (specifier_hash): * rangetab.c (range_table_entry_hash, range_table_hash): * number.c (bignum_hash, ratio_hash, bigfloat_hash): * marker.c (marker_hash): * lrecord.h (struct lrecord_implementation): * keymap.c (keymap_hash): * gui.c (gui_item_id_hash, gui_item_hash): * glyphs.c (image_instance_hash, glyph_hash): * glyphs-x.c (x_image_instance_hash): * glyphs-msw.c (mswindows_image_instance_hash): * glyphs-gtk.c (gtk_image_instance_hash): * frame-msw.c (mswindows_set_title_from_ibyte): * fontcolor.c (color_instance_hash, font_instance_hash): * fontcolor-x.c (x_color_instance_hash): * fontcolor-tty.c (tty_color_instance_hash): * fontcolor-msw.c (mswindows_color_instance_hash): * fontcolor-gtk.c (gtk_color_instance_hash): * fns.c (bit_vector_hash): * floatfns.c (float_hash): * faces.c (face_hash): * extents.c (extent_hash): * events.c (event_hash): * data.c (weak_list_hash, weak_box_hash): * chartab.c (char_table_entry_hash, char_table_hash): * bytecode.c (compiled_function_hash): * alloc.c (vector_hash): Change the various object hash methods to take a new EQUALP parameter, hashing appropriately for #'equalp if it is true.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 05 Apr 2010 13:03:35 +0100
parents 4cd28c29a7a1
children b5611afbcc76
comparison
equal deleted inserted replaced
5190:1c1d8843de5e 5191:71ee43b8a74d
332 #endif /* not NEW_GC */ 332 #endif /* not NEW_GC */
333 lrecord_type_compiled_function, 333 lrecord_type_compiled_function,
334 lrecord_type_weak_list, 334 lrecord_type_weak_list,
335 lrecord_type_bit_vector, 335 lrecord_type_bit_vector,
336 lrecord_type_float, 336 lrecord_type_float,
337 lrecord_type_hash_table_test,
337 lrecord_type_hash_table, 338 lrecord_type_hash_table,
338 lrecord_type_lstream, 339 lrecord_type_lstream,
339 lrecord_type_process, 340 lrecord_type_process,
340 lrecord_type_charset, 341 lrecord_type_charset,
341 lrecord_type_coding_system, 342 lrecord_type_coding_system,
487 the Lisp_Object itself as the hash. But, you must still satisfy 488 the Lisp_Object itself as the hash. But, you must still satisfy
488 the constraint that if two objects are `equal', then they *must* 489 the constraint that if two objects are `equal', then they *must*
489 hash to the same value in order for hash tables to work properly. 490 hash to the same value in order for hash tables to work properly.
490 This means that `hash' can be NULL only if the `equal' method is 491 This means that `hash' can be NULL only if the `equal' method is
491 also NULL. */ 492 also NULL. */
492 Hashcode (*hash) (Lisp_Object, int); 493 Hashcode (*hash) (Lisp_Object, int, Boolint);
493 494
494 /* Data layout description for your object. See long comment below. */ 495 /* Data layout description for your object. See long comment below. */
495 const struct memory_description *description; 496 const struct memory_description *description;
496 497
497 /* Only one of `static_size' and `size_in_bytes_method' is non-0. If 498 /* Only one of `static_size' and `size_in_bytes_method' is non-0. If