#include "fila.h"
#define MAX 20

struct fila {
    int vetor[MAX];
    int inicio, fim;
};

Fila cria_fila()
{
    Fila f = (Fila) malloc(sizeof(struct fila));

    if(f != NULL)
    {
        f->inicio = 0;
        f->fim = 0;
    }
    return f;
}

int fila_vazia(Fila f)
{
    if(f->inicio == f->fim)
        return 1;
    return 0;
}

int fila_cheia(Fila f)
{
    if(f->inicio == (f->fim + 1) % MAX)
        return 1;
    return 0;
}

int insere_fim(Fila f, int elem)
{
    if(fila_cheia(f) == 1)
        return 0;

    /* Insere elemento no final */
    f->vetor[f->fim] = elem;
    f->fim = (f->fim + 1) % MAX; /* Incremento circular */
    return 1;
}

int remove_elem(Fila f, int *elem)
{
    if(fila_vazia(f))
        return 0;

    /* Remove o elemento do inicio */
    *elem = f->vetor[f->inicio];
    f->inicio = (f->inicio + 1) % MAX; /* Incremento circular */
    return 1;
}

int print_fila(Fila f)
{
    printf("{ ");
    for(int i = f->inicio;i <= f->fim - 1;i++)
        printf("%d ", f->vetor[i]);
    printf("}\n");
    return 1;
}
