35# ifndef CONTAINING_RECORD
36# define CONTAINING_RECORD(address, type, field) \
37 ((type *)((char *)(address) - offsetof(type, field)))
44InitializeListHead(PLIST_ENTRY ListHead)
46 ListHead->Flink = ListHead->Blink = ListHead;
53IsListEmpty(
const LIST_ENTRY * ListHead)
55 return (
BOOLEAN)(ListHead->Flink == ListHead);
62RemoveEntryList(PLIST_ENTRY Entry)
64 PLIST_ENTRY Flink = Entry->Flink;
65 PLIST_ENTRY Blink = Entry->Blink;
70 return (
BOOLEAN)(Flink == Blink);
76static inline PLIST_ENTRY
77RemoveHeadList(PLIST_ENTRY ListHead)
79 PLIST_ENTRY Entry = ListHead->Flink;
80 PLIST_ENTRY Flink = Entry->Flink;
82 ListHead->Flink = Flink;
83 Flink->Blink = ListHead;
91static inline PLIST_ENTRY
92RemoveTailList(PLIST_ENTRY ListHead)
94 PLIST_ENTRY Entry = ListHead->Blink;
95 PLIST_ENTRY Blink = Entry->Blink;
97 ListHead->Blink = Blink;
98 Blink->Flink = ListHead;
107InsertTailList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry)
109 PLIST_ENTRY Blink = ListHead->Blink;
111 Entry->Flink = ListHead;
112 Entry->Blink = Blink;
113 Blink->Flink = Entry;
114 ListHead->Blink = Entry;
121InsertHeadList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry)
123 PLIST_ENTRY Flink = ListHead->Flink;
125 Entry->Flink = Flink;
126 Entry->Blink = ListHead;
127 Flink->Blink = Entry;
128 ListHead->Flink = Entry;
135AppendTailList(PLIST_ENTRY ListHead, PLIST_ENTRY ListToAppend)
137 PLIST_ENTRY ListEnd = ListHead->Blink;
139 ListHead->Blink->Flink = ListToAppend;
140 ListHead->Blink = ListToAppend->Blink;
141 ListToAppend->Blink->Flink = ListHead;
142 ListToAppend->Blink = ListEnd;