#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;
}