diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2023-08-31 10:16:35 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2023-08-31 10:16:35 -0400 |
commit | 345047be5b8766a9763d4a717ff034e4e4083ade (patch) | |
tree | d1865a39269919087ace15184643907a56d62090 | |
parent | 5f736eada55f84c7499103faf7c181b80eb7092f (diff) | |
download | bfs-345047be5b8766a9763d4a717ff034e4e4083ade.tar.xz |
trie: New trie_clear() function
-rw-r--r-- | src/color.c | 3 | ||||
-rw-r--r-- | src/trie.c | 8 | ||||
-rw-r--r-- | src/trie.h | 5 |
3 files changed, 14 insertions, 2 deletions
diff --git a/src/color.c b/src/color.c index f7a5d86..b9a788b 100644 --- a/src/color.c +++ b/src/color.c @@ -326,8 +326,7 @@ fail: /** Rebuild the case-insensitive trie after all extensions have been parsed. */ static int build_iext_trie(struct colors *colors) { - trie_destroy(&colors->iext_trie); - trie_init(&colors->iext_trie); + trie_clear(&colors->iext_trie); TRIE_FOR_EACH(&colors->ext_trie, leaf) { size_t len = leaf->length - 1; @@ -715,6 +715,14 @@ void trie_remove(struct trie *trie, struct trie_leaf *leaf) { trie_remove_impl(trie, leaf); } +void trie_clear(struct trie *trie) { + trie->root = 0; + LIST_INIT(trie); + + varena_clear(&trie->leaves); + varena_clear(&trie->nodes); +} + void trie_destroy(struct trie *trie) { varena_destroy(&trie->leaves); varena_destroy(&trie->nodes); @@ -129,6 +129,11 @@ struct trie_leaf *trie_insert_mem(struct trie *trie, const void *key, size_t len void trie_remove(struct trie *trie, struct trie_leaf *leaf); /** + * Remove all leaves from a trie. + */ +void trie_clear(struct trie *trie); + +/** * Destroy a trie and its contents. */ void trie_destroy(struct trie *trie); |