Lines Matching refs:list

4 void string_list_init_nodup(struct string_list *list)  in string_list_init_nodup()  argument
7 memcpy(list, &blank, sizeof(*list)); in string_list_init_nodup()
10 void string_list_init_dup(struct string_list *list) in string_list_init_dup() argument
13 memcpy(list, &blank, sizeof(*list)); in string_list_init_dup()
18 static int get_entry_index(const struct string_list *list, const char *string, in get_entry_index() argument
21 int left = -1, right = list->nr; in get_entry_index()
22 compare_strings_fn cmp = list->cmp ? list->cmp : strcmp; in get_entry_index()
26 int compare = cmp(string, list->items[middle].string); in get_entry_index()
42 static int add_entry(int insert_at, struct string_list *list, const char *string) in add_entry() argument
45 int index = insert_at != -1 ? insert_at : get_entry_index(list, string, &exact_match); in add_entry()
50 ALLOC_GROW(list->items, list->nr+1, list->alloc); in add_entry()
51 if (index < list->nr) in add_entry()
52 MOVE_ARRAY(list->items + index + 1, list->items + index, in add_entry()
53 list->nr - index); in add_entry()
54 list->items[index].string = list->strdup_strings ? in add_entry()
56 list->items[index].util = NULL; in add_entry()
57 list->nr++; in add_entry()
62 struct string_list_item *string_list_insert(struct string_list *list, const char *string) in string_list_insert() argument
64 int index = add_entry(-1, list, string); in string_list_insert()
69 return list->items + index; in string_list_insert()
72 void string_list_remove(struct string_list *list, const char *string, in string_list_remove() argument
76 int i = get_entry_index(list, string, &exact_match); in string_list_remove()
79 if (list->strdup_strings) in string_list_remove()
80 free(list->items[i].string); in string_list_remove()
82 free(list->items[i].util); in string_list_remove()
84 list->nr--; in string_list_remove()
85 MOVE_ARRAY(list->items + i, list->items + i + 1, list->nr - i); in string_list_remove()
89 int string_list_has_string(const struct string_list *list, const char *string) in string_list_has_string() argument
92 get_entry_index(list, string, &exact_match); in string_list_has_string()
96 int string_list_find_insert_index(const struct string_list *list, const char *string, in string_list_find_insert_index() argument
100 int index = get_entry_index(list, string, &exact_match); in string_list_find_insert_index()
106 struct string_list_item *string_list_lookup(struct string_list *list, const char *string) in string_list_lookup() argument
108 int exact_match, i = get_entry_index(list, string, &exact_match); in string_list_lookup()
111 return list->items + i; in string_list_lookup()
114 void string_list_remove_duplicates(struct string_list *list, int free_util) in string_list_remove_duplicates() argument
116 if (list->nr > 1) { in string_list_remove_duplicates()
118 compare_strings_fn cmp = list->cmp ? list->cmp : strcmp; in string_list_remove_duplicates()
119 for (src = dst = 1; src < list->nr; src++) { in string_list_remove_duplicates()
120 if (!cmp(list->items[dst - 1].string, list->items[src].string)) { in string_list_remove_duplicates()
121 if (list->strdup_strings) in string_list_remove_duplicates()
122 free(list->items[src].string); in string_list_remove_duplicates()
124 free(list->items[src].util); in string_list_remove_duplicates()
126 list->items[dst++] = list->items[src]; in string_list_remove_duplicates()
128 list->nr = dst; in string_list_remove_duplicates()
132 int for_each_string_list(struct string_list *list, in for_each_string_list() argument
136 for (i = 0; i < list->nr; i++) in for_each_string_list()
137 if ((ret = fn(&list->items[i], cb_data))) in for_each_string_list()
142 void filter_string_list(struct string_list *list, int free_util, in filter_string_list() argument
146 for (src = 0; src < list->nr; src++) { in filter_string_list()
147 if (want(&list->items[src], cb_data)) { in filter_string_list()
148 list->items[dst++] = list->items[src]; in filter_string_list()
150 if (list->strdup_strings) in filter_string_list()
151 free(list->items[src].string); in filter_string_list()
153 free(list->items[src].util); in filter_string_list()
156 list->nr = dst; in filter_string_list()
164 void string_list_remove_empty_items(struct string_list *list, int free_util) in string_list_remove_empty_items() argument
166 filter_string_list(list, free_util, item_is_not_empty, NULL); in string_list_remove_empty_items()
169 void string_list_clear(struct string_list *list, int free_util) in string_list_clear() argument
171 if (list->items) { in string_list_clear()
173 if (list->strdup_strings) { in string_list_clear()
174 for (i = 0; i < list->nr; i++) in string_list_clear()
175 free(list->items[i].string); in string_list_clear()
178 for (i = 0; i < list->nr; i++) in string_list_clear()
179 free(list->items[i].util); in string_list_clear()
181 free(list->items); in string_list_clear()
183 list->items = NULL; in string_list_clear()
184 list->nr = list->alloc = 0; in string_list_clear()
187 void string_list_clear_func(struct string_list *list, string_list_clear_func_t clearfunc) in string_list_clear_func() argument
189 if (list->items) { in string_list_clear_func()
192 for (i = 0; i < list->nr; i++) in string_list_clear_func()
193 clearfunc(list->items[i].util, list->items[i].string); in string_list_clear_func()
195 if (list->strdup_strings) { in string_list_clear_func()
196 for (i = 0; i < list->nr; i++) in string_list_clear_func()
197 free(list->items[i].string); in string_list_clear_func()
199 free(list->items); in string_list_clear_func()
201 list->items = NULL; in string_list_clear_func()
202 list->nr = list->alloc = 0; in string_list_clear_func()
205 struct string_list_item *string_list_append_nodup(struct string_list *list, in string_list_append_nodup() argument
209 ALLOC_GROW(list->items, list->nr + 1, list->alloc); in string_list_append_nodup()
210 retval = &list->items[list->nr++]; in string_list_append_nodup()
216 struct string_list_item *string_list_append(struct string_list *list, in string_list_append() argument
220 list, in string_list_append()
221 list->strdup_strings ? xstrdup(string) : (char *)string); in string_list_append()
241 void string_list_sort(struct string_list *list) in string_list_sort() argument
243 struct string_list_sort_ctx sort_ctx = {list->cmp ? list->cmp : strcmp}; in string_list_sort()
245 QSORT_S(list->items, list->nr, cmp_items, &sort_ctx); in string_list_sort()
248 struct string_list_item *unsorted_string_list_lookup(struct string_list *list, in unsorted_string_list_lookup() argument
252 compare_strings_fn cmp = list->cmp ? list->cmp : strcmp; in unsorted_string_list_lookup()
254 for_each_string_list_item(item, list) in unsorted_string_list_lookup()
260 int unsorted_string_list_has_string(struct string_list *list, in unsorted_string_list_has_string() argument
263 return unsorted_string_list_lookup(list, string) != NULL; in unsorted_string_list_has_string()
266 void unsorted_string_list_delete_item(struct string_list *list, int i, int free_util) in unsorted_string_list_delete_item() argument
268 if (list->strdup_strings) in unsorted_string_list_delete_item()
269 free(list->items[i].string); in unsorted_string_list_delete_item()
271 free(list->items[i].util); in unsorted_string_list_delete_item()
272 list->items[i] = list->items[list->nr-1]; in unsorted_string_list_delete_item()
273 list->nr--; in unsorted_string_list_delete_item()
276 int string_list_split(struct string_list *list, const char *string, in string_list_split() argument
282 if (!list->strdup_strings) in string_list_split()
288 string_list_append(list, p); in string_list_split()
293 string_list_append_nodup(list, xmemdupz(p, end - p)); in string_list_split()
296 string_list_append(list, p); in string_list_split()
302 int string_list_split_in_place(struct string_list *list, char *string, in string_list_split_in_place() argument
308 if (list->strdup_strings) in string_list_split_in_place()
314 string_list_append(list, p); in string_list_split_in_place()
320 string_list_append(list, p); in string_list_split_in_place()
323 string_list_append(list, p); in string_list_split_in_place()