From c78566c2410d7499fb39442a0b93e5d620c335f1 Mon Sep 17 00:00:00 2001 From: Al Date: Sun, 24 Dec 2017 01:46:20 -0500 Subject: [PATCH] [utils] adding cstring_array_extend and string_tree_clear --- src/string_utils.c | 18 ++++++++++++++++++ src/string_utils.h | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/src/string_utils.c b/src/string_utils.c index 7045dd25..45cc1373 100644 --- a/src/string_utils.c +++ b/src/string_utils.c @@ -1110,6 +1110,18 @@ cstring_array *cstring_array_from_strings(char **strings, size_t n) { return array; } +bool cstring_array_extend(cstring_array *array, cstring_array *other) { + if (array == NULL || other == NULL) return false; + size_t n = cstring_array_num_strings(other); + + for (size_t i = 0; i < n; i++) { + char *s_i = cstring_array_get_string(other, i); + cstring_array_add_string(array, s_i); + } + return true; +} + + inline size_t cstring_array_capacity(cstring_array *self) { return self->str->m; } @@ -1318,6 +1330,12 @@ inline void string_tree_finalize_token(string_tree_t *self) { uint32_array_push(self->token_indices, (uint32_t)cstring_array_num_strings(self->strings)); } +void string_tree_clear(string_tree_t *self) { + uint32_array_clear(self->token_indices); + uint32_array_push(self->token_indices, 0); + cstring_array_clear(self->strings); +} + // terminated inline void string_tree_add_string(string_tree_t *self, char *str) { cstring_array_add_string(self->strings, str); diff --git a/src/string_utils.h b/src/string_utils.h index 873a670a..1ddcc626 100644 --- a/src/string_utils.h +++ b/src/string_utils.h @@ -208,6 +208,8 @@ void cstring_array_clear(cstring_array *self); cstring_array *cstring_array_from_char_array(char_array *str); cstring_array *cstring_array_from_strings(char **strings, size_t n); +bool cstring_array_extend(cstring_array *array, cstring_array *other); + // Convert cstring_array to an array of n C strings and destroy the cstring_array char **cstring_array_to_strings(cstring_array *self); @@ -285,6 +287,8 @@ void string_tree_add_string_len(string_tree_t *self, char *str, size_t len); void string_tree_append_string(string_tree_t *self, char *str); void string_tree_append_string_len(string_tree_t *self, char *str, size_t len); +void string_tree_clear(string_tree_t *self); + uint32_t string_tree_num_tokens(string_tree_t *self); uint32_t string_tree_num_strings(string_tree_t *self);