#include #include "queue-ll.h" /* Retourne une nouvelle file vide, ou NULL en cas d'erreur. */ queue *queue_new(void) { queue *q; q = malloc(sizeof(queue)); if (!q) return NULL; q -> head = NULL; q -> tail = NULL; q -> nb_values = 0; return q; } /* Libère la file . */ void queue_free(queue *q) { queue_element *e, *e_next; for (e = q -> head; e; e = e_next) { e_next = e -> next; free(e); } free(q); } /* Ajoute le pointeur

à la file . Retourne 0 en cas de succès, ou -1 en cas d'insuffisance mémoire. */ int queue_send(queue *q, void *p) { queue_element *e; e = malloc(sizeof(queue_element)); if (!e) return -1; e -> content = p; e -> next = NULL; if (q -> tail) q -> tail -> next = e; else q -> head = e; q -> tail = e; q -> nb_values++; return 0; } /* Extrait un pointeur de la file et retourne ce pointeur, ou NULL si la file est vide. */ void *queue_receive(queue *q) { queue_element *e; void *p; if (!(q -> head)) return NULL; e = q -> head; p = e -> content; q -> head = e -> next; if (!--(q -> nb_values)) q -> tail = NULL; free(e); return p; } /* Retourne le pointeur en tête de la file , sans le retirer, ou NULL si la file est vide. */ void *queue_front(queue *q) { if (!(q -> head)) return NULL; return q -> head -> content; } /* Retourne le nombre d'éléments présents dans la file . */ unsigned queue_size(queue *q) { return q -> nb_values; } /* Détermine si la file est vide. */ int queue_is_empty(queue *q) { return q -> nb_values == 0; }