diff options
| author | 2024-02-20 05:18:03 +0100 | |
|---|---|---|
| committer | 2024-02-20 05:18:03 +0100 | |
| commit | 75e1f939d0e1a0f01f6eef561c02d1bef208f03d (patch) | |
| tree | 082d326bc0af2b27987f0b5e0692479af65116f3 /xs.h | |
| parent | Updated documentation. (diff) | |
| download | snac2-75e1f939d0e1a0f01f6eef561c02d1bef208f03d.tar.gz snac2-75e1f939d0e1a0f01f6eef561c02d1bef208f03d.tar.xz snac2-75e1f939d0e1a0f01f6eef561c02d1bef208f03d.zip | |
Backport from xs.
Diffstat (limited to 'xs.h')
| -rw-r--r-- | xs.h | 28 |
1 files changed, 23 insertions, 5 deletions
| @@ -86,7 +86,8 @@ xs_str *xs_tolower_i(xs_str *str); | |||
| 86 | 86 | ||
| 87 | xs_list *xs_list_new(void); | 87 | xs_list *xs_list_new(void); |
| 88 | xs_list *xs_list_append_m(xs_list *list, const char *mem, int dsz); | 88 | xs_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)) | 89 | xs_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 }) | ||
| 90 | int xs_list_iter(xs_list **list, xs_val **value); | 91 | int xs_list_iter(xs_list **list, xs_val **value); |
| 91 | int xs_list_len(const xs_list *list); | 92 | int xs_list_len(const xs_list *list); |
| 92 | xs_val *xs_list_get(const xs_list *list, int num); | 93 | xs_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 | |||
| 108 | xs_dict *xs_dict_prepend_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz); | 109 | xs_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)) |
| 110 | int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value); | 111 | int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value); |
| 111 | xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key); | 112 | xs_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) | ||
| 112 | xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); | 114 | xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); |
| 113 | xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data); | 115 | xs_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 | ||
| 682 | xs_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 | |||
| 680 | int xs_list_iter(xs_list **list, xs_val **value) | 698 | int 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 | ||
| 1007 | xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key) | 1025 | xs_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 | ||