7 struct familia_storage * _familia_storage_current;
9 struct familia_storage * familia_storage_get_current()
11 return _familia_storage_current;
14 void familia_storage_set_current(struct familia_storage * storage)
16 _familia_storage_current = storage;
19 struct familia_storage * familia_storage_new()
21 struct familia_storage * storage = NULL;
22 storage = malloc(sizeof(struct familia_storage));
25 debug("["__FILE__ "] There was a problem with allocating memory for storage.\n");
29 storage->individuals = NULL;
30 storage->individuals_no = 0;
31 storage->families = NULL;
32 storage->families_no = 0;
37 void familia_storage_free(struct familia_storage * storage)
41 if (storage->individuals_no) {
42 for (i = 0; i < storage->individuals_no; i++) {
43 familia_individual_free(storage->individuals[i]);
44 storage->individuals[i] = NULL;
46 free(storage->individuals);
47 storage->individuals = NULL;
48 storage->individuals_no = 0;
51 if (storage->families_no) {
52 for (i = 0; i < storage->families_no; i++) {
53 familia_family_free(storage->families[i]);
54 storage->families[i] = NULL;
56 free(storage->families);
57 storage->families = NULL;
58 storage->families_no = 0;
62 void familia_storage_add_individual(struct familia_storage * storage, struct familia_individual * individual)
64 struct familia_individual ** tmp = NULL;
65 int size = (storage->individuals_no + 1);
68 tmp = realloc(storage->individuals, size * sizeof(struct familia_individual *));
71 storage->individuals = tmp;
72 storage->individuals[storage->individuals_no] = individual;
73 storage->individuals_no++;
76 debug("["__FILE__ "] There were problems with allocating memory for individual.\n");
81 struct familia_individual * familia_storage_get_individual_by_id(struct familia_storage * storage, unsigned int id)
83 if (storage->individuals_no < id) {
84 debug("["__FILE__ "Trying to get not existing individual!\n");
87 return storage->individuals[id];
90 void familia_storage_remove_individual_by_id(struct familia_storage * storage, unsigned int id)
94 struct familia_individual ** tmp = NULL;
96 if (storage->individuals_no < id) {
97 debug("["__FILE__ "] Trying to remove not existing individual!\n");
101 for (i = 0; i < storage->individuals_no; i++) {
102 if (storage->individuals[i]->id == id) {
104 familia_individual_free(storage->individuals[i]);
105 storage->individuals[i] = NULL;
109 * If family has been found, reorder rest of files to avoid
110 * NULL pointers inside array.
112 if (found && (i < storage->individuals_no - 1)) {
113 storage->individuals[i] = storage->individuals[i + 1];
118 tmp = realloc(storage->individuals,
119 (storage->families_no) * sizeof(struct familia_family *));
122 storage->individuals = tmp;
124 storage->individuals_no--;
128 void familia_storage_add_family(struct familia_storage * storage, struct familia_family * family)
130 struct familia_family ** tmp = NULL;
131 int size = (storage->families_no + 1);
134 tmp = realloc(storage->families, size * sizeof(struct familia_family *));
137 storage->families = tmp;
138 storage->families[storage->families_no] = family;
139 storage->families_no++;
142 debug("["__FILE__ "] There were problems with allocating memory for family.\n");
147 struct familia_family * familia_storage_get_family_by_id(struct familia_storage * storage, unsigned int id)
149 if (storage->families_no < id) {
150 debug("["__FILE__ "Trying to get not existing family!\n");
153 return storage->families[id];
156 void familia_storage_remove_family_by_id(struct familia_storage * storage, unsigned int id)
160 struct familia_family ** tmp = NULL;
162 if (storage->families_no < id) {
163 debug("["__FILE__ "] Trying to remove not existing family!\n");
167 for (i = 0; i < storage->families_no; i++) {
168 if (storage->families[i]->id == id) {
170 familia_family_free(storage->families[i]);
171 storage->families[i] = NULL;
175 * If family has been found, reorder rest of files to avoid
176 * NULL pointers inside array.
178 if (found && (i < storage->families_no - 1)) {
179 storage->families[i] = storage->families[i + 1];
184 tmp = realloc(storage->families,
185 (storage->families_no) * sizeof(struct familia_family *));
188 storage->families = tmp;
190 storage->families_no--;