*/
u_int row;
+ /**
+ * current pair
+ */
+ pair_t *pair;
+
/**
* enumerator for the current row
*/
return value;
}
+METHOD(hashtable_t, remove_at, void,
+ private_hashtable_t *this, private_enumerator_t *enumerator)
+{
+ if (enumerator->table == this && enumerator->current)
+ {
+ linked_list_t *list;
+ list = this->table[enumerator->row];
+ if (list)
+ {
+ list->remove_at(list, enumerator->current);
+ free(enumerator->pair);
+ this->count--;
+ }
+ }
+}
+
METHOD(hashtable_t, get_count, u_int,
private_hashtable_t *this)
{
{
if (this->current)
{
- pair_t *pair;
-
- if (this->current->enumerate(this->current, &pair))
+ if (this->current->enumerate(this->current, &this->pair))
{
if (key)
{
- *key = pair->key;
+ *key = this->pair->key;
}
if (value)
{
- *value = pair->value;
+ *value = this->pair->value;
}
return TRUE;
}
else
{
linked_list_t *list;
-
list = this->table->table[this->row];
if (list)
{
.put = _put,
.get = _get,
.remove = _remove_,
+ .remove_at = (void*)_remove_at,
.get_count = _get_count,
.create_enumerator = _create_enumerator,
.destroy = _destroy,
/*
- * Copyright (C) 2008 Tobias Brunner
+ * Copyright (C) 2008-2010 Tobias Brunner
* Hochschule fuer Technik Rapperswil
*
* This program is free software; you can redistribute it and/or modify it
*/
void *(*remove) (hashtable_t *this, void *key);
+ /**
+ * Removes the key and value pair from the hash table at which the given
+ * enumerator currently points.
+ *
+ * @param enumerator enumerator, from create_enumerator
+ */
+ void (*remove_at) (hashtable_t *this, enumerator_t *enumerator);
+
/**
* Gets the number of items in the hash table.
*
- * @return number of items
+ * @return number of items
*/
u_int (*get_count) (hashtable_t *this);
* @param hash hash function
* @param equals equals function
* @param capacity initial capacity
- * @return hashtable_t object.
+ * @return hashtable_t object.
*/
hashtable_t *hashtable_create(hashtable_hash_t hash, hashtable_equals_t equals,
u_int capacity);