diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-11-17 11:50:24 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-11-17 11:50:24 +0000 |
commit | eb53fcd6f218f534dd91c92799c31eabff634005 (patch) | |
tree | ef9a03446edddcfd9973bbd42794b02e7d002f1c /gcc/hash.h | |
parent | 71a522b568670ebbbef626a634a0109d98e788a5 (diff) | |
download | gcc-eb53fcd6f218f534dd91c92799c31eabff634005.tar.gz |
* hash.h (hash_table_key): New type.
(hash_entry): Change `string' field to generic `key'.
(hash_table): Add `comp' and `hash' functions.
(hash_table_init): Take them as input.
(hash_table_init_n): Likewise.
(hash_lookup): Modify for generic keys.
(hash_newfunc): Likewise.
(hash_traverse): Likewise.
(string_hash): New function.
(string_compare): Likewise.
(string_copy): Likewise.
* hash.c (hash_table_init_n): Modify for generic keys.
(hash_table_init): Likewise.
(hash_lookup): Likewise.
(hash_newfunc): Likewise.
(hash_traverse): Likewise.
(string_hash): Split out from hash_lookup.
(string_compare): New function.
(string_copy): Split out from hash_lookup.
* tlink.c (symbol_hash_newfunc): Modify for new interfaces to hash
tables.
(symbol_hash_lookup): Likewise.
(file_hash_newfunc): Likewise.
(file_hash_lookup): Likewise.
(demangled_hash_newfunc): Likewise.
(demangled_hash_lookup): Likewise.
(tlink_int): Likewise.
(read_repo_file): Likewise.
(recompile_files): Likewise.
(demangle_new_symbols): Likewise.
(scan_linker_output): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@23683 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/hash.h')
-rw-r--r-- | gcc/hash.h | 52 |
1 files changed, 37 insertions, 15 deletions
diff --git a/gcc/hash.h b/gcc/hash.h index 5733daadab4..bf64af789df 100644 --- a/gcc/hash.h +++ b/gcc/hash.h @@ -26,6 +26,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ typedef enum {false, true} boolean; +typedef PTR hash_table_key; + /* Hash table routines. There is no way to free up a hash table. */ /* An element in the hash table. Most uses will actually use a larger @@ -35,8 +37,8 @@ struct hash_entry { /* Next entry for this hash code. */ struct hash_entry *next; - /* String being hashed. */ - const char *string; + /* The thing being hashed. */ + hash_table_key key; /* Hash code. This is the full hash code, not the index into the table. */ unsigned long hash; @@ -59,7 +61,11 @@ struct hash_table only if the argument is NULL. */ struct hash_entry *(*newfunc) PARAMS ((struct hash_entry *, struct hash_table *, - const char *)); + hash_table_key)); + /* A function to compute the hash code for a key in the hash table. */ + unsigned long (*hash) PARAMS ((hash_table_key)); + /* A function to compare two keys. */ + boolean (*comp) PARAMS ((hash_table_key, hash_table_key)); /* An obstack for this hash table. */ struct obstack memory; }; @@ -69,31 +75,35 @@ extern boolean hash_table_init PARAMS ((struct hash_table *, struct hash_entry *(*) (struct hash_entry *, struct hash_table *, - const char *))); + hash_table_key), + unsigned long (*hash) (hash_table_key), + boolean (*comp) (hash_table_key, hash_table_key))); /* Initialize a hash table specifying a size. */ extern boolean hash_table_init_n PARAMS ((struct hash_table *, struct hash_entry *(*) (struct hash_entry *, struct hash_table *, - const char *), + hash_table_key), + unsigned long (*hash) (hash_table_key), + boolean (*comp) (hash_table_key, hash_table_key), unsigned int size)); /* Free up a hash table. */ extern void hash_table_free PARAMS ((struct hash_table *)); -/* Look up a string in a hash table. If CREATE is true, a new entry - will be created for this string if one does not already exist. The - COPY argument must be true if this routine should copy the string - into newly allocated memory when adding an entry. */ +/* Look up KEY in a hash table. If CREATE is true, a new entry + will be created for this KEY if one does not already exist. If + COPY is non-NULL, it is used to copy the KEY before storing it in + the hash table. */ extern struct hash_entry *hash_lookup - PARAMS ((struct hash_table *, const char *, boolean create, - boolean copy)); + PARAMS ((struct hash_table *, hash_table_key key, boolean create, + hash_table_key (*copy)(struct obstack*, hash_table_key))); /* Base method for creating a hash table entry. */ extern struct hash_entry *hash_newfunc - PARAMS ((struct hash_entry *, struct hash_table *, - const char *)); + PARAMS ((struct hash_entry *, struct hash_table *, + hash_table_key key)); /* Grab some space for a hash table entry. */ extern PTR hash_allocate PARAMS ((struct hash_table *, @@ -104,5 +114,17 @@ extern PTR hash_allocate PARAMS ((struct hash_table *, INFO argument is passed to the function. */ extern void hash_traverse PARAMS ((struct hash_table *, boolean (*) (struct hash_entry *, - PTR), - PTR info)); + hash_table_key), + hash_table_key info)); + +/* Hash a string K, which is really of type `char*'. */ +extern unsigned long string_hash PARAMS ((hash_table_key k)); + +/* Compare two strings K1, K2 which are really of type `char*'. */ +extern boolean string_compare PARAMS ((hash_table_key k1, + hash_table_key k2)); + +/* Copy a string K, which is really of type `char*'. */ +extern hash_table_key string_copy PARAMS ((struct obstack* memory, + hash_table_key k)); + |