Rizin
unix-like reverse engineering framework and cli tools
ql.h
Go to the documentation of this file.
1
/* List definitions. */
2
#define ql_head(a_type) \
3
struct { \
4
a_type *qlh_first; \
5
}
6
7
#define ql_head_initializer(a_head) {NULL}
8
9
#define ql_elm(a_type) qr(a_type)
10
11
/* List functions. */
12
#define ql_new(a_head) do { \
13
(a_head)->qlh_first = NULL; \
14
} while (0)
15
16
#define ql_elm_new(a_elm, a_field) qr_new((a_elm), a_field)
17
18
#define ql_first(a_head) ((a_head)->qlh_first)
19
20
#define ql_last(a_head, a_field) \
21
((ql_first(a_head) != NULL) \
22
? qr_prev(ql_first(a_head), a_field) : NULL)
23
24
#define ql_next(a_head, a_elm, a_field) \
25
((ql_last(a_head, a_field) != (a_elm)) \
26
? qr_next((a_elm), a_field) : NULL)
27
28
#define ql_prev(a_head, a_elm, a_field) \
29
((ql_first(a_head) != (a_elm)) ? qr_prev((a_elm), a_field) \
30
: NULL)
31
32
#define ql_before_insert(a_head, a_qlelm, a_elm, a_field) do { \
33
qr_before_insert((a_qlelm), (a_elm), a_field); \
34
if (ql_first(a_head) == (a_qlelm)) { \
35
ql_first(a_head) = (a_elm); \
36
} \
37
} while (0)
38
39
#define ql_after_insert(a_qlelm, a_elm, a_field) \
40
qr_after_insert((a_qlelm), (a_elm), a_field)
41
42
#define ql_head_insert(a_head, a_elm, a_field) do { \
43
if (ql_first(a_head) != NULL) { \
44
qr_before_insert(ql_first(a_head), (a_elm), a_field); \
45
} \
46
ql_first(a_head) = (a_elm); \
47
} while (0)
48
49
#define ql_tail_insert(a_head, a_elm, a_field) do { \
50
if (ql_first(a_head) != NULL) { \
51
qr_before_insert(ql_first(a_head), (a_elm), a_field); \
52
} \
53
ql_first(a_head) = qr_next((a_elm), a_field); \
54
} while (0)
55
56
#define ql_remove(a_head, a_elm, a_field) do { \
57
if (ql_first(a_head) == (a_elm)) { \
58
ql_first(a_head) = qr_next(ql_first(a_head), a_field); \
59
} \
60
if (ql_first(a_head) != (a_elm)) { \
61
qr_remove((a_elm), a_field); \
62
} else { \
63
ql_first(a_head) = NULL; \
64
} \
65
} while (0)
66
67
#define ql_head_remove(a_head, a_type, a_field) do { \
68
a_type *t = ql_first(a_head); \
69
ql_remove((a_head), t, a_field); \
70
} while (0)
71
72
#define ql_tail_remove(a_head, a_type, a_field) do { \
73
a_type *t = ql_last(a_head, a_field); \
74
ql_remove((a_head), t, a_field); \
75
} while (0)
76
77
#define ql_foreach(a_var, a_head, a_field) \
78
qr_foreach((a_var), ql_first(a_head), a_field)
79
80
#define ql_reverse_foreach(a_var, a_head, a_field) \
81
qr_reverse_foreach((a_var), ql_first(a_head), a_field)
subprojects
rzheap
rz_jemalloc
internal
ql.h
Generated by
1.9.1