[1856] | 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
|
---|