diff options
-rw-r--r-- | libihash/ihash.c | 19 | ||||
-rw-r--r-- | libihash/ihash.h | 31 |
2 files changed, 15 insertions, 35 deletions
diff --git a/libihash/ihash.c b/libihash/ihash.c index 87d7abf4..8b1ad1f8 100644 --- a/libihash/ihash.c +++ b/libihash/ihash.c @@ -370,13 +370,9 @@ hurd_ihash_find (hurd_ihash_t ht, hurd_ihash_key_t key) } } -/* Find the item in the hash table HT with key KEY. If it is found, - return the location of its slot in the hash table. If it is not - found, this function may still return a location. - - This location pointer can always be safely accessed using - hurd_ihash_locp_value. If the lookup is successful, - hurd_ihash_locp_value will return the value related to KEY. +/* Find and return the item in the hash table HT with key KEY, or NULL + if it doesn't exist. If it is not found, this function may still + return a location in SLOT. If the lookup is successful, the returned location can be used with hurd_ihash_locp_add to update the item, and with @@ -387,8 +383,10 @@ hurd_ihash_find (hurd_ihash_t ht, hurd_ihash_key_t key) Note that returned location is only valid until the next insertion or deletion. */ -hurd_ihash_locp_t -hurd_ihash_locp_find (hurd_ihash_t ht, hurd_ihash_key_t key) +hurd_ihash_value_t +hurd_ihash_locp_find (hurd_ihash_t ht, + hurd_ihash_key_t key, + hurd_ihash_locp_t *slot) { int idx; @@ -396,7 +394,8 @@ hurd_ihash_locp_find (hurd_ihash_t ht, hurd_ihash_key_t key) return NULL; idx = find_index (ht, key); - return &ht->items[idx].value; + *slot = &ht->items[idx].value; + return index_valid (ht, idx, key) ? ht->items[idx].value : NULL; } diff --git a/libihash/ihash.h b/libihash/ihash.h index 1dbc3483..fdfc3673 100644 --- a/libihash/ihash.h +++ b/libihash/ihash.h @@ -218,13 +218,9 @@ error_t hurd_ihash_locp_add (hurd_ihash_t ht, hurd_ihash_locp_t locp, if it doesn't exist. */ hurd_ihash_value_t hurd_ihash_find (hurd_ihash_t ht, hurd_ihash_key_t key); -/* Find the item in the hash table HT with key KEY. If it is found, - return the location of its slot in the hash table. If it is not - found, this function may still return a location. - - This location pointer can always be safely accessed using - hurd_ihash_locp_value. If the lookup is successful, - hurd_ihash_locp_value will return the value related to KEY. +/* Find and return the item in the hash table HT with key KEY, or NULL + if it doesn't exist. If it is not found, this function may still + return a location in SLOT. If the lookup is successful, the returned location can be used with hurd_ihash_locp_add to update the item, and with @@ -235,24 +231,9 @@ hurd_ihash_value_t hurd_ihash_find (hurd_ihash_t ht, hurd_ihash_key_t key); Note that returned location is only valid until the next insertion or deletion. */ -hurd_ihash_locp_t hurd_ihash_locp_find (hurd_ihash_t ht, - hurd_ihash_key_t key); - -/* Given an hash table bucket location LOCP, return the value stored - there, or NULL if it is empty or LOCP is NULL. */ -static inline void * -hurd_ihash_locp_value (hurd_ihash_locp_t locp) -{ - struct _hurd_ihash_item *item = (struct _hurd_ihash_item *) locp; - - if (item == NULL) - return NULL; - - if (hurd_ihash_value_valid (item->value)) - return item->value; - - return NULL; -} +hurd_ihash_value_t hurd_ihash_locp_find (hurd_ihash_t ht, + hurd_ihash_key_t key, + hurd_ihash_locp_t *slot); /* Iterate over all elements in the hash table. You use this macro with a block, for example like this: |