merge from gcc
This commit is contained in:
		| @@ -1,3 +1,30 @@ | ||||
| 2000-03-14  Bernd Schmidt  <bernds@cygnus.co.uk> | ||||
|  | ||||
| 	* hashtab.h (htab_trav): Modify type so that first arg is of type | ||||
| 	void **. | ||||
| 	(htab_find_with_hash, htab_find_slot_with_hash): Declare new | ||||
| 	functions. | ||||
|  | ||||
| 2000-03-09  Alex Samuel  <samuel@codesourcery.com> | ||||
|  | ||||
| 	* partition.h: New file. | ||||
|  | ||||
| 2000-03-09  Zack Weinberg  <zack@wolery.cumb.org> | ||||
|  | ||||
| 	* hashtab.h (struct htab): Add del_f. | ||||
| 	(htab_del): New type. | ||||
| 	(htab_create): Add fourth argument. | ||||
|  | ||||
| 2000-03-08  Zack Weinberg  <zack@wolery.cumb.org> | ||||
|  | ||||
| 	* hashtab.h (hash_table_t): Rename to htab_t. | ||||
| 	(struct hash_table): Rename to struct htab.  Shorten element | ||||
| 	names.  Reorder elements by size. | ||||
| 	(htab_hash, htab_eq, htab_trav): New typedefs for the callback | ||||
| 	function pointers. | ||||
| 	(hash_table_entry_t): Discard; just use void * for element | ||||
| 	type. | ||||
|  | ||||
| 2000-03-01  H.J. Lu  <hjl@gnu.org> | ||||
|  | ||||
| 	* bfdlink.h (bfd_link_callbacks): Add a boolean arg to | ||||
|   | ||||
| @@ -38,69 +38,88 @@ extern "C" { | ||||
|  | ||||
| #include <ansidecl.h> | ||||
|  | ||||
| /* The hash table element is represented by the following type. */ | ||||
| /* Callback function pointer types.  */ | ||||
|  | ||||
| typedef const void *hash_table_entry_t; | ||||
| /* Calculate hash of a table entry.  */ | ||||
| typedef unsigned int (*htab_hash) PARAMS ((const void *)); | ||||
|  | ||||
| /* Compare a table entry with a possible entry.  The entry already in | ||||
|    the table always comes first, so the second element can be of a | ||||
|    different type (but in this case htab_find and htab_find_slot | ||||
|    cannot be used; instead the variants that accept a hash value | ||||
|    must be used).  */ | ||||
| typedef int (*htab_eq) PARAMS ((const void *, const void *)); | ||||
|  | ||||
| /* Cleanup function called whenever a live element is removed from | ||||
|    the hash table.  */ | ||||
| typedef void (*htab_del) PARAMS ((void *)); | ||||
|    | ||||
| /* Function called by htab_traverse for each live element.  The first | ||||
|    arg is the slot of the element (which can be passed to htab_clear_slot | ||||
|    if desired), the second arg is the auxiliary pointer handed to | ||||
|    htab_traverse.  Return 1 to continue scan, 0 to stop.  */ | ||||
| typedef int (*htab_trav) PARAMS ((void **, void *)); | ||||
|  | ||||
| /* Hash tables are of the following type.  The structure | ||||
|    (implementation) of this type is not needed for using the hash | ||||
|    tables.  All work with hash table should be executed only through | ||||
|    functions mentioned below. */ | ||||
|  | ||||
| typedef struct hash_table | ||||
| struct htab | ||||
| { | ||||
|   /* Pointer to hash function.  */ | ||||
|   htab_hash hash_f; | ||||
|  | ||||
|   /* Pointer to comparison function.  */ | ||||
|   htab_eq eq_f; | ||||
|  | ||||
|   /* Pointer to cleanup function.  */ | ||||
|   htab_del del_f; | ||||
|  | ||||
|   /* Table itself.  */ | ||||
|   void **entries; | ||||
|  | ||||
|   /* Current size (in entries) of the hash table */ | ||||
|   size_t size; | ||||
|  | ||||
|   /* Current number of elements including also deleted elements */ | ||||
|   size_t number_of_elements; | ||||
|   size_t n_elements; | ||||
|  | ||||
|   /* Current number of deleted elements in the table */ | ||||
|   size_t number_of_deleted_elements; | ||||
|   size_t n_deleted; | ||||
|  | ||||
|   /* The following member is used for debugging. Its value is number | ||||
|      of all calls of `find_hash_table_entry' for the hash table. */ | ||||
|   int searches; | ||||
|      of all calls of `htab_find_slot' for the hash table. */ | ||||
|   unsigned int searches; | ||||
|  | ||||
|   /* The following member is used for debugging.  Its value is number | ||||
|      of collisions fixed for time of work with the hash table. */ | ||||
|   int collisions; | ||||
|   /* Pointer to function for evaluation of hash value (any unsigned value). | ||||
|      This function has one parameter of type hash_table_entry_t. */ | ||||
|   unsigned (*hash_function) PARAMS ((hash_table_entry_t)); | ||||
|   /* Pointer to function for test on equality of hash table elements (two | ||||
|      parameter of type hash_table_entry_t. */ | ||||
|   int (*eq_function) PARAMS ((hash_table_entry_t, hash_table_entry_t)); | ||||
|   /* Table itself */ | ||||
|   hash_table_entry_t *entries; | ||||
| } *hash_table_t; | ||||
|   unsigned int collisions; | ||||
| }; | ||||
|  | ||||
| typedef struct htab *htab_t; | ||||
|  | ||||
| /* The prototypes of the package functions. */ | ||||
|  | ||||
| extern hash_table_t create_hash_table | ||||
|   PARAMS ((size_t, unsigned (*) (hash_table_entry_t), | ||||
| 	   int (*) (hash_table_entry_t, hash_table_entry_t))); | ||||
| extern htab_t	htab_create	PARAMS ((size_t, htab_hash, | ||||
| 					 htab_eq, htab_del)); | ||||
| extern void	htab_delete	PARAMS ((htab_t)); | ||||
| extern void	htab_empty	PARAMS ((htab_t)); | ||||
|  | ||||
| extern void delete_hash_table PARAMS ((hash_table_t)); | ||||
| extern void    *htab_find	PARAMS ((htab_t, const void *)); | ||||
| extern void   **htab_find_slot	PARAMS ((htab_t, const void *, int)); | ||||
| extern void    *htab_find_with_hash		PARAMS ((htab_t, const void *, | ||||
| 							 unsigned int)); | ||||
| extern void   **htab_find_slot_with_hash	PARAMS ((htab_t, const void *, | ||||
| 							 unsigned int, int)); | ||||
| extern void	htab_clear_slot	PARAMS ((htab_t, void **)); | ||||
| extern void	htab_remove_elt	PARAMS ((htab_t, void *)); | ||||
|  | ||||
| extern void empty_hash_table PARAMS ((hash_table_t)); | ||||
| extern void	htab_traverse	PARAMS ((htab_t, htab_trav, void *)); | ||||
|  | ||||
| extern hash_table_entry_t *find_hash_table_entry | ||||
|   PARAMS ((hash_table_t, hash_table_entry_t, int)); | ||||
|  | ||||
| extern void remove_element_from_hash_table_entry PARAMS ((hash_table_t, | ||||
| 							  hash_table_entry_t)); | ||||
|  | ||||
| extern void clear_hash_table_slot PARAMS ((hash_table_t, hash_table_entry_t *)); | ||||
|  | ||||
| extern void traverse_hash_table PARAMS ((hash_table_t, | ||||
| 					 int (*) (hash_table_entry_t, void *), | ||||
| 					 void *)); | ||||
|      | ||||
| extern size_t hash_table_size PARAMS ((hash_table_t)); | ||||
|  | ||||
| extern size_t hash_table_elements_number PARAMS ((hash_table_t)); | ||||
|  | ||||
| extern int hash_table_collisions PARAMS ((hash_table_t)); | ||||
|  | ||||
| extern int all_hash_table_collisions PARAMS ((void)); | ||||
| extern size_t	htab_size	PARAMS ((htab_t)); | ||||
| extern size_t	htab_elements	PARAMS ((htab_t)); | ||||
| extern double	htab_collisions	PARAMS ((htab_t)); | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user