summaryrefslogtreecommitdiff
path: root/src/list.c
blob: dd3a199d4e2f48c0e970136cf176c7b7e7e26872 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*++

Copyright (c) Scott Gasch

Module Name:

    list.c

Abstract:

    Random doubly linked list helper routines.

Author:

    Scott Gasch ([email protected]) 29 Nov 2007

Revision History:

--*/

#include "chess.h"

INLINE void
InitializeListHead(IN DLIST_ENTRY *pListHead)
{
    pListHead->pFlink = pListHead->pBlink = pListHead;
}

INLINE FLAG
IsListEmpty(IN DLIST_ENTRY *pListHead)
{
    return (FLAG)(pListHead->pFlink == pListHead);
}

INLINE FLAG
RemoveEntryList(IN DLIST_ENTRY *pEntry)
{
    DLIST_ENTRY *pBlink;
    DLIST_ENTRY *pFlink;

    pFlink = pEntry->pFlink;
    pBlink = pEntry->pBlink;
    pBlink->pFlink = pFlink;
    pFlink->pBlink = pBlink;
    return (FLAG)(pFlink == pBlink);
}

INLINE DLIST_ENTRY *
RemoveHeadList(IN DLIST_ENTRY *pListHead)
{
    DLIST_ENTRY *pFlink;
    DLIST_ENTRY *pEntry;

    pEntry = pListHead->pFlink;
    pFlink = pEntry->pFlink;
    pListHead->pFlink = pFlink;
    pFlink->pBlink = pListHead;

    return(pEntry);
}

INLINE DLIST_ENTRY *
RemoveTailList(IN DLIST_ENTRY *pListHead)
{
    DLIST_ENTRY *pBlink;
    DLIST_ENTRY *pEntry;

    pEntry = pListHead->pBlink;
    pBlink = pEntry->pBlink;
    pListHead->pBlink = pBlink;
    pBlink->pFlink = pListHead;

    return(pEntry);
}

INLINE void
InsertTailList(IN DLIST_ENTRY *pListHead,
               IN DLIST_ENTRY *pEntry)
{
    DLIST_ENTRY *pBlink;

    pBlink = pListHead->pBlink;
    pEntry->pFlink = pListHead;
    pEntry->pBlink = pBlink;
    pBlink->pFlink = pEntry;
    pListHead->pBlink = pEntry;
}

INLINE void
InsertHeadList(IN DLIST_ENTRY *pListHead,
               IN DLIST_ENTRY *pEntry)
{
    DLIST_ENTRY *pFlink;

    pFlink = pListHead->pFlink;
    pEntry->pFlink = pFlink;
    pEntry->pBlink = pListHead;
    pFlink->pBlink = pEntry;
    pListHead->pFlink = pEntry;
}