summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2024-02-20 05:18:03 +0100
committerGravatar default2024-02-20 05:18:03 +0100
commit75e1f939d0e1a0f01f6eef561c02d1bef208f03d (patch)
tree082d326bc0af2b27987f0b5e0692479af65116f3
parentUpdated documentation. (diff)
downloadsnac2-75e1f939d0e1a0f01f6eef561c02d1bef208f03d.tar.gz
snac2-75e1f939d0e1a0f01f6eef561c02d1bef208f03d.tar.xz
snac2-75e1f939d0e1a0f01f6eef561c02d1bef208f03d.zip
Backport from xs.
-rw-r--r--xs.h28
-rw-r--r--xs_version.h2
2 files changed, 24 insertions, 6 deletions
diff --git a/xs.h b/xs.h
index fb766ef..b0f13c7 100644
--- a/xs.h
+++ b/xs.h
@@ -86,7 +86,8 @@ xs_str *xs_tolower_i(xs_str *str);
86 86
87xs_list *xs_list_new(void); 87xs_list *xs_list_new(void);
88xs_list *xs_list_append_m(xs_list *list, const char *mem, int dsz); 88xs_list *xs_list_append_m(xs_list *list, const char *mem, int dsz);
89#define xs_list_append(list, data) xs_list_append_m(list, data, xs_size(data)) 89xs_list *_xs_list_append(xs_list *list, const xs_val *vals[]);
90#define xs_list_append(list, ...) _xs_list_append(list, (const xs_val *[]){ __VA_ARGS__, NULL })
90int xs_list_iter(xs_list **list, xs_val **value); 91int xs_list_iter(xs_list **list, xs_val **value);
91int xs_list_len(const xs_list *list); 92int xs_list_len(const xs_list *list);
92xs_val *xs_list_get(const xs_list *list, int num); 93xs_val *xs_list_get(const xs_list *list, int num);
@@ -108,7 +109,8 @@ xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, i
108xs_dict *xs_dict_prepend_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz); 109xs_dict *xs_dict_prepend_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz);
109#define xs_dict_prepend(dict, key, data) xs_dict_prepend_m(dict, key, data, xs_size(data)) 110#define xs_dict_prepend(dict, key, data) xs_dict_prepend_m(dict, key, data, xs_size(data))
110int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value); 111int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value);
111xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key); 112xs_val *xs_dict_get_def(const xs_dict *dict, const xs_str *key, const xs_val *def);
113#define xs_dict_get(dict, key) xs_dict_get_def(dict, key, NULL)
112xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); 114xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key);
113xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data); 115xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data);
114 116
@@ -677,6 +679,22 @@ xs_list *xs_list_append_m(xs_list *list, const char *mem, int dsz)
677} 679}
678 680
679 681
682xs_list *_xs_list_append(xs_list *list, const xs_val *vals[])
683/* adds several values to the list */
684{
685 /* special case: if the first argument is NULL, just insert it */
686 if (*vals == NULL)
687 return xs_list_append_m(list, NULL, 0);
688
689 while (*vals) {
690 list = xs_list_append_m(list, *vals, xs_size(*vals));
691 vals++;
692 }
693
694 return list;
695}
696
697
680int xs_list_iter(xs_list **list, xs_val **value) 698int xs_list_iter(xs_list **list, xs_val **value)
681/* iterates a list value */ 699/* iterates a list value */
682{ 700{
@@ -1004,8 +1022,8 @@ int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value)
1004} 1022}
1005 1023
1006 1024
1007xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key) 1025xs_val *xs_dict_get_def(const xs_dict *dict, const xs_str *key, const xs_val *def)
1008/* returns the value directed by key */ 1026/* returns the value directed by key, or the default value */
1009{ 1027{
1010 XS_ASSERT_TYPE(dict, XSTYPE_DICT); 1028 XS_ASSERT_TYPE(dict, XSTYPE_DICT);
1011 XS_ASSERT_TYPE(key, XSTYPE_STRING); 1029 XS_ASSERT_TYPE(key, XSTYPE_STRING);
@@ -1019,7 +1037,7 @@ xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key)
1019 return v; 1037 return v;
1020 } 1038 }
1021 1039
1022 return NULL; 1040 return (xs_val *)def;
1023} 1041}
1024 1042
1025 1043
diff --git a/xs_version.h b/xs_version.h
index 781e4ba..c49d866 100644
--- a/xs_version.h
+++ b/xs_version.h
@@ -1 +1 @@
/* e277e59e0ccbe2111aaf884c85ccadeebabd5281 2024-01-30T13:56:36+01:00 */ /* 98305e8badd7ed505bb6e667c202bad63e4e79ef 2024-02-20T05:16:49+01:00 */