-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadlist.h
57 lines (47 loc) · 1.34 KB
/
adlist.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
#ifndef __ADLIST_H
#define __ADLIST_H
typedef struct listNode
{
struct listNode *prev;
struct listNode *next;
void *data;
} listNode;
typedef struct listIter
{
listNode *next;
int direction;
} listIter;
typedef struct list
{
listNode *head;
listNode *tail;
unsigned long len;
void *(*dup)(void *ptr);
void (*free)(void *ptr);
void (*match)(void *ptr, void *key);
} list;
#define listLength(l) ((l)->len)
#define listFirst(l) ((l)->head)
#define listLast(l) ((l)->tail)
#define listPrevNode(n) ((n)->prev)
#define listNextNode(n) ((n)->next)
#define listNodeValue(n) ((n)->value)
#define listGetDupMethod(l) ((l)->dup)
#define listGetFree(l) ((l)->free)
#define listGetMatchMethod(l) ((l)->match)
list *listCreate(void);
void listRelease(list *list);
list *listAddNodeHead(list *list, void *value);
list *listAddNodeTail(list *list, void *value);
list *listInsertNode(list *list, listNode *old_node, void *value, int after);
list *listDelNode(list *list, listNode *node);
listIter *listGetIterator(list *list, int direction);
void listReleaseIterator(listIter *iter);
void listRewind(list *list, listIter *iter);
void listRewindTail(list *list, listIter *iter);
listIter *listNext(listIter *iter);
list *listDup(list *list);
list *listSearchKey(list *list, void *key);
#define AL_START_HEAD 0
#define AL_START_TAIL 1
#endif