====== 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.