#include #include "queue.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 -> front = 0; q -> rear = 0; return q; } /* Libère la file . */ void queue_free(queue *q) { free(q); } /* Ajoute le pointeur

à la file . Retourne 0 en cas de succès, ou -1 si la file est saturée. */ int queue_send(queue *q, void *p) { if (queue_size(q) >= MAX_QUEUE_SIZE - 1) return -1; q -> contents[q -> rear] = p; q -> rear = (q -> rear + 1) % MAX_QUEUE_SIZE; return 0; } /* Retire un pointeur depuis la file et retourne ce pointeur, ou NULL si la file est vide. */ void *queue_receive(queue *q) { void *p; if (q -> front == q -> rear) return NULL; p = q -> contents[q -> front]; q -> front = (q -> front + 1) % MAX_QUEUE_SIZE; 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 -> front == q -> rear) return NULL; return q -> contents[q -> front]; } /* Retourne le nombre d'éléments présents dans la file . */ unsigned queue_size(queue *q) { return (MAX_QUEUE_SIZE + q -> rear - q -> front) % MAX_QUEUE_SIZE; } /* Détermine si la file est vide. */ int queue_is_empty(queue *q) { return q -> front == q -> rear; }