// Este arquivo: QUEUE.c
// Data: 2019-07-17
// Digitador: Paulo Feofiloff
//
// Esta é uma implementação circular de uma fila cujos elementos são vértices de
// um grafo (veja GRAPHlists.h e GRAPHlists.c).
//
// O código é uma adaptação dos programas 4.10 e 4.11, p.156-157, do livro
// "Algorithms", 3rd.ed., part 1, de Sedgewick.
////////////////////////////////////////////////////////////////////////////////


#include "QUEUE.h"
// inclui MYTOOLS.h (que contém a definição de mallocc())

// A fila reside no segmento queue[begin..end-1] ou na concatenação de segmentos
// queue[begin..N-1]queue[0..end-1] de um vetor queue[0..N-1]. A fila está vazia
// se begin == end.

static vertex *queue; 
static int begin, end;
static int N;

void 
QUEUEinit( int n) {
   N = n; 
   queue = mallocc( N * sizeof (vertex));
   begin = end = 0; 
}

bool 
QUEUEempty( void) { 
   return begin == end; 
}

void 
QUEUEput( vertex v) {
   queue[end++] = v;
   if (end == N) end = 0;
}

vertex 
QUEUEget( void) {
   vertex v = queue[begin++];
   if (begin == N) begin = 0;
   return v;
}

void 
QUEUEfree( void) {
   free( queue);
}

////////////////////////////////////////////////////////////////////////////////
