winamp/Src/replicant/nu/nodelist.c
2024-09-24 14:54:57 +02:00

71 lines
1.1 KiB
C

#include "nodelist.h"
void nodelist_init(nodelist_t nodelist)
{
nodelist->head=0;
nodelist->tail=0;
}
void nodelist_push_back(nodelist_t nodelist, queue_node_t *item)
{
if (!nodelist->head)
{
nodelist->head=item;
nodelist->tail=item;
}
else
{
nodelist->tail->Next=item;
nodelist->tail=item;
}
item->Next = 0;
}
void nodelist_push_front(nodelist_t nodelist, queue_node_t *item)
{
if (!nodelist->head)
{
nodelist->head=item;
nodelist->tail=item;
item->Next=0;
}
else
{
item->Next = nodelist->head;
nodelist->head = item;
}
}
queue_node_t *nodelist_pop_front(nodelist_t nodelist)
{
queue_node_t *ret;
if (!nodelist->head)
return 0;
ret = nodelist->head;
nodelist->head = nodelist->head->Next;
ret->Next = 0; // so we don't confuse anyone
if (ret == nodelist->tail)
{
nodelist->tail = 0;
}
return ret;
}
void nodelist_push_back_list(nodelist_t nodelist, queue_node_t *item)
{
if (!nodelist->head)
{
nodelist->head=item;
}
else
{
nodelist->tail->Next=item;
}
while (item->Next)
item = item->Next;
nodelist->tail = item;
}