hashtable enumerator enumerates over both, key and values

This commit is contained in:
Martin Willi
2008-12-05 10:01:52 +00:00
parent a6d7a6107c
commit 19e0010f51
3 changed files with 9 additions and 6 deletions
@@ -1751,7 +1751,7 @@ static void destroy(private_kernel_netlink_ipsec_t *this)
close(this->socket_xfrm_events); close(this->socket_xfrm_events);
this->socket_xfrm->destroy(this->socket_xfrm); this->socket_xfrm->destroy(this->socket_xfrm);
enumerator = this->policies->create_enumerator(this->policies); enumerator = this->policies->create_enumerator(this->policies);
while (enumerator->enumerate(enumerator, (void**)&policy)) while (enumerator->enumerate(enumerator, &policy, &policy))
{ {
free(policy); free(policy);
} }
+6 -3
View File
@@ -322,16 +322,18 @@ static u_int get_count(private_hashtable_t *this)
/** /**
* Implementation of private_enumerator_t.enumerator.enumerate. * Implementation of private_enumerator_t.enumerator.enumerate.
*/ */
static bool enumerate(private_enumerator_t *this, void **item) static bool enumerate(private_enumerator_t *this, void **key, void **value)
{ {
while (this->row < this->table->capacity) while (this->row < this->table->capacity)
{ {
if (this->current) if (this->current)
{ {
pair_t *pair; pair_t *pair;
if (this->current->enumerate(this->current, (void**)&pair))
if (this->current->enumerate(this->current, &pair))
{ {
*item = pair->value; *key = pair->key;
*value = pair->value;
return TRUE; return TRUE;
} }
this->current->destroy(this->current); this->current->destroy(this->current);
@@ -340,6 +342,7 @@ static bool enumerate(private_enumerator_t *this, void **item)
else else
{ {
linked_list_t *list; linked_list_t *list;
if ((list = this->table->table[this->row]) != NULL) if ((list = this->table->table[this->row]) != NULL)
{ {
this->current = list->create_enumerator(list); this->current = list->create_enumerator(list);
+2 -2
View File
@@ -52,9 +52,9 @@ typedef bool (*hashtable_equals_t)(void *key, void *other_key);
struct hashtable_t { struct hashtable_t {
/** /**
* Create an enumerator over the hash table. * Create an enumerator over the hash table key/value pairs.
* *
* @return enumerator over hash table entries * @return enumerator over (void *key, void *value)
*/ */
enumerator_t *(*create_enumerator) (hashtable_t *this); enumerator_t *(*create_enumerator) (hashtable_t *this);