====== Mapa genérico ======
Este projeto faz parte do [[PPOS-v2:start|PPOS v2]].
O núcleo do SO gerencia diversos objetos para os programas do usuário, como arquivos aberto, threads, semáforos, etc. O programa acessa esses objetos através identificadores únicos (//Unique IDentifiers// - UIDs), geralmente números inteiros positivos, gerados pelo núcleo quando o objeto é criado.
Este projeto visa construir uma pequena biblioteca em C com operações básicas para gerenciar **mapas de objetos**, que associam ponteiros de objetos a UIDs inteiros. O mapa a ser implementado é genérico, ou seja, é um mapa de ponteiros ''void *'' para inteiros, onde cada elemento é um ponteiro para um dado cujo tipo não é conhecido pela biblioteca. **O mapa não armazena os dados**, mas somente os ponteiros para eles.
Um mapa de tamanho SIZE registra cada objeto sob um identificador único (UID), que varia entre 0 e SIZE-1 de forma crescente (0, 1, 2, ...). Ao registrar um novo objeto deve ser usado o próximo UID livre, com comportamento circular caso não existam mais UIDs livres no final do mapa.
{{ tad-map.png |Mapa genérico}}
As principais operações em um mapa são:
* ''map_create'': cria um novo mapa (vazio)
* ''map_destroy'': destrói um mapa (mas não destrói os objetos em si; o responsável por destruí-los é quem os criou)
* ''map_put'': adiciona um objeto ao mapa e retorna um UID
* ''map_get'': informa o objeto associado a um UID
* ''map_del'': retira o objeto do mapa e libera o seu UID
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 {{ tad-vazio.tgz |}}:
* ''map.h'' : interface da biblioteca
* ''map.c'' : implementação da biblioteca (a implementar)
* ''testa-map.c'' : programa de teste
* ''testa-map.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 ''map.c''.
* Com exceção de ''map.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 ''map.c''. Assim, alterações feitas nos demais arquivos serão destruídas.
===== A entregar =====
Envie somente o arquivo ''map.c'' através do Moodle.
===== Outras informações =====
* Dependências:
* Conhecimento da linguagem C.