📄 linkedlist.h
字号:
////////////////////////////////////////////////////////////////////////////////
// File : gwcmdinfohash.c
//
// Copyright (C) 2002 PGP Corporation
//
// ABSTRACT
// doubly linked list macros copied from ntddk.h
//
// Author: Satya S. Das
////////////////////////////////////////////////////////////////////////////////
#ifndef _LINKEDLIST_H_
#define _LINKEDLIST_H_
////////////////////////////////////////////////////////////////////////
// Doubly linked list structure. Can be used as either a list head, or
// as link words. defined in winnt.h for us.
////////////////////////////////////////////////////////////////////////
//typedef struct _LIST_ENTRY {
// struct _LIST_ENTRY * volatile Flink;
// struct _LIST_ENTRY * volatile Blink;
//} LIST_ENTRY, *PLIST_ENTRY;
////////////////////////////////////////////////////////////////////////
// Doubly-linked list manipulation routines. Implemented as macros
// but logically these are procedures.
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// VOID
// InitializeListHead(
// PLIST_ENTRY ListHead
// );
////////////////////////////////////////////////////////////////////////
#define InitializeListHead(ListHead) (\
(ListHead)->Flink = (ListHead)->Blink = (ListHead))
////////////////////////////////////////////////////////////////////////
// BOOL
// IsListEmpty(
// PLIST_ENTRY ListHead
// );
////////////////////////////////////////////////////////////////////////
#define IsListEmpty(ListHead) \
((ListHead)->Flink == (ListHead))
////////////////////////////////////////////////////////////////////////
// PLIST_ENTRY
// RemoveHeadList(
// PLIST_ENTRY ListHead
// );
////////////////////////////////////////////////////////////////////////
#define RemoveHeadList(ListHead) \
(ListHead)->Flink;\
{RemoveEntryList((ListHead)->Flink)}
////////////////////////////////////////////////////////////////////////
// PLIST_ENTRY
// RemoveTailList(
// PLIST_ENTRY ListHead
// );
////////////////////////////////////////////////////////////////////////
#define RemoveTailList(ListHead) \
(ListHead)->Blink;\
{RemoveEntryList((ListHead)->Blink)}
////////////////////////////////////////////////////////////////////////
// VOID
// RemoveEntryList(
// PLIST_ENTRY Entry
// );
////////////////////////////////////////////////////////////////////////
#define RemoveEntryList(Entry) {\
PLIST_ENTRY _EX_Blink;\
PLIST_ENTRY _EX_Flink;\
_EX_Flink = (Entry)->Flink;\
_EX_Blink = (Entry)->Blink;\
_EX_Blink->Flink = _EX_Flink;\
_EX_Flink->Blink = _EX_Blink;\
}
////////////////////////////////////////////////////////////////////////
// VOID
// InsertTailList(
// PLIST_ENTRY ListHead,
// PLIST_ENTRY Entry
// );
////////////////////////////////////////////////////////////////////////
#define InsertTailList(ListHead,Entry) {\
PLIST_ENTRY _EX_Blink;\
PLIST_ENTRY _EX_ListHead;\
_EX_ListHead = (ListHead);\
_EX_Blink = _EX_ListHead->Blink;\
(Entry)->Flink = _EX_ListHead;\
(Entry)->Blink = _EX_Blink;\
_EX_Blink->Flink = (Entry);\
_EX_ListHead->Blink = (Entry);\
}
////////////////////////////////////////////////////////////////////////
// VOID
// InsertHeadList(
// PLIST_ENTRY ListHead,
// PLIST_ENTRY Entry
// );
////////////////////////////////////////////////////////////////////////
#define InsertHeadList(ListHead,Entry) {\
PLIST_ENTRY _EX_Flink;\
PLIST_ENTRY _EX_ListHead;\
_EX_ListHead = (ListHead);\
_EX_Flink = _EX_ListHead->Flink;\
(Entry)->Flink = _EX_Flink;\
(Entry)->Blink = _EX_ListHead;\
_EX_Flink->Blink = (Entry);\
_EX_ListHead->Flink = (Entry);\
}
#endif // _LINKEDLIST_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -