summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenny Baumann <BenBE@geshi.org>2020-11-29 14:54:10 +0100
committerBenny Baumann <BenBE@geshi.org>2020-11-29 14:54:10 +0100
commitc1563337ae366ca66f25ed71a2f462a486df1337 (patch)
tree4be2eec57dc37a77910fb2be31e8b07cb6a819ec
parent9549ca8c8802f1242614dd1f897a05a66570acf4 (diff)
Implement Hashtable_clear to empty an existing Hashtable
-rw-r--r--Hashtable.c16
-rw-r--r--Hashtable.h2
2 files changed, 14 insertions, 4 deletions
diff --git a/Hashtable.c b/Hashtable.c
index c03723a1..cd48fc46 100644
--- a/Hashtable.c
+++ b/Hashtable.c
@@ -98,21 +98,29 @@ Hashtable* Hashtable_new(unsigned int size, bool owner) {
this->size = size ? nextPrime(size) : 13;
this->buckets = (HashtableItem*) xCalloc(this->size, sizeof(HashtableItem));
this->owner = owner;
+
assert(Hashtable_isConsistent(this));
return this;
}
void Hashtable_delete(Hashtable* this) {
+ Hashtable_clear(this);
+
+ free(this->buckets);
+ free(this);
+}
+void Hashtable_clear(Hashtable* this) {
assert(Hashtable_isConsistent(this));
- if (this->owner) {
+ if (this->owner)
for (unsigned int i = 0; i < this->size; i++)
free(this->buckets[i].value);
- }
- free(this->buckets);
- free(this);
+ memset(this->buckets, 0, this->size * sizeof(HashtableItem));
+ this->items = 0;
+
+ assert(Hashtable_isConsistent(this));
}
static void insert(Hashtable* this, hkey_t key, void* value) {
diff --git a/Hashtable.h b/Hashtable.h
index f7d1aae2..6d934784 100644
--- a/Hashtable.h
+++ b/Hashtable.h
@@ -37,6 +37,8 @@ Hashtable* Hashtable_new(unsigned int size, bool owner);
void Hashtable_delete(Hashtable* this);
+void Hashtable_clear(Hashtable* this);
+
void Hashtable_setSize(Hashtable* this, unsigned int size);
void Hashtable_put(Hashtable* this, hkey_t key, void* value);

© 2014-2024 Faster IT GmbH | imprint | privacy policy