/* semplici primitive per la gestione di una coda utilizzando un array. Il
 * tipo di dati gestito e' definito in queue.h */

#include<stdio.h>
#include<stdlib.h>
#include"queue.h"

#define ERR 1
#define OK 0

static queue_type *q;
static unsigned int head=-1,tail=-1,N;

/* inizializzazione */
int initQUEUE(unsigned int nmax){
 N=nmax+1;
 head=0;
 tail=0;
 return (q=malloc(sizeof(queue_type)*nmax))==NULL?-ERR:OK;
}

/* controlla se e' vuoto */
unsigned int isQUEUEempty(void){
 return head%N==tail;
}

/* preleva un elemento dalla coda */
queue_type getQUEUE(void){
 head%=N;
 return q[head++];
}

/* mette un elemento in testa alla coda */
void putQUEUE(queue_type a){
 q[tail++]=a;
 tail%=N;
}

void destroyQUEUE(void){
   free(q);
   }