Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/***************************************************************************
Copyright (c) 1999 Microsoft Corporation
Module Name:
QUEUE.H
Abstract:
Queueing routines used for lists of transmit, receive, and request "frames"
Environment:
kernel mode only
Notes:
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
Copyright (c) 1999 Microsoft Corporation. All Rights Reserved.
Revision History:
5/20/99 : created
Author:
Tom Green
****************************************************************************/
#ifndef _QUEUE_H_
#define _QUEUE_H_
// QueueInitList - Macro which will initialize a queue to NULL
#define QueueInitList(_L) (_L)->Link.Flink = (_L)->Link.Blink = (PLIST_ENTRY)NULL;
// QueueEmpty - Macro which checks to see if a queue is empty
#define QueueEmpty(_L) (QueueGetHead((_L)) == (PRNDISMP_LIST_ENTRY) NULL)
// QueueGetHead - Macro which returns the head of the queue, but does not
// remove the head from the queue
#define QueueGetHead(_L) ((PRNDISMP_LIST_ENTRY)((_L)->Link.Flink))
// QueuePushHead - Macro which puts an element at the head of the queue
#define QueuePushHead(_L, _E) \
{ \ ASSERT(_L); \ ASSERT(_E); \ if(!((_E)->Link.Flink = (_L)->Link.Flink)) \ { \ (_L)->Link.Blink = (PLIST_ENTRY)(_E); \ } \ (_L)->Link.Flink = (PLIST_ENTRY)(_E); \ }
// QueueRemoveHead - Macro which removes the head of queue
#define QueueRemoveHead(_L) \
{ \ PRNDISMP_LIST_ENTRY ListElem; \ ASSERT((_L)); \ if(ListElem = (PRNDISMP_LIST_ENTRY)(_L)->Link.Flink) \ { \ if(!((_L)->Link.Flink = ListElem->Link.Flink)) \ (_L)->Link.Blink = (PLIST_ENTRY) NULL; \ } \ }
// QueuePutTail - Macro which puts an element at the tail (end) of the queue
#define QueuePutTail(_L, _E) \
{ \ ASSERT(_L); \ ASSERT(_E); \ if((_L)->Link.Blink) \ { \ ((PRNDISMP_LIST_ENTRY) \ (_L)->Link.Blink)->Link.Flink = \ (PLIST_ENTRY)(_E); \ (_L)->Link.Blink = (PLIST_ENTRY)(_E); \ } \ else \ { \ (_L)->Link.Flink = \ (_L)->Link.Blink = (PLIST_ENTRY)(_E); \ } \ (_E)->Link.Flink = (PLIST_ENTRY) NULL; \ }
// QueueGetTail - Macro which returns the tail of the queue, but
// does not remove the tail from the queue
#define QueueGetTail(_L) ((PRNDISMP_LIST_ENTRY)((_L)->Link.Blink))
// QueuePopHead -- Macro which will pop the head off of a queue (list), and
// return it (this differs only from queueremovehead only in the 1st line)
#define QueuePopHead(_L) \
(PRNDISMP_LIST_ENTRY) (_L)->Link.Flink; QueueRemoveHead(_L);
#endif // _QUEUE_H_
|