X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fhash.h;h=bd75f94c6f9a07efeea0a877a9dff101b7000505;hb=4f36450f6392e1b6825b6e04a16badc00f7a51f5;hp=5a3838c5aceea0f48be411ccb40a97000c8962cc;hpb=6c09462d2afe5b745dcda7bbc245cfda9ab05e05;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/hash.h b/gcc/hash.h index 5a3838c5ace..bd75f94c6f9 100644 --- a/gcc/hash.h +++ b/gcc/hash.h @@ -1,5 +1,5 @@ /* Header file for generic hash table support. - Copyright (C) 1993, 94 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 1997, 1998, 2001 Free Software Foundation, Inc. Written by Steve Chamberlain This file was lifted from BFD, the Binary File Descriptor library. @@ -16,37 +16,16 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#ifdef IN_GCC - -/* Add prototype support. */ -#ifndef PROTO -#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__) -#define PROTO(ARGS) ARGS -#else -#define PROTO(ARGS) () -#endif -#endif - -#define PARAMS(ARGS) PROTO(ARGS) - -#ifdef __STDC__ -#define PTR void * -#else -#ifndef const -#define const -#endif -#define PTR char * -#endif - -#else /* ! IN_GCC */ +Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#ifndef IN_GCC #include -#endif /* IN_GCC */ +#endif /* ! IN_GCC */ #include "obstack.h" -typedef enum {false, true} boolean; +typedef PTR hash_table_key; /* Hash table routines. There is no way to free up a hash table. */ @@ -57,8 +36,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; @@ -81,41 +60,49 @@ 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. */ + bool (*comp) PARAMS ((hash_table_key, hash_table_key)); /* An obstack for this hash table. */ struct obstack memory; }; /* Initialize a hash table. */ -extern boolean hash_table_init +extern void 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), + bool (*comp) (hash_table_key, hash_table_key))); /* Initialize a hash table specifying a size. */ -extern boolean hash_table_init_n +extern void 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), + bool (*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, int 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 *, @@ -125,6 +112,18 @@ extern PTR hash_allocate PARAMS ((struct hash_table *, element. If the function returns false, the traversal stops. The INFO argument is passed to the function. */ extern void hash_traverse PARAMS ((struct hash_table *, - boolean (*) (struct hash_entry *, - PTR), - PTR info)); + bool (*) (struct hash_entry *, + 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 bool 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)); +