| | |
| | | #include <stdlib.h> |
| | | #include <string.h> |
| | | #include "list.h" |
| | | #include "option_list.h" |
| | | |
| | | list *make_list() |
| | | { |
| | | list *l = malloc(sizeof(list)); |
| | | l->size = 0; |
| | | l->front = 0; |
| | | l->back = 0; |
| | | return l; |
| | | list *l = malloc(sizeof(list)); |
| | | l->size = 0; |
| | | l->front = 0; |
| | | l->back = 0; |
| | | return l; |
| | | } |
| | | |
| | | /* |
| | | void transfer_node(list *s, list *d, node *n) |
| | | { |
| | | node *prev, *next; |
| | |
| | | if(s->front == n) s->front = next; |
| | | if(s->back == n) s->back = prev; |
| | | } |
| | | */ |
| | | |
| | | void *list_pop(list *l){ |
| | | if(!l->back) return 0; |
| | |
| | | |
| | | void list_insert(list *l, void *val) |
| | | { |
| | | node *new = malloc(sizeof(node)); |
| | | new->val = val; |
| | | new->next = 0; |
| | | node *new = malloc(sizeof(node)); |
| | | new->val = val; |
| | | new->next = 0; |
| | | |
| | | if(!l->back){ |
| | | l->front = new; |
| | | new->prev = 0; |
| | | }else{ |
| | | l->back->next = new; |
| | | new->prev = l->back; |
| | | } |
| | | l->back = new; |
| | | ++l->size; |
| | | if(!l->back){ |
| | | l->front = new; |
| | | new->prev = 0; |
| | | }else{ |
| | | l->back->next = new; |
| | | new->prev = l->back; |
| | | } |
| | | l->back = new; |
| | | ++l->size; |
| | | } |
| | | |
| | | void free_node(node *n) |
| | | { |
| | | node *next; |
| | | while(n) { |
| | | next = n->next; |
| | | free(n); |
| | | n = next; |
| | | } |
| | | node *next; |
| | | while(n) { |
| | | next = n->next; |
| | | free(n); |
| | | n = next; |
| | | } |
| | | } |
| | | |
| | | void free_list(list *l) |
| | | { |
| | | free_node(l->front); |
| | | free(l); |
| | | free_node(l->front); |
| | | free(l); |
| | | } |
| | | |
| | | void free_list_contents(list *l) |
| | | { |
| | | node *n = l->front; |
| | | while(n){ |
| | | free(n->val); |
| | | n = n->next; |
| | | } |
| | | node *n = l->front; |
| | | while(n){ |
| | | free(n->val); |
| | | n = n->next; |
| | | } |
| | | } |
| | | |
| | | void free_list_contents_kvp(list *l) |
| | | { |
| | | node *n = l->front; |
| | | while (n) { |
| | | kvp *p = n->val; |
| | | free(p->key); |
| | | free(n->val); |
| | | n = n->next; |
| | | } |
| | | } |
| | | |
| | | void **list_to_array(list *l) |