You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.1 KiB
C

/* See the end of this file for copyright and license terms. */
#include <gay/clist.h>
#include <gay/config.h>
#include <gay/kprintf.h>
void clist_init(struct clist *head)
{
# if CFG_DEBUG_CLIST
if (head->next == head && head->prev == head)
kprintf("clist_init(%p) called multiple times\n", head);
# endif
head->next = head;
head->prev = head;
}
void clist_add(struct clist *head, struct clist *new)
{
# if CFG_DEBUG_CLIST
if (sus_nil(head->next) || sus_nil(head->prev)) {
kprintf("clist_add(%p, %p): head seems uninitialized\n", head, new);
return;
}
if (sus_nil(new)) {
kprintf("clist_add(%p, %p): new node is NULL!\n", head, new);
return;
}
# endif
head->prev->next = new;
new->next = head;
new->prev = head->prev;
head->prev = new;
}
void clist_add_first(struct clist *head, struct clist *new)
{
head->next->prev = new;
new->next = head->next;
new->prev = head;
head->next = new;
}
void clist_del(struct clist *node)
{
node->next->prev = node->prev;
node->prev->next = node->next;
# if CFG_DEBUG_CLIST
node->next = nil;
node->prev = nil;
# endif
}
struct clist *clist_del_first(struct clist *head)
{
# if CFG_DEBUG_CLIST
if (clist_is_empty(head)) {
kprintf("clist_del_first(%p): empty list!\n", head);
return nil;
}
# endif
struct clist *first = head->next;
clist_del(first);
return first;
}
struct clist *clist_del_last(struct clist *head)
{
# ifdef CFG_DEBUG_CLIST
if (clist_is_empty(head)) {
kprintf("clist_del_last(%p): empty list!\n", head);
return nil;
}
# endif
struct clist *last = head->prev;
clist_del(last);
return last;
}
/*
* This file is part of GayBSD.
* Copyright (c) 2021 fef <owo@fef.moe>.
*
* GayBSD is nonviolent software: you may only use, redistribute, and/or
* modify it under the terms of the Cooperative Nonviolent Public License
* (CNPL) as found in the LICENSE file in the source code root directory
* or at <https://git.pixie.town/thufie/npl-builder>; either version 7
* of the license, or (at your option) any later version.
*
* GayBSD comes with ABSOLUTELY NO WARRANTY, to the extent
* permitted by applicable law. See the CNPL for details.
*/