1 // ================================================================
2 // Singly linked list of string, with tail for append.
3 // ================================================================
4 
5 #ifndef SLLS_H
6 #define SLLS_H
7 
8 #include <stdio.h>
9 #include "lib/free_flags.h"
10 
11 typedef struct _sllse_t {
12 	char* value;
13 	char  free_flag;
14 	struct _sllse_t *pnext;
15 } sllse_t;
16 
17 typedef struct _slls_t {
18 	sllse_t *phead;
19 	sllse_t *ptail;
20 	unsigned long long length;
21 } slls_t;
22 
23 slls_t* slls_alloc();
24 int     slls_size(slls_t* plist);
25 slls_t* slls_copy(slls_t* pold);
26 void    slls_free(slls_t* plist);
27 slls_t* slls_single_with_free(char* value);
28 slls_t* slls_single_no_free(char* value);
29 void    slls_append_with_free(slls_t* plist, char* value);
30 void    slls_append_no_free(slls_t* plist, char* value);
31 void    slls_append(slls_t* plist, char* value, char free_flag);
32 int     slls_equals(slls_t* pa, slls_t* pb);
33 slls_t* slls_from_line(char* line, char ifs, int allow_repeat_ifs);
34 
35 void    slls_reverse(slls_t* plist);
36 int     slls_hash_func(slls_t *plist);
37 int     slls_compare_lexically(slls_t* pa, slls_t* pb);
38 
39 void    slls_sort(slls_t* plist);
40 
41 // Debug routines:
42 char*   slls_join(slls_t* plist, char* ofs);
43 void    slls_print(slls_t* plist);
44 void    slls_print_quoted(slls_t* plist);
45 
46 #endif // SLLS_H
47