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