Changed list functions to macros (or static inline functions).

svn path=/trunk/; revision=1201
This commit is contained in:
Eric Kohl 2000-06-18 15:21:53 +00:00
parent e3b8762528
commit 44bdd793c1
4 changed files with 240 additions and 120 deletions

View file

@ -1,4 +1,4 @@
/* $Id: rtl.h,v 1.34 2000/05/13 01:44:53 ekohl Exp $
/* $Id: rtl.h,v 1.35 2000/06/18 15:20:10 ekohl Exp $
*
*/
@ -169,7 +169,6 @@ extern BOOLEAN NLS_MB_OEM_CODE_PAGE_TAG;
* RootDirectory = Where the object should be placed or NULL
* SecurityDescriptor = Ignored
*/
#define InitializeObjectAttributes(p,n,a,r,s) \
{ \
(p)->Length = sizeof(OBJECT_ATTRIBUTES); \
@ -180,53 +179,248 @@ extern BOOLEAN NLS_MB_OEM_CODE_PAGE_TAG;
(p)->SecurityQualityOfService = NULL; \
}
VOID
InitializeListHead (
PLIST_ENTRY ListHead
);
VOID
InsertHeadList (
PLIST_ENTRY ListHead,
PLIST_ENTRY Entry
);
/*
* VOID
* InitializeListHead (
* PLIST_ENTRY ListHead
* );
*
* FUNCTION: Initializes a double linked list
* ARGUMENTS:
* ListHead = Caller supplied storage for the head of the list
*/
#define InitializeListHead(ListHead) \
{ \
(ListHead)->Flink = (ListHead); \
(ListHead)->Blink = (ListHead); \
}
VOID
InsertTailList (
PLIST_ENTRY ListHead,
PLIST_ENTRY Entry
);
BOOLEAN
IsListEmpty (
PLIST_ENTRY ListHead
);
/*
* VOID
* InsertHeadList (
* PLIST_ENTRY ListHead,
* PLIST_ENTRY Entry
* );
*
* FUNCTION: Inserts an entry in a double linked list
* ARGUMENTS:
* ListHead = Head of the list
* Entry = Entry to insert
*/
#define InsertHeadList(ListHead, ListEntry) \
{ \
PLIST_ENTRY OldFlink; \
OldFlink = (ListHead)->Flink; \
(ListEntry)->Flink = OldFlink; \
(ListEntry)->Blink = (ListHead); \
OldFlink->Blink = (ListEntry); \
(ListHead)->Flink = (ListEntry); \
assert((ListEntry) != NULL); \
assert((ListEntry)->Blink!=NULL); \
assert((ListEntry)->Blink->Flink == (ListEntry)); \
assert((ListEntry)->Flink != NULL); \
assert((ListEntry)->Flink->Blink == (ListEntry)); \
}
/*
* VOID
* InsertTailList (
* PLIST_ENTRY ListHead,
* PLIST_ENTRY Entry
* );
*
* FUNCTION: Inserts an entry in a double linked list
* ARGUMENTS:
* ListHead = Head of the list
* Entry = Entry to insert
*/
#define InsertTailList(ListHead, ListEntry) \
{ \
PLIST_ENTRY OldBlink; \
OldBlink = (ListHead)->Blink; \
(ListEntry)->Flink = (ListHead); \
(ListEntry)->Blink = OldBlink; \
OldBlink->Flink = (ListEntry); \
(ListHead)->Blink = (ListEntry); \
assert((ListEntry) != NULL); \
assert((ListEntry)->Blink!=NULL); \
assert((ListEntry)->Blink->Flink == (ListEntry)); \
assert((ListEntry)->Flink != NULL); \
assert((ListEntry)->Flink->Blink == (ListEntry)); \
}
/*
* BOOLEAN
* IsListEmpty (
* PLIST_ENTRY ListHead
* );
*
* FUNCTION:
* Checks if a double linked list is empty
*
* ARGUMENTS:
* ListHead = Head of the list
*/
#define IsListEmpty(ListHead) \
((ListHead)->Flink == (ListHead))
PSINGLE_LIST_ENTRY
PopEntryList (
PSINGLE_LIST_ENTRY ListHead
);
/*
#define PopEntryList(ListHead) \
(ListHead)->Next; \
{ \
PSINGLE_LIST_ENTRY FirstEntry; \
FirstEntry = (ListHead)->Next; \
if (FirstEntry != NULL) \
{ \
(ListHead)->Next = FirstEntry->Next; \
} \
}
*/
VOID
PushEntryList (
PSINGLE_LIST_ENTRY ListHead,
PSINGLE_LIST_ENTRY Entry
);
/*
#define PushEntryList(ListHead,Entry) \
(Entry)->Next = (ListHead)->Next; \
(ListHead)->Next = (Entry)
*/
VOID
RemoveEntryList (
PLIST_ENTRY Entry
);
/*
*VOID
*RemoveEntryList (
* PLIST_ENTRY Entry
* );
*
* FUNCTION:
* Removes an entry from a double linked list
*
* ARGUMENTS:
* ListEntry = Entry to remove
*/
#define RemoveEntryList(ListEntry) \
{ \
PLIST_ENTRY OldFlink; \
PLIST_ENTRY OldBlink; \
assert((ListEntry) != NULL); \
assert((ListEntry)->Blink!=NULL); \
assert((ListEntry)->Blink->Flink == (ListEntry)); \
assert((ListEntry)->Flink != NULL); \
assert((ListEntry)->Flink->Blink == (ListEntry)); \
OldFlink = (ListEntry)->Flink; \
OldBlink = (ListEntry)->Blink; \
OldFlink->Blink = OldBlink; \
OldBlink->Flink = OldFlink; \
}
/*
* PLIST_ENTRY
* RemoveHeadList (
* PLIST_ENTRY ListHead
* );
*
* FUNCTION:
* Removes the head entry from a double linked list
*
* ARGUMENTS:
* ListHead = Head of the list
*
* RETURNS:
* The removed entry
*/
/*
#define RemoveHeadList(ListHead) \
(ListHead)->Flink; \
{RemoveEntryList((ListHead)->Flink)}
*/
/*
PLIST_ENTRY
RemoveHeadList (
PLIST_ENTRY ListHead
);
*/
static
inline
PLIST_ENTRY
RemoveHeadList (
PLIST_ENTRY ListHead
)
{
PLIST_ENTRY Old;
PLIST_ENTRY OldFlink;
PLIST_ENTRY OldBlink;
Old = ListHead->Flink;
OldFlink = ListHead->Flink->Flink;
OldBlink = ListHead->Flink->Blink;
OldFlink->Blink = OldBlink;
OldBlink->Flink = OldFlink;
return(Old);
}
/*
* PLIST_ENTRY
* RemoveTailList (
* PLIST_ENTRY ListHead
* );
*
* FUNCTION:
* Removes the tail entry from a double linked list
*
* ARGUMENTS:
* ListHead = Head of the list
* RETURNS:
* The removed entry
*/
/*
#define RemoveTailList(ListHead) \
(ListHead)->Blink; \
{RemoveEntryList((ListHead)->Blink)}
*/
/*
PLIST_ENTRY
RemoveTailList (
PLIST_ENTRY ListHead
);
*/
static
inline
PLIST_ENTRY
RemoveTailList (
PLIST_ENTRY ListHead
)
{
PLIST_ENTRY Old;
PLIST_ENTRY OldFlink;
PLIST_ENTRY OldBlink;
Old = ListHead->Blink;
OldFlink = ListHead->Blink->Flink;
OldBlink = ListHead->Blink->Blink;
OldFlink->Blink = OldBlink;
OldBlink->Flink = OldFlink;
return(Old);
}
PVOID
STDCALL

View file

@ -1,4 +1,4 @@
; $Id: ntoskrnl.def,v 1.75 2000/06/12 14:53:09 ekohl Exp $
; $Id: ntoskrnl.def,v 1.76 2000/06/18 15:21:18 ekohl Exp $
;
; reactos/ntoskrnl/ntoskrnl.def
;
@ -1014,12 +1014,7 @@ wctomb
;
; ReactOS Extensions (these should be macros!)
;
;IoInitializeDpcRequest
;IoRequestDpc
MmGetSystemAddressForMdl
InitializeListHead
InsertTailList
RemoveEntryList
;
;
; exports from hal.dll

View file

@ -1,4 +1,4 @@
; $Id: ntoskrnl.edf,v 1.62 2000/06/12 14:53:09 ekohl Exp $
; $Id: ntoskrnl.edf,v 1.63 2000/06/18 15:21:18 ekohl Exp $
;
; reactos/ntoskrnl/ntoskrnl.def
;
@ -947,12 +947,7 @@ wctomb
;
; ReactOS Extensions
;
;IoInitializeDpcRequest
;IoRequestDpc
MmGetSystemAddressForMdl
InitializeListHead
InsertTailList
RemoveEntryList
;
;
; exports from hal.dll

View file

@ -1,4 +1,4 @@
/* $Id: list.c,v 1.6 2000/06/07 13:05:09 ekohl Exp $
/* $Id: list.c,v 1.7 2000/06/18 15:21:53 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -16,6 +16,7 @@
/* FUNCTIONS *************************************************************/
#if 0
static BOOLEAN CheckEntry(PLIST_ENTRY ListEntry)
{
assert(ListEntry!=NULL);
@ -26,36 +27,6 @@ static BOOLEAN CheckEntry(PLIST_ENTRY ListEntry)
return(TRUE);
}
BOOLEAN IsListEmpty(PLIST_ENTRY ListHead)
/*
* FUNCTION: Determines if a list is empty
* ARGUMENTS:
* ListHead = Head of the list
* RETURNS: True if there are no entries in the list
*/
{
return(ListHead->Flink==ListHead);
}
VOID RemoveEntryList(PLIST_ENTRY ListEntry)
{
PLIST_ENTRY OldFlink;
PLIST_ENTRY OldBlink;
DPRINT("RemoveEntryList(ListEntry %x)\n", ListEntry);
assert(CheckEntry(ListEntry));
OldFlink=ListEntry->Flink;
OldBlink=ListEntry->Blink;
OldFlink->Blink=OldBlink;
OldBlink->Flink=OldFlink;
DPRINT("RemoveEntryList()\n");
}
PLIST_ENTRY RemoveTailList(PLIST_ENTRY ListHead)
/*
* FUNCTION: Remove the tail entry from a double linked list
@ -70,60 +41,22 @@ PLIST_ENTRY RemoveTailList(PLIST_ENTRY ListHead)
}
PLIST_ENTRY RemoveHeadList(PLIST_ENTRY ListHead)
{
{
PLIST_ENTRY Old;
DPRINT("RemoveHeadList(ListHead %x)\n",ListHead);
assert(CheckEntry(ListHead));
Old = ListHead->Flink;
RemoveEntryList(ListHead->Flink);
DPRINT("RemoveHeadList()\n");
return(Old);
}
#endif
VOID InitializeListHead(PLIST_ENTRY ListHead)
/*
* FUNCTION: Initializes a double linked list
* ARGUMENTS:
* ListHead = Caller supplied storage for the head of the list
*/
{
ListHead->Flink = ListHead->Blink = ListHead;
}
VOID InsertTailList(PLIST_ENTRY ListHead, PLIST_ENTRY ListEntry)
/*
* FUNCTION: Inserts an entry in a double linked list
* ARGUMENTS:
* ListHead = Head of the list
* Entry = Entry to insert
*/
{
PLIST_ENTRY Blink;
Blink = ListHead->Blink;
ListEntry->Flink=ListHead;
ListEntry->Blink=Blink;
Blink->Flink=ListEntry;
ListHead->Blink=ListEntry;
assert(CheckEntry(ListEntry));
}
VOID InsertHeadList(PLIST_ENTRY ListHead, PLIST_ENTRY ListEntry)
{
PLIST_ENTRY OldFlink;
OldFlink = ListHead->Flink;
ListEntry->Flink = OldFlink;
ListEntry->Blink = ListHead;
OldFlink->Blink = ListEntry;
ListHead->Flink = ListEntry;
assert( CheckEntry( ListEntry ) );
}
PLIST_ENTRY
STDCALL
@ -142,12 +75,12 @@ ExInterlockedInsertTailList (
Old = NULL;
}
else
{
{
Old = ListHead->Blink;
}
InsertTailList(ListHead,ListEntry);
KeReleaseSpinLock(Lock,oldlvl);
return(Old);
}
@ -166,7 +99,7 @@ ExInterlockedInsertHeadList (
* Lock = Caller supplied spinlock used to synchronise access
* RETURNS: The previous head of the list
*/
{
{
PLIST_ENTRY Old;
KIRQL oldlvl;
@ -181,7 +114,7 @@ ExInterlockedInsertHeadList (
}
InsertHeadList(ListHead,ListEntry);
KeReleaseSpinLock(Lock,oldlvl);
return(Old);
}
@ -202,7 +135,7 @@ ExInterlockedRemoveHeadList (
{
PLIST_ENTRY ret;
KIRQL oldlvl;
KeAcquireSpinLock(Lock,&oldlvl);
if (IsListEmpty(Head))
{
@ -216,8 +149,11 @@ ExInterlockedRemoveHeadList (
return(ret);
}
PLIST_ENTRY ExInterlockedRemoveTailList(PLIST_ENTRY Head,
PKSPIN_LOCK Lock)
PLIST_ENTRY
ExInterlockedRemoveTailList (
PLIST_ENTRY Head,
PKSPIN_LOCK Lock
)
/*
* FUNCTION: Removes the tail of a double linked list
* ARGUMENTS:
@ -228,7 +164,7 @@ PLIST_ENTRY ExInterlockedRemoveTailList(PLIST_ENTRY Head,
{
PLIST_ENTRY ret;
KIRQL oldlvl;
KeAcquireSpinLock(Lock,&oldlvl);
if (IsListEmpty(Head))
{