/*! * \file fila.c * Todas as definições da fila estao neste módulo. * * \brief Módulo gerenciador da fila. * \version 0.0.1 * \date 05/04/2012 08:46:51 PM * \author Alessandro Elias, ae11@inf.ufpr.br * \author Welton Pereira Martins, wpm11@inf.ufpr.br */ #include #include "fila.h" #include "log.h" #include "mycommdef.h" /*! * \brief Inicializa a Fila. * \param Fila - Estrutura de dados do TipoFila. * \remark InicFila deve ser a primeira função a ser chamada, caso * ocorra uma chamada a qualquer uma das outras funções o resultado * e imprevisível, pois a pilha contém lixo de memória. * \return True caso a inicialização foi bem sucedida, False caso contrário. * \sa VaziaFila, Enfileira, ImprimeFila, Desinfileira, CriaFila */ bool InicFila(struct TipoFila *Fila){ Fila->Frente = 0; Fila->Final = Fila->Frente; return TRUE; } /*! * \brief Verifica se a Fila possui elemento(s). * \param Fila - Estrutura de dados do TipoFila. * \return Zero caso a fila esteja vazia ou um valor diferente de zero caso a fila não esteja vazia. * \sa InicFila, Enfileira, ImprimeFila, Desinfileira, CriaFila */ int VaziaFila(struct TipoFila *Fila){ return(Fila->Final == Fila->Frente); } /*! * \brief Enfileira um elemento no final da fila. * \param Elemento - Elemento que será enfileirado no final da fila. * \param Fila - Estrutura de dados do TipoFila. * \remark A política desta fila e FIFO (First-in, First-out). * \sa InicFila, VaziaFila, ImprimeFila, Desinfileira, CriaFila */ void Enfileira(TipoAluno Elemento, struct TipoFila *Fila){ static const char szErrMsg[] = "\tFila Cheia: Impossível enfileirar!\n"; if (((Fila->Final+1)%TamMax) == Fila->Frente) { fprintf(stderr, szErrMsg+1); LogMessage(szErrMsg); WaitReturn(); }else { Fila->vetor[Fila->Final] = Elemento; Fila->Final=(Fila->Final+1)%TamMax; }/* else */ }/* Enfileira */ /*! * \brief Imprime na saida padrão os elementos da fila. * \param Fila - Estrutura de dados do TipoFila. * \sa InicFila, VaziaFila, Enfileira, Desinfileira, CriaFila */ void ImprimeFila(struct TipoFila *Fila) { static const char szErrMsg[] = "\tFila Vazia!\n"; TipoAluno i; if (VaziaFila(Fila)) { fprintf(stderr, szErrMsg+1); LogMessage(szErrMsg); }else{ i = Fila->Frente; puts("Senhas distribuídas: "); while (i != Fila->Final){ printf("%d ",Fila->vetor[i]); i = (i+1)%TamMax; } puts(""); fflush(stdout); }/*else*/ }/*ImprimeFila*/ /*! * \brief Desenfileira o primeiro elemento da fila. * \param Fila - Estrutura de dados do TipoFila. * \return O elemento desenfileirado. * \sa InicFila, VaziaFila, Enfileira, ImprimeFila, CriaFila */ TipoAluno Desinfileira(struct TipoFila *Fila) { static const char szErrMsg[] = "\tFila Vazia: impossível desenfileirar! \n"; TipoAluno aux; if (VaziaFila(Fila)) { fprintf(stderr, szErrMsg+1); LogMessage(szErrMsg); WaitReturn(); }else{ aux = Fila->vetor[Fila->Frente]; Fila->Frente = (Fila->Frente+1)%TamMax; return(aux); } /*else*/ return -1; }/*Desinfileira*/