====== Filas genéricas ======
Este projeto faz parte do [[PPOS-v2:start|PPOS v2]].
O sistema operacional gerencia muitas filas: de tarefas aguardando o processador, de requisições de acesso ao disco, de pacotes a enviar na rede, etc. Este projeto visa construir uma pequena biblioteca em C que ofereça operações básicas de inserção e remoção em uma fila genérica.
A fila a ser implementada é genérica, ou seja, é uma fila de ponteiros ''void *'' onde cada elemento é um ponteiro para um dado cujo tipo não é conhecido pela biblioteca. **A fila não armazena os dados**, mas somente os ponteiros para eles. Assim, essa fila pode ser usada para organizar vários tipos de dados.
Além disso, a fila deve manter um //iterador//, ou seja, um cursor que permite percorrê-la e consultar seus itens.
{{ queue.png |Fila genérica}}
As operações básicas da fila são:
* ''queue_create'': cria uma nova fila (vazia)
* ''queue_destroy'': destrói uma fila (mas não destrói os itens em si; o responsável por destruir os itens é quem os criou)
* ''queue_add'': adiciona um item ao fim da fila
* ''queue_del'': remove um item da fila
* ''queue_size'': informa o número de itens na fila
* ''queue_print'': imprime o conteúdo da fila
As operações seguintes usam o iterador:
* ''queue_head'': ajusta o iterador para o início da fila
* ''queue_next'': avança o iterador ao próximo item da fila
* ''queue_item'': informa o item indicado pelo iterador
Esta biblioteca será utilizada em vários outros projetos, portanto capriche na sua implementação!
===== Requisitos =====
Os arquivos necessários a este projeto estão em {{ queue.tgz |}}:
* ''queue.h'' : interface da biblioteca
* ''queue.c'' : implementação da biblioteca (a implementar)
* ''testa-fila.c'' : programa de teste
* ''testa-fila.txt'' : saída esperada do programa de teste
* ''makefile'' : para a compilação
Os seguintes requisitos devem ser atendidos:
* A implementação deve ser feita em C no padrão C99 no arquivo ''queue.c''.
* Com exceção de ''queue.c'', os arquivos fornecidos **não devem ser alterados**.
* O código deve funcionar corretamente com o programa de teste.
* A saída do programa de teste deve ser igual à saída esperada (veja ''make test'').
O processo de correção substitui os arquivos do projeto pelas versões originais, com exceção da implementação do aluno em ''queue.c''. Assim, alterações feitas nos demais arquivos serão destruídas.
===== A entregar =====
Envie somente o arquivo ''queue.c'' através do Moodle.
===== Outras informações =====
* Dependências:
* Conhecimento da linguagem C.