X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Felhash.h;h=7c4fe9c04f970dd3d562fe5dc5bfdfa394133aa1;hb=506a27d9690049e121fccf1a8947ec57e62055aa;hp=982a729b012bbd788dd0997f2bfb86a2ab8f1cdb;hpb=77dcef404dc78635f6ffa8f71a803d2bc7cc8921;p=chise%2Fxemacs-chise.git.1 diff --git a/src/elhash.h b/src/elhash.h index 982a729..7c4fe9c 100644 --- a/src/elhash.h +++ b/src/elhash.h @@ -20,25 +20,28 @@ Boston, MA 02111-1307, USA. */ /* Synched up with: Not in FSF. */ -#ifndef _XEMACS_ELHASH_H_ -#define _XEMACS_ELHASH_H_ +#ifndef INCLUDED_elhash_h_ +#define INCLUDED_elhash_h_ -DECLARE_LRECORD (hash_table, struct Lisp_Hash_Table); +typedef struct Lisp_Hash_Table Lisp_Hash_Table; -#define XHASH_TABLE(x) XRECORD (x, hash_table, struct Lisp_Hash_Table) +DECLARE_LRECORD (hash_table, Lisp_Hash_Table); + +#define XHASH_TABLE(x) XRECORD (x, hash_table, Lisp_Hash_Table) #define XSETHASH_TABLE(x, p) XSETRECORD (x, p, hash_table) #define HASH_TABLEP(x) RECORDP (x, hash_table) -#define GC_HASH_TABLEP(x) GC_RECORDP (x, hash_table) #define CHECK_HASH_TABLE(x) CHECK_RECORD (x, hash_table) #define CONCHECK_HASH_TABLE(x) CONCHECK_RECORD (x, hash_table) -enum hash_table_type +enum hash_table_weakness { HASH_TABLE_NON_WEAK, HASH_TABLE_KEY_WEAK, HASH_TABLE_VALUE_WEAK, + HASH_TABLE_KEY_VALUE_WEAK, HASH_TABLE_KEY_CAR_WEAK, HASH_TABLE_VALUE_CAR_WEAK, + HASH_TABLE_KEY_CAR_VALUE_WEAK, HASH_TABLE_WEAK }; @@ -49,6 +52,8 @@ enum hash_table_test HASH_TABLE_EQUAL }; +extern const struct lrecord_description hash_table_description[]; + EXFUN (Fcopy_hash_table, 1); EXFUN (Fhash_table_count, 1); EXFUN (Fgethash, 3); @@ -62,15 +67,21 @@ typedef unsigned long (*hash_table_hash_function_t) (Lisp_Object obj); typedef int (*maphash_function_t) (Lisp_Object key, Lisp_Object value, void* extra_arg); +Lisp_Object make_standard_lisp_hash_table (enum hash_table_test test, + size_t size, + double rehash_size, + double rehash_threshold, + enum hash_table_weakness weakness); -Lisp_Object make_general_lisp_hash_table (size_t size, - enum hash_table_type type, - enum hash_table_test test, +Lisp_Object make_general_lisp_hash_table (hash_table_hash_function_t hash_function, + hash_table_test_function_t test_function, + size_t size, + double rehash_size, double rehash_threshold, - double rehash_size); + enum hash_table_weakness weakness); Lisp_Object make_lisp_hash_table (size_t size, - enum hash_table_type type, + enum hash_table_weakness weakness, enum hash_table_test test); void elisp_maphash (maphash_function_t function, @@ -79,8 +90,9 @@ void elisp_maphash (maphash_function_t function, void elisp_map_remhash (maphash_function_t predicate, Lisp_Object hash_table, void *extra_arg); -int finish_marking_weak_hash_tables (int (*obj_marked_p) (Lisp_Object), - void (*markobj) (Lisp_Object)); -void prune_weak_hash_tables (int (*obj_marked_p) (Lisp_Object)); +int finish_marking_weak_hash_tables (void); +void prune_weak_hash_tables (void); + +void pdump_reorganize_hash_table (Lisp_Object); -#endif /* _XEMACS_ELHASH_H_ */ +#endif /* INCLUDED_elhash_h_ */