From d58f64745bcb321c2de9128047960455c688c027 Mon Sep 17 00:00:00 2001 From: Gunnar Dalsnes Date: Mon, 3 Nov 2003 20:30:23 +0000 Subject: [PATCH] added macros for sorted list insertions svn path=/trunk/; revision=6522 --- reactos/include/ntos/rtl.h | 77 +++++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/reactos/include/ntos/rtl.h b/reactos/include/ntos/rtl.h index b1db702cf2c..fc49b790242 100755 --- a/reactos/include/ntos/rtl.h +++ b/reactos/include/ntos/rtl.h @@ -1,4 +1,4 @@ -/* $Id: rtl.h,v 1.19 2003/09/12 17:51:46 vizzini Exp $ +/* $Id: rtl.h,v 1.20 2003/11/03 20:30:23 gdalsnes Exp $ * */ @@ -362,6 +362,81 @@ RemoveTailList ( return(Old); } + +/* +Macros for sorted inserts. Lists are walked in reverse order to maintain +FIFO behaviour required by some callers... + +VOID InsertXcendingList( + PLIST_ENTRY ListHead, + PLIST_ENTRY NewEntry, + ... + +-Gunnar +*/ + +#define InsertDescendingList(ListHead, NewEntry, Type, ListEntryField, SortField)\ +{\ + PLIST_ENTRY current;\ + BOOL Inserted = FALSE;\ +\ + current = (ListHead)->Blink;\ + while (current != (ListHead))\ + {\ + if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >=\ + CONTAINING_RECORD((NewEntry), Type, ListEntryField)->SortField)\ + {\ + InsertTailList(current, (NewEntry));\ + Inserted = TRUE;\ + break;\ + }\ + current = current->Blink;\ + }\ +\ + if (!Inserted)\ + {\ + InsertHeadList((ListHead), (NewEntry));\ + }\ +} + + +#define InsertAscendingList(ListHead, NewEntry, Type, ListEntryField, SortField)\ +{\ + PLIST_ENTRY current;\ + BOOL Inserted = FALSE;\ +\ + current = (ListHead)->Blink;\ + while (current != (ListHead))\ + {\ + if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <=\ + CONTAINING_RECORD((NewEntry), Type, ListEntryField)->SortField)\ + {\ + InsertTailList(current, (NewEntry));\ + Inserted = TRUE;\ + break;\ + }\ + current = current->Blink;\ + }\ +\ + if (!Inserted)\ + {\ + InsertHeadList((ListHead), (NewEntry));\ + }\ +} + + +/* + * BOOLEAN + * IsXstEntry ( + * PLIST_ENTRY ListHead, + * PLIST_ENTRY Entry + * ); +*/ +#define IsFirstEntry(ListHead, Entry) ((ListHead)->Flink == Entry) + +#define IsLastEntry(ListHead, Entry) ((ListHead)->Blink == Entry) + + NTSTATUS STDCALL RtlAppendUnicodeToString (