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