summaryrefslogtreecommitdiff
path: root/src/ht.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ht.c')
-rw-r--r--src/ht.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/ht.c b/src/ht.c
index 7965941..45953f4 100644
--- a/src/ht.c
+++ b/src/ht.c
@@ -323,6 +323,36 @@ ht_delete(ht * const restrict htp, void *key, HT_DELETE_FLAG flag)
return 0;
}
+void
+ht_reset(ht * const restrict htp, HT_DELETE_FLAG flag)
+{
+ for (int i = 0; i < htp->size; i++) {
+ switch (flag) {
+ case DELETE_KEY:
+ case DELETE_EVERY:
+ free(*(htp->keys+i));
+ break;
+ default:
+ break;
+ }
+
+ switch (flag) {
+ case DELETE_VALUE:
+ case DELETE_EVERY:
+ free(*(htp->values+i));
+ break;
+ default:
+ break;
+ }
+ }
+
+ htp->size = 0;
+
+ memset(htp->values, 0, sizeof(void*) * htp->capability);
+ memset(htp->keys, 0, sizeof(void*) * htp->capability);
+ memset(htp->indices, 0xff, sizeof (NUM) * htp->capability);
+}
+
P_ATTR
void *
ht_find(CCR_MOD(ht *) htp, void *key)