summaryrefslogtreecommitdiff
path: root/gcc/hash.h
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>1998-11-17 11:50:24 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>1998-11-17 11:50:24 +0000
commiteb53fcd6f218f534dd91c92799c31eabff634005 (patch)
treeef9a03446edddcfd9973bbd42794b02e7d002f1c /gcc/hash.h
parent71a522b568670ebbbef626a634a0109d98e788a5 (diff)
downloadgcc-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.h52
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));
+