76 lines
1.6 KiB
C
76 lines
1.6 KiB
C
// Laboratorio 7 - Esercizio 1 - invArray.c
|
|
// Matteo Schiff - s295565
|
|
|
|
#ifndef INVARRAY_C_DEFINED
|
|
#define INVARRAY_C_DEFINED
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
#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]);
|
|
}
|
|
}
|
|
|
|
void invArray_printByIndex(FILE *fp, invArray_t invArray, int index) {
|
|
if (index >= invArray->N)
|
|
return;
|
|
|
|
inv_print(fp, &invArray->array[index]);
|
|
|
|
}
|
|
|
|
/* 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
|