commit 4baf56c
default
·
2023-01-24 13:57:04 +0000 UTC
parent af604f9
Backport from xs.
2 files changed,
+14,
-6
M
xs.h
M
xs.h
+13,
-5
1@@ -76,7 +76,9 @@ d_char *xs_list_del(d_char *list, int num);
2 d_char *xs_list_insert(d_char *list, int num, const char *data);
3 d_char *xs_list_insert_sorted(d_char *list, const char *str);
4 d_char *xs_list_set(d_char *list, int num, const char *data);
5-d_char *xs_list_pop(d_char *list, char **data);
6+d_char *xs_list_dequeue(d_char *list, char **data, int last);
7+#define xs_list_pop(list, data) xs_list_dequeue(list, data, 1)
8+#define xs_list_shift(list, data) xs_list_dequeue(list, data, 0)
9 int xs_list_in(char *list, const char *val);
10 d_char *xs_join(char *list, const char *sep);
11 d_char *xs_split_n(const char *str, const char *sep, int times);
12@@ -665,13 +667,19 @@ d_char *xs_list_set(d_char *list, int num, const char *data)
13 }
14
15
16-d_char *xs_list_pop(d_char *list, char **data)
17-/* pops the last element from the list */
18+d_char *xs_list_dequeue(d_char *list, char **data, int last)
19+/* gets a copy of the first or last element of a list, shrinking it */
20 {
21 char *p = list, *v = NULL;
22
23- /* iterate to the end */
24- while (xs_list_iter(&p, &v));
25+ if (!last) {
26+ /* get the first */
27+ xs_list_iter(&p, &v);
28+ }
29+ else {
30+ /* iterate to the end */
31+ while (xs_list_iter(&p, &v));
32+ }
33
34 if (v != NULL) {
35 *data = xs_dup(v);
+1,
-1
1@@ -1 +1 @@
2-/* 366ce5817597e9f4d735bced6b8c40ecc897608e */
3+/* e8b70248081aa9086f64861bc85a67f390c41afb */