1 |
|
---|
2 | /***********************************************************************
|
---|
3 |
|
---|
4 | $Id: $
|
---|
5 |
|
---|
6 | Linked list utilities
|
---|
7 |
|
---|
8 | Copyright (c) 2015 Steven H. Levine
|
---|
9 |
|
---|
10 | 07 Aug 15 SHL Baseline
|
---|
11 |
|
---|
12 | ***********************************************************************/
|
---|
13 |
|
---|
14 | #if !defined(LISTUTIL_H)
|
---|
15 | #define LISTUTIL_H
|
---|
16 |
|
---|
17 | // Singly linked list
|
---|
18 | typedef struct LISTHEADER {
|
---|
19 | struct LIST *first; // First item in list
|
---|
20 | } LISTHEADER;
|
---|
21 | typedef LISTHEADER *PLISTHEADER;
|
---|
22 |
|
---|
23 | typedef struct LIST {
|
---|
24 | struct LIST *next; // Next item in list
|
---|
25 | } LIST;
|
---|
26 | typedef LIST *PLIST;
|
---|
27 |
|
---|
28 | // Doubly linked list
|
---|
29 | typedef struct LIST2HEADER {
|
---|
30 | struct LIST2 *first; // First item in list
|
---|
31 | struct LIST2 *last; // Last item in list
|
---|
32 | } LIST2HEADER;
|
---|
33 | typedef LIST2HEADER *PLIST2HEADER;
|
---|
34 |
|
---|
35 | typedef struct LIST2 {
|
---|
36 | struct LIST2 *next; // Next item in list
|
---|
37 | struct LIST2 *prev; // Previoius item in list
|
---|
38 | } LIST2;
|
---|
39 | typedef LIST2 *PLIST2;
|
---|
40 |
|
---|
41 | VOID ListAppend(PLISTHEADER header, PLIST item);
|
---|
42 | VOID ListDelete(PLIST header, PLIST item);
|
---|
43 | PLIST ListDeleteFirst(PLISTHEADER *header);
|
---|
44 | PLIST ListGetFirst(PLISTHEADER header);
|
---|
45 | typedef BOOL LISTMATCH(PLIST item, PVOID pdata); // For ListSearch
|
---|
46 | typedef LISTMATCH *PLISTMATCH;
|
---|
47 | PLIST ListSearch(PLISTHEADER header, PLISTMATCH matchFunc);
|
---|
48 |
|
---|
49 | VOID List2Append(PLIST2HEADER header, PLIST2 item);
|
---|
50 | VOID List2Delete(PLIST2HEADER header, PLIST2 item);
|
---|
51 | PLIST2 List2DeleteFirst(PLIST2HEADER header);
|
---|
52 | PLIST2 List2GetFirst(PLIST2HEADER header);
|
---|
53 | typedef BOOL LIST2MATCH(PLIST2 item, PVOID data); // For List2Search
|
---|
54 | typedef LIST2MATCH *PLIST2MATCH;
|
---|
55 | PLIST2 List2Search(PLIST2HEADER header, PLIST2MATCH matchFunc, PVOID data);
|
---|
56 |
|
---|
57 | #endif // LISTUTIL_H
|
---|