 
#ifndef __dl_linklist_h
#define __dl_linklist_h
#ifdef __cplusplus
extern "C" {
#endif
#ifndef __dl_core_h
#include "Core.h"
#endif
typedef struct linklist_header
{
struct linklist_header *next;
struct linklist_header *previous;
} linklist_header ;
extern void LinkList_AddToHead(linklist_header *anchor, linklist_header *item);
extern void LinkList_AddToTail(linklist_header *anchor, linklist_header *item);
extern void LinkList_InsertBefore(linklist_header *anchor,
linklist_header *pos,
linklist_header *item);
extern void LinkList_InsertAfter(linklist_header *anchor,
linklist_header *pos,
linklist_header *item);
extern BOOL LinkList_InList(linklist_header *anchor, linklist_header *item);
extern int LinkList_ListLength(linklist_header *anchor);
extern void LinkList_Unlink(linklist_header *anchor, linklist_header *item);
#define LinkList_FirstItem(x) ((void *)(x)->next)
#define LinkList_LastItem(x) ((void *)(x)->previous)
#define LinkList_Init(x) \
{ \
(x)->next = NULL; \
(x)->previous = NULL; \
}
#define LinkList_InitItem(x) \
{ \
(x)->next = NULL; \
(x)->previous = NULL; \
}
#define LinkList_NextItem(x) ((void *) ((linklist_header *)(x))->next)
#define LinkList_PreviousItem(x) ((void *) ((linklist_header *)(x))->previous)
#ifdef __cplusplus
}
#endif
#endif
