#include #include #include "fifo.h" size_t fifo_size(struct fifo *fifo) { return fifo->size; } void fifo_push(struct fifo *fifo, struct token *elt) { struct list *new = malloc(sizeof(struct list)); if (new == NULL) { return; } new->data = elt; if (fifo_size(fifo) == 0) { fifo->head = new; } new->next = NULL; if (fifo_size(fifo) != 0) { fifo->tail->next = new; } fifo->tail = new; fifo->size++; } struct token *fifo_head(struct fifo *fifo) { return fifo->head->data; } void fifo_pop(struct fifo *fifo) { if (fifo_size(fifo) == 0) { return; } if (fifo_size(fifo) == 1) { free(fifo->head->data); free(fifo->head); fifo->head = NULL; fifo->tail = NULL; fifo->size = 0; return; } struct list *tmp = fifo->head->next; free(fifo->head->data); free(fifo->head); fifo->head = tmp; fifo->size--; }