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 */