lisp-take-1/gc/linked_list/clear.c
2024-11-28 18:36:25 -06:00

55 lines
786 B
C

#include <debug.h>
#include "struct.h"
#include "clear.h"
void linked_list_deep_clear(
struct linked_list* list,
size_t link_offset)
{
ENTER;
for (struct value* head = list->head, *next; head; head = next)
{
struct link* link = (void*) head + link_offset;
next = link->next;
link->prev = NULL;
link->next = NULL;
link->in_set = false;
}
list->head = NULL;
list->tail = NULL;
EXIT;
}
void linked_list_shallow_clear(
struct linked_list* list)
{
ENTER;
list->head = NULL;
list->tail = NULL;
EXIT;
}
void link_clear(
struct link* link)
{
ENTER;
link->prev = NULL;
link->next = NULL;
EXIT;
}