diff --git a/include/ChangeLog b/include/ChangeLog index 7dd93fb685e..f17e65d42a3 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,8 @@ +2000-04-24 Mark Mitchell + + * hashtab.h (hash_pointer): Declare. + (eq_pointer): Likewise. + 2000-04-23 Mark Mitchell * sort.h: New file. diff --git a/include/hashtab.h b/include/hashtab.h index a516c45f52d..12f830ca5ec 100644 --- a/include/hashtab.h +++ b/include/hashtab.h @@ -129,6 +129,12 @@ extern size_t htab_size PARAMS ((htab_t)); extern size_t htab_elements PARAMS ((htab_t)); extern double htab_collisions PARAMS ((htab_t)); +/* A hash function for pointers. */ +extern htab_hash htab_hash_pointer; + +/* An equality function for pointers. */ +extern htab_eq htab_eq_pointer; + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index cfc03e33f9c..25215d3ba9d 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,10 @@ +2000-04-24 Mark Mitchell + + * hashtab.c (hash_pointer): New function. + (eq_pointer): Likewise. + (htab_hash_pointer): New variable. + (htab_eq_pointer): Likewise. + 2000-04-23 Mark Mitchell * sort.c (sort_pointers): Fix endianness bugs. diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c index 2d1c09d9522..9cde1770349 100644 --- a/libiberty/hashtab.c +++ b/libiberty/hashtab.c @@ -56,6 +56,14 @@ Boston, MA 02111-1307, USA. */ #define DELETED_ENTRY ((void *) 1) static unsigned long higher_prime_number PARAMS ((unsigned long)); +static hashval_t hash_pointer PARAMS ((const void *)); +static int eq_pointer PARAMS ((const void *, const void *)); + +/* At some point, we could make these be NULL, and modify the + hash-table routines to handle NULL specially; that would avoid + function-call overhead for the common case of hashing pointers. */ +htab_hash htab_hash_pointer = hash_pointer; +htab_eq htab_eq_pointer = eq_pointer; /* The following function returns the nearest prime number which is greater than a given source number, N. */ @@ -88,6 +96,25 @@ higher_prime_number (n) return n; } +/* Returns a hash code for P. */ + +hashval_t +hash_pointer (p) + const void *p; +{ + return (hashval_t) p; +} + +/* Returns non-zero if P1 and P2 are equal. */ + +int +eq_pointer (p1, p2) + const void *p1; + const void *p2; +{ + return p1 == p2; +} + /* This function creates table with length slightly longer than given source length. Created hash table is initiated as empty (all the hash table entries are EMPTY_ENTRY). The function returns the