/* list.c */

#include <stdlib.h>
#include "chunks.h"

void xFiles_InitItem(xFiles_listItem * pItem)
{
	pItem->prev =
			pItem->next = NULL;
}

void xFiles_InitList(xFiles_list * pList)
{
	pList->head =
			pList->tail = NULL;
}

void xFiles_AddAtHead(xFiles_list * pList, xFiles_listItem * pItem)
{
	pItem->prev = NULL;
	pItem->next = pList->head;

	if (pList->tail)
		pList->head->prev = pItem;
	else
		pList->tail = pItem;

	pList->head = pItem;
}

void xFiles_AddAtTail(xFiles_list * pList, xFiles_listItem * pItem)
{
	pItem->prev = pList->tail;
	pItem->next = NULL;

	if (pList->head)
		pList->tail->next = pItem;
	else
		pList->head = pItem;

	pList->tail = pItem;
}

void xFiles_Remove(xFiles_list * pList, xFiles_listItem * pItem)
{
	if (pItem->prev)
		pItem->prev->next = pItem->next;
	else
		pList->head = pItem->next;

	if (pItem->next)
		pItem->next->prev = pItem->prev;
	else
		pList->tail = pItem->prev;
}
