19 ListHead->Flink = ListHead->Blink = ListHead;
24 return (!ListHead || (ListHead->Flink == ListHead));
31 Blink->Flink = ListHead;
32 ListHead->Blink = Blink;
41 Flink->Blink = ListHead;
42 ListHead->Flink = Flink;
50 #if 1 // 6 refs and 2 assigns 51 Entry->Blink->Flink = Entry->Flink;
52 Entry->Flink->Blink = Entry->Blink;
53 #else // 4 refs and 4 assigns 65 Entry->Flink = ListHead;
68 ListHead->Blink = Entry;
75 Entry->Blink = ListHead;
77 ListHead->Flink = Entry;
86 Entry = ListHead->Flink; Entry != ListHead;
87 Count++, Entry = Entry->Flink
93 bool (__stdcall *Action)(
PLIST_ENTRY Entry,
void* UserData ),
98 Entry = ListHead->Flink;
99 while( Entry != ListHead )
102 if (!Action( Entry, UserData ))
return false;
110 Head->Flink = Circular;
111 Head->Blink = Circular->Blink;
119 ListHead->Blink->Flink = HeadlessListToAppend;
120 ListHead->Blink = HeadlessListToAppend->Blink;
121 HeadlessListToAppend->Blink->Flink = ListHead;
122 HeadlessListToAppend->Blink = ListEnd;
128 if (IsListEmpty( HeadedListToAppend ))
return NULL;
130 FirstEntry = HeadedListToAppend->Flink;
133 _AppendTailList( Head, FirstEntry );
144 #if SEMICIRCULAR_SLIST 145 EntryOrHead->Next = EntryOrHead;
147 EntryOrHead->Next = NULL;
152 Entry->Next = ListHead->Next;
153 ListHead->Next = Entry;
158 #if SEMICIRCULAR_SLIST 159 if (Entry == ListHead) Entry = NULL;
else ListHead->Next = Entry->Next;
162 if (Entry != NULL) ListHead->Next = Entry->Next;
void AttachHeadlessList(OUT PLIST_ENTRY Head, IN PLIST_ENTRY Circular)
void _InitializeEntryList(PSINGLE_LIST_ENTRY EntryOrHead)
void _InsertHeadList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry)
struct _LIST_ENTRY * PLIST_ENTRY
#define UnlinkListEntry(E)
void _PushEntryList(PSINGLE_LIST_ENTRY ListHead, PSINGLE_LIST_ENTRY Entry)
PLIST_ENTRY _RemoveTailList(PLIST_ENTRY ListHead)
void _InitializeListHead(PLIST_ENTRY ListHead)
void _RemoveEntryList(PLIST_ENTRY Entry)
PLIST_ENTRY _RemoveHeadList(PLIST_ENTRY ListHead)
bool ListForEach(PLIST_ENTRY ListHead, bool(__stdcall *Action)(PLIST_ENTRY Entry, void *UserData), void *UserData)
struct _SINGLE_LIST_ENTRY * PSINGLE_LIST_ENTRY
UINT GetListEntryCount(PLIST_ENTRY ListHead)
bool _IsListEmpty(PLIST_ENTRY ListHead)
void _InsertTailList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry)
PSINGLE_LIST_ENTRY _PopEntryList(PSINGLE_LIST_ENTRY ListHead)