4 #include "individual.h"
8 struct familia_individual * familia_individual_new()
10 struct familia_individual * individual = NULL;
11 individual = malloc(sizeof(struct familia_individual));
14 debug("["__FILE__ "] There was a problem with allocating memory for individual.\n");
19 individual->first_name = NULL;
20 individual->last_name = NULL;
21 individual->families = NULL;
22 individual->families_no = 0;
27 void familia_individual_free(struct familia_individual * individual)
31 if (individual->first_name) {
32 free(individual->first_name);
33 individual->first_name = NULL;
36 if (individual->last_name) {
37 free(individual->last_name);
38 individual->last_name = NULL;
41 if (individual->families) {
42 /* Remove all family links. */
43 for (i = 0; i < individual->families_no; i++) {
44 individual->families[i] = NULL;
46 free(individual->families);
47 individual->families = NULL;
48 individual->families_no = 0;
54 void familia_individual_set_first_name(struct familia_individual * individual, char * first_name)
56 /* Remove old data if it exists */
57 if (individual->first_name) {
58 free(individual->first_name);
61 individual->first_name = malloc(strlen(first_name) + 1);
64 * Malloc could return null on allocation failure.
65 * Check if memory is allocated correctly and copy string.
67 if (individual->first_name) {
68 strcpy(individual->first_name, first_name);
71 debug("There were problems with allocating memory for individual first name.\n");
75 char * familia_individual_get_first_name(struct familia_individual * individual)
81 return individual->first_name;
84 void familia_individual_set_last_name(struct familia_individual * individual, char * last_name)
86 /* Remove old data if it exists */
87 if (individual->last_name) {
88 free(individual->last_name);
91 if (last_name == NULL) {
95 individual->last_name = malloc(strlen(last_name) + 1);
98 * Malloc returns NULL on allocation failure.
99 * Check if memory is allocated correctly and copy string.
101 if (individual->last_name) {
102 strncpy(individual->last_name, last_name, strlen(last_name));
105 debug("There were problems with allocating memory for individual last name.\n");
109 char * familia_individual_get_last_name(struct familia_individual * individual)
111 return individual->last_name;
114 void familia_individual_add_family(struct familia_individual * individual, struct familia_family * family)
116 struct familia_family ** tmp = NULL;
117 int size = (individual->families_no + 1);
119 tmp = realloc(individual->families, size * sizeof(struct familia_family *));
122 individual->families = tmp;
123 individual->families[individual->families_no] = family;
124 individual->families_no++;
127 debug("There were problems with allocating memory for family.\n");
132 struct familia_family * familia_individual_get_family_by_id(struct familia_individual * individual, unsigned int id)
134 if (individual->families_no < id) {
135 debug("Trying to get not existing family!\n");
138 return individual->families[id];
141 void familia_individual_remove_family_by_id(struct familia_individual * individual, unsigned int id)
145 struct familia_family ** tmp = NULL;
147 if (individual->families_no < id) {
148 debug("Trying to remove not existing family!\n");
152 for (i = 0; i < individual->families_no; i++) {
153 if (individual->families[i]->id == id) {
155 individual->families[i] = NULL;
159 * If family has been found, reorder rest of files to avoid
160 * NULL pointers inside array.
162 if (found && (i < individual->families_no - 1)) {
163 individual->families[i] = individual->families[i + 1];
168 tmp = realloc(individual->families,
169 (individual->families_no) * sizeof(struct familia_family *));
172 individual->families = tmp;
174 individual->families_no--;
178 void familia_individual_set_parents(struct familia_individual * individual, struct familia_family * family)
180 individual->parents = family;
183 struct familia_family * familia_individual_get_parents(struct familia_individual * individual)
185 return individual->parents;
188 void familia_individual_remove_parents(struct familia_individual * individual)
190 individual->parents = NULL;