1
0
Files
Laboratori-ASD/Laboratorio 7/Esercizio 1/invArray.c
2024-03-22 17:37:24 +01:00

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