types.c (781B)
1 #include <stdlib.h> 2 #include <stdio.h> 3 #include "types.h" 4 #include "util.h" 5 6 dl_list * 7 new_dl_list(char *str) { 8 dl_list *new = zmalloc(sizeof(dl_list)); 9 new->str = str; 10 return new; 11 } 12 13 dl_list * 14 end_dl_list(dl_list *l) { 15 if (l->next) 16 return end_dl_list(l->next); 17 return l; 18 } 19 20 dl_list * 21 start_dl_list(dl_list *l) { 22 if (l->prev) 23 return end_dl_list(l->prev); 24 return l; 25 } 26 27 28 29 void 30 append_dl_list(dl_list *l1, dl_list *l2) { 31 dl_list *swp = l1->next, *end = end_dl_list(l2); 32 l1->next = l2; 33 end->next = swp; 34 } 35 36 dl_list * 37 insert_dl_list(dl_list *l1, dl_list *l2) { 38 dl_list *swp = l1->prev, *end = end_dl_list(l2); 39 l1->prev = l2; 40 end->next = swp; 41 return start_dl_list(l2); 42 } 43 44 void 45 free_dl_list(dl_list *l) { 46 if (l->next) 47 free_dl_list(l->next); 48 free(l->str); 49 free(l); 50 }