46 lines
1.1 KiB
C
46 lines
1.1 KiB
C
#include "list_entry.h"
|
|
|
|
void InitializeListHead(PLIST_ENTRY ListHead) {
|
|
ListHead->flink = ListHead;
|
|
ListHead->blink = ListHead;
|
|
}
|
|
|
|
int IsListEmpty(const PLIST_ENTRY ListHead) {
|
|
return ListHead->flink == ListHead;
|
|
}
|
|
|
|
void InsertHeadList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry) {
|
|
Entry->flink = ListHead->flink;
|
|
Entry->blink = ListHead;
|
|
ListHead->flink->blink = Entry;
|
|
ListHead->flink = Entry;
|
|
}
|
|
|
|
void InsertTailList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry) {
|
|
Entry->blink = ListHead->blink;
|
|
Entry->flink = ListHead;
|
|
ListHead->blink->flink = Entry;
|
|
ListHead->blink = Entry;
|
|
}
|
|
|
|
void RemoveEntryList(PLIST_ENTRY Entry) {
|
|
Entry->blink->flink = Entry->flink;
|
|
Entry->flink->blink = Entry->blink;
|
|
Entry->flink = Entry;
|
|
Entry->blink = Entry;
|
|
}
|
|
|
|
PLIST_ENTRY RemoveHeadList(PLIST_ENTRY ListHead) {
|
|
if (IsListEmpty(ListHead)) return NULL;
|
|
PLIST_ENTRY first = ListHead->flink;
|
|
RemoveEntryList(first);
|
|
return first;
|
|
}
|
|
|
|
PLIST_ENTRY RemoveTailList(PLIST_ENTRY ListHead) {
|
|
if (IsListEmpty(ListHead)) return NULL;
|
|
PLIST_ENTRY last = ListHead->blink;
|
|
RemoveEntryList(last);
|
|
return last;
|
|
}
|