4223
|
1 #ifndef LIST_H_
|
|
2 #define LIST_H_
|
|
3
|
|
4 #include "config.h"
|
|
5
|
|
6 #include <stddef.h>
|
|
7
|
|
8 struct li_whale {
|
|
9 struct val **field;
|
|
10 size_t length, size;
|
|
11 size_t refs;
|
|
12 };
|
|
13
|
|
14 struct list {
|
|
15 struct li_whale *lwp;
|
|
16 size_t offset, length;
|
|
17 };
|
|
18
|
|
19 struct list *li_new(void);
|
|
20 struct list *li_dup(const struct list *);
|
|
21 void li_decouple(struct list *);
|
|
22 void li_delete(struct list *);
|
|
23
|
|
24 ATTR_PURE
|
|
25 size_t li_length(const struct list *);
|
|
26 ATTR_PURE
|
|
27 struct val *li_at(const struct list *, size_t);
|
|
28 ATTR_PURE
|
|
29 int li_cmp(const struct list *, const struct list *);
|
|
30
|
|
31 void li_zero(struct list *);
|
|
32 void li_push(struct list *, struct val *);
|
|
33 void li_push_cpy(struct list *, const struct val *);
|
|
34 void li_append(struct list *, const struct list *);
|
|
35 void li_reverse(struct list *);
|
|
36 void li_trunc(struct list *, size_t);
|
|
37 void li_shift(struct list *, size_t);
|
|
38
|
|
39 #define li_length(l) ((l)->length + 0)
|
|
40 #define li_zero(l) ((void)(l->offset = l->length = 0))
|
|
41
|
|
42 #endif /* LIST_H_ */
|