String List =========== Data structures --------------- * `struct str_list` + -- Structure that holds the list `items`:: Array of strings in the list `nr`:: Number of items in the list -- Functions --------- `str_list_init`:: Initialize the list `str_list_create`:: allocates and initializes a new list. `str_list_destroy`:: deallocates the list. + Returns zero if the list is not empty, non-zero otherwise. `str_list_clear`:: clears the list by calling `free` for every item. `str_list_clear_fn`:: clears the list by calling the callback function 'fn' for every item. + If `NULL` is passed as 'fn' to this function the items are still cleared without any deallocation. `str_list_insert`:: Inserts a new string into the list. The string passed is not copied. + If 'str' exist in the list, a negative value is returned. otherwise the index where 'str' is inserted. `str_list_remove`:: Removes 'str' from the list and returns it. If the string does not exist in the list, `NULL` is returned. `str_list_reduce`:: Removes the last string in the list and returns it. + If the list is empty, `NULL` is returned. `str_list_indexof`:: Returns the index where 'str' is located in the array. + Returns a negative value if 'str' does not exist in the list. `str_list_lookup`:: looks up 'str' in the list and returns it. If 'str' does not exist in the list, `NULL` is returned. `str_list_has`:: Returns non-zero if 'str' exist in the list, zero otherwise. `str_list_foreach`:: Macro to iterate over the list. + Arguments are (in order): 'iterator', 'list'. + ---- struct str_list *list; char **item; str_list_foreach(item, list) { printf("%s\n", *item); } ---- `str_list_size`:: Returns the number of items in the list + NOTE: this function may be implemented as a macro, so don't pass arguments with side-effects `str_list_isempty`:: Returns non zero if the list is empty. zero otherwise. + NOTE: this function may be implemented as a macro, so don't pass arguments with side-effects