X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=src%2Fstorage%2Fstorage.c;h=c54e6a0026a8e0c2feee5d41208e93ca74de1085;hb=4faf7e4b4b91a9c320f7d60299162b09720f1e4a;hp=9f74f90d1025bf6a65740d5db48b3ee93279d3c0;hpb=094bc471373afa79a63c024909d57261fef00b2f;p=familia.git diff --git a/src/storage/storage.c b/src/storage/storage.c index 9f74f90..c54e6a0 100644 --- a/src/storage/storage.c +++ b/src/storage/storage.c @@ -1,3 +1,4 @@ +#include #include #include "storage.h" @@ -6,6 +7,9 @@ struct familia_storage * _familia_storage_current; +extern void _familia_storage_positions_init(); +extern void _familia_storage_positions_free(); + struct familia_storage * familia_storage_get_current() { return _familia_storage_current; @@ -31,6 +35,8 @@ struct familia_storage * familia_storage_new() storage->families = NULL; storage->families_no = 0; +/* _familia_storage_positions_init();*/ + return storage; } @@ -57,6 +63,8 @@ void familia_storage_free(struct familia_storage * storage) storage->families = NULL; storage->families_no = 0; } + +/* _familia_storage_positions_free();*/ } void familia_storage_add_individual(struct familia_storage * storage, struct familia_individual * individual) @@ -68,6 +76,7 @@ void familia_storage_add_individual(struct familia_storage * storage, struct fam tmp = realloc(storage->individuals, size * sizeof(struct familia_individual *)); if (tmp) { + individual->id = storage->individuals_no; storage->individuals = tmp; storage->individuals[storage->individuals_no] = individual; storage->individuals_no++; @@ -134,6 +143,7 @@ void familia_storage_add_family(struct familia_storage * storage, struct familia tmp = realloc(storage->families, size * sizeof(struct familia_family *)); if (tmp) { + family->id = storage->families_no; storage->families = tmp; storage->families[storage->families_no] = family; storage->families_no++; @@ -191,3 +201,77 @@ void familia_storage_remove_family_by_id(struct familia_storage * storage, unsig } } +void familia_storage_dump_all() +{ + unsigned int i; + struct familia_storage * storage = NULL; + struct familia_family * family = NULL; + struct familia_individual * individual = NULL; + struct familia_individual * i1 = NULL; + struct familia_individual * i2 = NULL; + + storage = familia_storage_get_current(); + + for (i = 0; i < storage->individuals_no; i++) { + struct familia_family * f = NULL; + + individual = storage->individuals[i]; + + printf("Individual (%d)\n", individual->id); + printf("\t First name: %s\n", individual->first_name); + printf("\t Last name: %s\n", individual->last_name); + + if (individual->families_no > 0) { + unsigned int j; + + printf("\t Families:\n"); + for (j = 0; j < individual->families_no; j++) { + f = individual->families[j]; + i1 = familia_family_get_parent(f, Individual1); + i2 = familia_family_get_parent(f, Individual2); + + printf("\t > %s&%s\n", + i1 ? familia_individual_get_first_name(i1) : "NULL", + i2 ? familia_individual_get_first_name(i2) : "NULL"); + } + } + + printf("\t Parents:\n"); + f = NULL; + f = familia_individual_get_parents(individual); + + if (f) { + i1 = familia_family_get_parent(f, Individual1); + i2 = familia_family_get_parent(f, Individual2); + + printf("\t > %s&%s\n", + i1 ? familia_individual_get_first_name(i1) : "NULL", + i2 ? familia_individual_get_first_name(i2) : "NULL"); + } + else { + printf("\t (none)\n"); + } + } + + + for (i = 0; i < storage->families_no; i++) { + unsigned int j; + + family = storage->families[i]; + + printf("Family (%d)\n", family->id); + i1 = familia_family_get_parent(family, Individual1); + printf("\t First parent: %s\n", i1 ? familia_individual_get_first_name(i1) : "NULL"); + + i2 = familia_family_get_parent(family, Individual2); + printf("\t Second parent: %s\n", i2 ? familia_individual_get_first_name(i2) : "NULL"); + + printf("\t Children:\n"); + if (family->children_no > 0) { + for (j = 0; j < family->children_no; j++) { + i1 = family->children[j]; + printf("\t > %s\n", i1 ? familia_individual_get_first_name(i1) : "NULL"); + } + } + } +}