From 8cdc3a64ca42368c7ac318afa6510e489b7cc4c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sun, 10 Feb 2019 00:44:39 +0100 Subject: Linked list improvements. --- linked_list.inc.h | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'linked_list.inc.h') diff --git a/linked_list.inc.h b/linked_list.inc.h index ada0b424..6a0546c7 100644 --- a/linked_list.inc.h +++ b/linked_list.inc.h @@ -17,7 +17,7 @@ INIT_F ( LLIST(TYPE) ) { FREE_F (LINK(TYPE)) { UNLINK(LINK(TYPE))(this); - if (this->value != NULL) FFREE(TYPE, this->value); + if (this->value != NULL) FFREE(TYPE, this->value); return 0; } @@ -132,6 +132,7 @@ int SIZE(LLIST(TYPE)) ( LLIST(TYPE)* llist ) { LINK(TYPE)* l = FIRST(llist); while (l->after != NULL) { ++size; + l = l->after; } return size; } @@ -140,4 +141,27 @@ int EMPTY(LLIST(TYPE)) ( LLIST(TYPE)* llist ) { return FIRST(llist) == llist->tail; } +LLIST(TYPE)* RESOLVE(LLIST(TYPE)) (LLIST(TYPE)* dest, LLIST(TYPE)* new) { + if (dest == NULL) return new; + APPEND(LLIST(TYPE))(dest, new); + return dest; +} + +int RESET(LLIST(TYPE)) ( LLIST(TYPE)* llist ) { + INFO_F("|llist| = %i", SIZE(LLIST(TYPE))(llist)); +#if 1 + FOR(LLIST(TYPE), link, llist) { + // INFO_F("Freeing link '%p' → '%p'", link, link->value); + INFO("leaking memmory, or something"); + FFREE(LINK(TYPE), link); + // UNLINK(LINK(TYPE))(link); + } +#else + // TODO This is a memmory leak + FIRST(llist) = llist->tail; + LAST(llist) = llist->head; +#endif + return 0; +} + #endif /* TYPE */ -- cgit v1.2.3