⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linkedlist.h

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 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 + -