From 19416d0e152bc55cd6cc9a49d678de940e5a1828 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Thu, 31 May 2018 19:29:14 -0700 Subject: [PATCH] Add clear functions to table and trie. --- include/table.h | 5 +++++ include/trie.h | 1 + src/table.c | 3 +++ src/trie.c | 5 +++++ 4 files changed, 14 insertions(+) diff --git a/include/table.h b/include/table.h index 8e36651..1b88fb8 100644 --- a/include/table.h +++ b/include/table.h @@ -134,6 +134,11 @@ libab_result libab_table_put(libab_table* table, const char* string, * @param parent a valid reference to a parent table. */ void libab_table_set_parent(libab_table* table, libab_ref* parent); +/** + * Clears the table. + * @param table the table to clear. + */ +void libab_table_clear(libab_table* table); /** * Frees the resources allocated by the * given table. diff --git a/include/trie.h b/include/trie.h index 78067e0..b245791 100644 --- a/include/trie.h +++ b/include/trie.h @@ -60,6 +60,7 @@ libab_result libab_trie_put(libab_trie* trie, const char* key, void* value); const ll* libab_trie_get(const libab_trie* trie, const char* key); int libab_trie_foreach(const libab_trie* trie, void* data, compare_func compare, foreach_func foreach); +void libab_trie_clear(libab_trie* trie); void libab_trie_free(libab_trie* trie); #endif diff --git a/src/table.c b/src/table.c index 0544970..0556c47 100644 --- a/src/table.c +++ b/src/table.c @@ -110,6 +110,9 @@ void libab_table_set_parent(libab_table* table, libab_ref* parent) { libab_ref_free(&table->parent); libab_ref_copy(parent, &table->parent); } +void libab_table_clear(libab_table* table) { + libab_trie_clear(&table->trie); +} void libab_table_free(libab_table* table) { libab_trie_foreach(&table->trie, NULL, compare_always, _table_foreach_entry_free); diff --git a/src/trie.c b/src/trie.c index e3f4da5..aa33bba 100644 --- a/src/trie.c +++ b/src/trie.c @@ -110,6 +110,11 @@ int libab_trie_foreach(const libab_trie* trie, void* data, compare_func compare, return _libab_trie_foreach(trie->head, data, compare, foreach); } +void libab_trie_clear(libab_trie* trie) { + libab_trie_free(trie); + libab_trie_init(trie); +} + void libab_trie_free(libab_trie* trie) { _libab_trie_free(trie->head); trie->head = NULL;