Skip to content

Commit

Permalink
Automatically free container elements if needed
Browse files Browse the repository at this point in the history
  • Loading branch information
Ratstail91 committed Oct 25, 2024
1 parent 3148a56 commit 2ee19c7
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 7 deletions.
2 changes: 1 addition & 1 deletion makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ repl: source

#various kinds of available tests
.PHONY: tests
tests: clean test-cases
tests: clean test-cases test-integrations

.PHONY: test-all
test-all: clean test-cases test-integrations test-benchmarks
Expand Down
9 changes: 7 additions & 2 deletions source/toy_array.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,18 @@
#include <stdlib.h>

Toy_Array* Toy_resizeArray(Toy_Array* paramArray, unsigned int capacity) {
//TODO: slip in a call to free the complex values here

if (capacity == 0) {
free(paramArray);
return NULL;
}

//if some values will be removed, free them first
if (paramArray != NULL && paramArray->count > capacity) {
for (unsigned int i = capacity; i < paramArray->count; i++) {
Toy_freeValue(paramArray->data[i]);
}
}

unsigned int originalCapacity = paramArray == NULL ? 0 : paramArray->capacity;

Toy_Array* array = realloc(paramArray, capacity * sizeof(Toy_Value) + sizeof(Toy_Array));
Expand Down
7 changes: 5 additions & 2 deletions source/toy_stack.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@ Toy_Stack* Toy_allocateStack() {
}

void Toy_freeStack(Toy_Stack* stack) {
//TODO: slip in a call to free the complex values here

if (stack != NULL) {
//if some values will be removed, free them first
for (unsigned int i = 0; i < stack->count; i++) {
Toy_freeValue(stack->data[i]);
}

free(stack);
}
}
Expand Down
10 changes: 8 additions & 2 deletions source/toy_table.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,15 @@ Toy_Table* Toy_allocateTable() {
}

void Toy_freeTable(Toy_Table* table) {
//TODO: slip in a call to free the complex values here
if (table != NULL) {
//if some values will be removed, free them first
for (unsigned int i = 0; i < table->capacity; i++) {
Toy_freeValue(table->data[i].key);
Toy_freeValue(table->data[i].value);
}

free(table);
free(table);
}
}

void Toy_insertTable(Toy_Table** tableHandle, Toy_Value key, Toy_Value value) {
Expand Down

0 comments on commit 2ee19c7

Please sign in to comment.