// Laboratorio 6 - Esercizio 3 - invArray.c // Matteo Schiff - s295565 #ifndef INVARRAY_C_DEFINED #define INVARRAY_C_DEFINED #include #include #include #include "inv.h" typedef struct invArray_s { int N; inv_t *array; } *invArray_t; /* creatore e disruttore */ invArray_t invArray_init() { invArray_t new = malloc(sizeof(struct invArray_s)); new->N = 0; new->array = NULL; return new; } void invArray_free(invArray_t invArray) { free(invArray->array); free(invArray); } /* lettura e scrittura su file */ void invArray_read(FILE *fp, invArray_t invArray) { if (fscanf(fp, " %d", &invArray->N) != 1) return; invArray->array = malloc(invArray->N * sizeof(inv_t)); for (int i = 0; i < invArray->N; i++) { inv_read(fp, &invArray->array[i]); } } void invArray_print(FILE *fp, invArray_t invArray) { for (int i = 0; i < invArray->N; i++) { inv_print(fp, &invArray->array[i]); } } /* ritorna puntatore a oggetto selezionato da indice (nel vettore) */ inv_t *invArray_getByIndex(invArray_t invArray, int index) { if (index >= invArray->N) return NULL; return &(invArray->array[index]); } /* ritorna indice (nel vettore) a oggetto selezionato da nome */ int invArray_searchByName(invArray_t invArray, char *name) { for (int i = 0; i < invArray->N; i++) { if (!strcmp(invArray->array[i].nome, name)) return i; } return -1; } /* Si possono aggiungere altre funzioni se ritenute necessarie */ #endif