namespace ProcessHacker.Common { public class LinkedListEntry { public LinkedListEntry Flink; public LinkedListEntry Blink; public T Value; } public static class LinkedList { public static void InitializeListHead(LinkedListEntry listHead) { listHead.Flink = listHead.Blink = listHead; } public static bool RemoveEntryList(LinkedListEntry entry) { LinkedListEntry blink; LinkedListEntry flink; flink = entry.Flink; blink = entry.Blink; blink.Flink = flink; flink.Blink = blink; return flink == blink; } public static LinkedListEntry RemoveHeadList(LinkedListEntry listHead) { LinkedListEntry flink; LinkedListEntry entry; entry = listHead.Flink; flink = entry.Flink; listHead.Flink = flink; flink.Blink = listHead; return entry; } public static LinkedListEntry RemoveTailList(LinkedListEntry listHead) { LinkedListEntry blink; LinkedListEntry entry; entry = listHead.Blink; blink = entry.Blink; listHead.Blink = blink; blink.Flink = listHead; return entry; } public static void InsertTailList(LinkedListEntry listHead, LinkedListEntry entry) { LinkedListEntry blink; blink = listHead.Blink; entry.Flink = listHead; entry.Blink = blink; blink.Flink = entry; listHead.Blink = entry; } public static void InsertHeadList(LinkedListEntry listHead, LinkedListEntry entry) { LinkedListEntry flink; flink = listHead.Flink; entry.Flink = flink; entry.Blink = listHead; flink.Blink = entry; listHead.Flink = entry; } } }