114 lines
2.4 KiB
C
114 lines
2.4 KiB
C
#include "village.h"
|
|
#include <stddef.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
int add_villager(struct villager **village, unsigned int *population, struct villager villager){
|
|
|
|
if(!village || population == 0) return -1;
|
|
|
|
struct villager *tmp = realloc(*village, (*population + 1) * sizeof(struct villager));
|
|
if(!tmp) return -2;
|
|
|
|
*village = tmp;
|
|
(*village)[*population] = villager;
|
|
(*population) ++;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
int remove_villager(struct villager **village, unsigned int *population, char *name){
|
|
|
|
if(!village || population == 0 || !name) return -1;
|
|
|
|
if(*population == 1){
|
|
|
|
if(!strcmp(village[0]->name, name)){
|
|
|
|
free(*village);
|
|
*village = NULL;
|
|
*population = 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
size_t index = 0;
|
|
int found = 0;
|
|
while(index < *population){
|
|
|
|
if(found != 0){
|
|
(*village)[index - 1] = (*village)[index];
|
|
}
|
|
|
|
if(!strcmp((*village)[index].name, name)) found ++;
|
|
|
|
index ++;
|
|
}
|
|
|
|
*population -= found;
|
|
if(*population > 0) *village = realloc(*village, (*population) * sizeof(struct villager));
|
|
else {
|
|
free(*village);
|
|
*village = NULL;
|
|
}
|
|
return 0;
|
|
|
|
}
|
|
|
|
void clear_village(struct villager **village, unsigned int *population){
|
|
|
|
if(!village || population == 0) return ;
|
|
|
|
/*for(size_t i = 0; i < *population; i ++){
|
|
|
|
free(village[i]);
|
|
village[i] = NULL;
|
|
}
|
|
//free(village);
|
|
*/
|
|
|
|
for (unsigned int i = 0; i < *population; i++){
|
|
village[i] = NULL;
|
|
}
|
|
*population = 0;
|
|
|
|
}
|
|
/*
|
|
int main(void)
|
|
{
|
|
|
|
struct villager *village = NULL;
|
|
unsigned int population = 0;
|
|
|
|
struct villager tom_nook = {
|
|
.name = "Tom Nook",
|
|
.age = 99,
|
|
.job = SELLER,
|
|
.favorite_quote = "It's 42 bells",
|
|
};
|
|
|
|
add_villager(&village, &population, tom_nook);
|
|
|
|
struct villager marie = {
|
|
.name = "Marie",
|
|
.age = 23,
|
|
.job = WORKER,
|
|
.favorite_quote = "It's so expensive!",
|
|
};
|
|
|
|
add_villager(&village, &population, marie);
|
|
|
|
clear_village(&village, &population);
|
|
|
|
for (unsigned int i = 0; i < population; i++)
|
|
{
|
|
printf("I'm %s (%d)\n", village[i].name, village[i].age);
|
|
}
|
|
|
|
printf("%p\n", village);
|
|
printf("%u\n", population);
|
|
}
|
|
*/
|