1 #ifndef LISTS_H
2 #define LISTS_H
3 
4 #include "common.h"
5 
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9 
10 struct lists_s_strs;
11 typedef struct lists_s_strs lists_t_strs;
12 typedef int lists_t_compare (const void *, const void *);
13 
14 /* List administration functions. */
15 lists_t_strs *lists_strs_new (int reserve);
16 void lists_strs_clear (lists_t_strs *list);
17 void lists_strs_free (lists_t_strs *list);
18 int lists_strs_size (const lists_t_strs *list);
19 int lists_strs_capacity (const lists_t_strs *list);
20 bool lists_strs_empty (const lists_t_strs *list);
21 
22 /* List member access functions. */
23 char *lists_strs_at (const lists_t_strs *list, int index);
24 
25 /* List mutating functions. */
26 void lists_strs_sort (lists_t_strs *list, lists_t_compare *compare);
27 void lists_strs_reverse (lists_t_strs *list);
28 
29 /* Ownership transferring functions. */
30 void lists_strs_push (lists_t_strs *list, char *s);
31 char *lists_strs_pop (lists_t_strs *list);
32 char *lists_strs_swap (lists_t_strs *list, int index, char *s);
33 
34 /* Ownership preserving functions. */
35 void lists_strs_append (lists_t_strs *list, const char *s);
36 void lists_strs_remove (lists_t_strs *list);
37 void lists_strs_replace (lists_t_strs *list, int index, char *s);
38 
39 /* Helper functions. */
40 int lists_strs_split (lists_t_strs *list, const char *s, const char *delim);
41 int lists_strs_tokenise (lists_t_strs *list, const char *s);
42 char *lists_strs_fmt (const lists_t_strs *list, const char *fmt);
43 char *lists_strs_cat (const lists_t_strs *list);
44 char **lists_strs_save (const lists_t_strs *list);
45 int lists_strs_load (lists_t_strs *list, char **saved);
46 int lists_strs_find (lists_t_strs *list, const char *sought);
47 bool lists_strs_exists (lists_t_strs *list, const char *sought);
48 
49 #ifdef __cplusplus
50 }
51 #endif
52 
53 #endif
54