Add concat and split functionality to ql module

This commit is contained in:
Yinan Zhang
2020-04-01 17:02:37 -07:00
parent 1ad06aa53b
commit 0dc95a882f
2 changed files with 87 additions and 1 deletions

View File

@@ -58,6 +58,16 @@ struct { \
ql_first(a_head) = qr_next((a_elm), a_field); \
} while (0)
#define ql_concat(a_head_a, a_head_b, a_field) do { \
if (ql_first(a_head_a) == NULL) { \
ql_first(a_head_a) = ql_first(a_head_b); \
} else if (ql_first(a_head_b) != NULL) { \
qr_meld(ql_first(a_head_a), ql_first(a_head_b), \
a_field); \
} \
ql_first(a_head_b) = NULL; \
} while (0)
#define ql_remove(a_head, a_elm, a_field) do { \
if (ql_first(a_head) == (a_elm)) { \
ql_first(a_head) = qr_next(ql_first(a_head), a_field); \
@@ -79,6 +89,15 @@ struct { \
ql_remove((a_head), t, a_field); \
} while (0)
#define ql_split(a_head_a, a_elm, a_head_b, a_field) do { \
if (ql_first(a_head_a) == (a_elm)) { \
ql_first(a_head_a) = NULL; \
} else { \
qr_split(ql_first(a_head_a), (a_elm), a_field); \
} \
ql_first(a_head_b) = (a_elm); \
} while (0)
#define ql_foreach(a_var, a_head, a_field) \
qr_foreach((a_var), ql_first(a_head), a_field)