Files
mirror-processhacker/1.x/trunk/ProcessHacker.Common/LinkedList.cs
T
wj32 95a1343f3a back-ported new provider system from PH 2.x
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@2540 21ef857c-d57f-4fe0-8362-d861dc6d29cd
2009-12-30 02:48:37 +00:00

81 lines
2.2 KiB
C#

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