forked from rui314/8cc
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlist.h
46 lines (38 loc) · 1.18 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
// Copyright 2012 Rui Ueyama <[email protected]>
// This program is free software licensed under the MIT license.
#ifndef EIGHTCC_LIST_H
#define EIGHTCC_LIST_H
#include <stdbool.h>
typedef struct ListNode {
void *elem;
struct ListNode *next;
struct ListNode *prev;
} ListNode;
typedef struct List {
int len;
ListNode *head;
ListNode *tail;
} List;
typedef struct Iter {
ListNode *ptr;
} Iter;
#define EMPTY_LIST \
((List){ .len = 0, .head = NULL, .tail = NULL })
extern List *make_list(void);
extern List *make_list1(void *e);
extern List *list_copy(List *list);
extern void list_push(List *list, void *elem);
extern void *list_pop(List *list);
extern void list_append(List *a, List *b);
extern void *list_shift(List *list);
extern void list_unshift(List *list, void *elem);
extern void *list_get(List *list, int index);
extern void *list_head(List *list);
extern void *list_tail(List *list);
extern List *list_reverse(List *list);
extern void list_clear(List *list);
extern int list_len(List *list);
extern Iter *list_iter(List *list);
extern void *iter_next(Iter *iter);
extern bool iter_end(Iter *iter);
#endif /* EIGHTCC_LIST_H */