diff options
author | Benny Baumann <BenBE@geshi.org> | 2020-11-29 14:54:10 +0100 |
---|---|---|
committer | Benny Baumann <BenBE@geshi.org> | 2020-11-29 14:54:10 +0100 |
commit | c1563337ae366ca66f25ed71a2f462a486df1337 (patch) | |
tree | 4be2eec57dc37a77910fb2be31e8b07cb6a819ec /Hashtable.c | |
parent | 9549ca8c8802f1242614dd1f897a05a66570acf4 (diff) |
Implement Hashtable_clear to empty an existing Hashtable
Diffstat (limited to 'Hashtable.c')
-rw-r--r-- | Hashtable.c | 16 |
1 files changed, 12 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) { |