#include "../include/list.h" #include "../include/helpers.h" node_t *init_node(void *x) { node_t *n = safe_calloc(1, sizeof(node_t)); n->item = x; n->next = NULL; n->prev = NULL; return n; } list_t *init_list() { list_t *l = safe_calloc(1, sizeof(list_t)); l->head = NULL; l->tail = NULL; l->size = 0; return l; } void *list_pop_front(list_t *l) { node_t *front = l->head; if (!front) return NULL; node_t *new = front->next; l->head = new; if (!new) l->tail = NULL; l->size--; return front; } void list_push_back(list_t *l, void *x) { node_t *back = l->tail; node_t *new = init_node(x); if (!back) { l->head = new; l->tail = l->head; } else { back->next = new; new->prev = back; l->tail = new; } l->size++; } void list_push_front(list_t *l, void *x) { node_t *front = l->head; node_t *new = init_node(x); if (!front) { l->tail = new; l->head = l->tail; } else { front->prev = new; new->next = front; l->head = new; } l->size++; } void list_free(void *x, void (*freefunc)(void *)) { list_t *l = x; node_t *cur = l->head; node_t *tmp; if (!x) return; while (cur) { freefunc(cur->item); tmp = cur->next; free(cur); cur = tmp; } free(l); }