-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathList.h
131 lines (104 loc) · 3.19 KB
/
List.h
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
* List.h - doubly linked list library header
*
* DESCRIPTION
* This header belongs to "List.c" and must be included by every module
* that uses doubly linked lists.
*
* COPYRIGHT
* You are free to use, copy or modify this software at your own risk.
*
* AUTHOR
* Cornelis van der Bent. Please let me know if you have comments or find
* flaws: [email protected]. Enjoy!
*
* MODIFICATION HISTORY
* 1999/04/12 vdbent Thorough test and debugging; beta release.
* 1998/12/18 vdbent Conception.
*/
#ifndef _LIST_H
#define _LIST_H
typedef struct _ListNode ListNode;
struct _ListNode
{
ListNode * pNext; /* next node ('down', 'after') */
ListNode * pPrev; /* next node ('up', 'before') */
void * pData; /* pointer to user data */
};
typedef struct _List List; /* doubly linked list */
struct _List
{
ListNode * pHead; /* pointer to dummy list head node */
ListNode * pNodeLast; /* pointer to last accessed node */
int count; /* number of user nodes in list */
};
extern
List * ListCreate(void);
extern
void ListDestroy(
List * pList); /* pointer to list */
extern
void ListDestroyData(
List * pList); /* pointer to list */
extern
void ListAddHead(
List * pList, /* pointer to list */
void * pData); /* data object value */
extern
void ListAddTail(
List * pList, /* pointer to list */
void * pData); /* data object value */
extern
void ListAddBefore(
List * pList, /* pointer to list */
void * pData); /* data object value */
extern
void ListAddAfter(
List * pList, /* pointer to list */
void * pData); /* data object value */
extern
void * ListRemoveHead(
List * pList); /* pointer to list */
extern
void * ListRemoveTail(
List * pList); /* pointer to list */
extern
void * ListRemove(
List * pList, /* pointer to list */
void * pData); /* data object value */
extern
void * ListRemoveLast(
List * pList); /* pointer to list */
extern
void * ListHead(
List * pList); /* pointer to list */
extern
void * ListTail(
List * pList); /* pointer to list */
extern
void * ListLast(
List * pList); /* pointer to list */
extern
void * ListNext(
List * pList); /* pointer to list */
extern
void * ListPrev(
List * pList); /* pointer to list */
extern
int ListCount(
List * pList); /* pointer to list */
extern
void * ListFind(
List * pList, /* pointer to list */
void * pData); /* data object value */
extern
List * ListSplitBefore(
List * pListOrg); /* pointer to original list */
extern
List * ListSplitAfter(
List * pListOrg); /* pointer to original list */
extern
List * ListConcat(
List * pListDst, /* pointer to destination list */
List * pListAdd); /* pointer to list to be added at tail */
#endif /* _LIST_H */