commit 75e1f93

default  ·  2024-02-20 04:18:03 +0000 UTC
parent d1ad664
Backport from xs.
2 files changed,  +24, -6
M xs.h
M xs.h
+23, -5
 1@@ -86,7 +86,8 @@ xs_str *xs_tolower_i(xs_str *str);
 2 
 3 xs_list *xs_list_new(void);
 4 xs_list *xs_list_append_m(xs_list *list, const char *mem, int dsz);
 5-#define xs_list_append(list, data) xs_list_append_m(list, data, xs_size(data))
 6+xs_list *_xs_list_append(xs_list *list, const xs_val *vals[]);
 7+#define xs_list_append(list, ...) _xs_list_append(list, (const xs_val *[]){ __VA_ARGS__, NULL })
 8 int xs_list_iter(xs_list **list, xs_val **value);
 9 int xs_list_len(const xs_list *list);
10 xs_val *xs_list_get(const xs_list *list, int num);
11@@ -108,7 +109,8 @@ xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, i
12 xs_dict *xs_dict_prepend_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz);
13 #define xs_dict_prepend(dict, key, data) xs_dict_prepend_m(dict, key, data, xs_size(data))
14 int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value);
15-xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key);
16+xs_val *xs_dict_get_def(const xs_dict *dict, const xs_str *key, const xs_val *def);
17+#define xs_dict_get(dict, key) xs_dict_get_def(dict, key, NULL)
18 xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key);
19 xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data);
20 
21@@ -677,6 +679,22 @@ xs_list *xs_list_append_m(xs_list *list, const char *mem, int dsz)
22 }
23 
24 
25+xs_list *_xs_list_append(xs_list *list, const xs_val *vals[])
26+/* adds several values to the list */
27+{
28+    /* special case: if the first argument is NULL, just insert it */
29+    if (*vals == NULL)
30+        return xs_list_append_m(list, NULL, 0);
31+
32+    while (*vals) {
33+        list = xs_list_append_m(list, *vals, xs_size(*vals));
34+        vals++;
35+    }
36+
37+    return list;
38+}
39+
40+
41 int xs_list_iter(xs_list **list, xs_val **value)
42 /* iterates a list value */
43 {
44@@ -1004,8 +1022,8 @@ int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value)
45 }
46 
47 
48-xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key)
49-/* returns the value directed by key */
50+xs_val *xs_dict_get_def(const xs_dict *dict, const xs_str *key, const xs_val *def)
51+/* returns the value directed by key, or the default value */
52 {
53     XS_ASSERT_TYPE(dict, XSTYPE_DICT);
54     XS_ASSERT_TYPE(key, XSTYPE_STRING);
55@@ -1019,7 +1037,7 @@ xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key)
56             return v;
57     }
58 
59-    return NULL;
60+    return (xs_val *)def;
61 }
62 
63 
+1, -1
1@@ -1 +1 @@
2-/* e277e59e0ccbe2111aaf884c85ccadeebabd5281 2024-01-30T13:56:36+01:00 */
3+/* 98305e8badd7ed505bb6e667c202bad63e4e79ef 2024-02-20T05:16:49+01:00 */