2005-04-29 H.J. Lu <hongjiu.lu@intel.com>

* hash.c: Undo the last change.
	* hash.h: Likewise.
This commit is contained in:
H.J. Lu 2005-04-29 16:56:12 +00:00
parent cba1200696
commit 7e70f1afa7
3 changed files with 71 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2005-04-29 H.J. Lu <hongjiu.lu@intel.com>
* hash.c: Undo the last change.
* hash.h: Likewise.
2005-04-29 Ben Elliston <bje@au.ibm.com>
* Makefile.am (GAS_CFILES): Remove bignum-copy.c.

View File

@ -294,6 +294,31 @@ hash_jam (struct hash_control *table, const char *key, PTR value)
return NULL;
}
/* Replace an existing entry in a hash table. This returns the old
value stored for the entry. If the entry is not found in the hash
table, this does nothing and returns NULL. */
PTR
hash_replace (struct hash_control *table, const char *key, PTR value)
{
struct hash_entry *p;
PTR ret;
p = hash_lookup (table, key, NULL, NULL);
if (p == NULL)
return NULL;
#ifdef HASH_STATISTICS
++table->replacements;
#endif
ret = p->data;
p->data = value;
return ret;
}
/* Find an entry in a hash table, returning its value. Returns NULL
if the entry is not found. */
@ -309,6 +334,35 @@ hash_find (struct hash_control *table, const char *key)
return p->data;
}
/* Delete an entry from a hash table. This returns the value stored
for that entry, or NULL if there is no such entry. */
PTR
hash_delete (struct hash_control *table, const char *key)
{
struct hash_entry *p;
struct hash_entry **list;
p = hash_lookup (table, key, &list, NULL);
if (p == NULL)
return NULL;
if (p != *list)
abort ();
#ifdef HASH_STATISTICS
++table->deletions;
#endif
*list = p->next;
/* Note that we never reclaim the memory for this entry. If gas
ever starts deleting hash table entries in a big way, this will
have to change. */
return p->data;
}
/* Traverse a hash table. Call the function on every entry in the
hash table. */

View File

@ -51,11 +51,23 @@ extern const char *hash_insert (struct hash_control *,
extern const char *hash_jam (struct hash_control *,
const char *key, PTR value);
/* Replace an existing entry in a hash table. This returns the old
value stored for the entry. If the entry is not found in the hash
table, this does nothing and returns NULL. */
extern PTR hash_replace (struct hash_control *, const char *key,
PTR value);
/* Find an entry in a hash table, returning its value. Returns NULL
if the entry is not found. */
extern PTR hash_find (struct hash_control *, const char *key);
/* Delete an entry from a hash table. This returns the value stored
for that entry, or NULL if there is no such entry. */
extern PTR hash_delete (struct hash_control *, const char *key);
/* Traverse a hash table. Call the function on every entry in the
hash table. */