diff options
| author | 2023-02-16 09:32:42 +0100 | |
|---|---|---|
| committer | 2023-02-16 09:32:42 +0100 | |
| commit | 19ed90319b68bd6c56622dc7cd71c62ca3843dc5 (patch) | |
| tree | 6f396b58f8e4e981d97efd69ecbc732f8470b354 /xs.h | |
| parent | Rewritten text 'More...' as 'Load more...'. (diff) | |
| download | snac2-19ed90319b68bd6c56622dc7cd71c62ca3843dc5.tar.gz snac2-19ed90319b68bd6c56622dc7cd71c62ca3843dc5.tar.xz snac2-19ed90319b68bd6c56622dc7cd71c62ca3843dc5.zip | |
Backport from xs.
Diffstat (limited to 'xs.h')
| -rw-r--r-- | xs.h | 35 |
1 files changed, 26 insertions, 9 deletions
| @@ -97,6 +97,8 @@ xs_list *xs_split_n(const char *str, const char *sep, int times); | |||
| 97 | xs_dict *xs_dict_new(void); | 97 | xs_dict *xs_dict_new(void); |
| 98 | xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz); | 98 | xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz); |
| 99 | #define xs_dict_append(dict, key, data) xs_dict_append_m(dict, key, data, xs_size(data)) | 99 | #define xs_dict_append(dict, key, data) xs_dict_append_m(dict, key, data, xs_size(data)) |
| 100 | xs_dict *xs_dict_prepend_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz); | ||
| 101 | #define xs_dict_prepend(dict, key, data) xs_dict_prepend_m(dict, key, data, xs_size(data)) | ||
| 100 | int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value); | 102 | int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value); |
| 101 | xs_dict *xs_dict_get(const xs_dict *dict, const xs_str *key); | 103 | xs_dict *xs_dict_get(const xs_dict *dict, const xs_str *key); |
| 102 | xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); | 104 | xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); |
| @@ -859,24 +861,39 @@ xs_dict *xs_dict_new(void) | |||
| 859 | } | 861 | } |
| 860 | 862 | ||
| 861 | 863 | ||
| 862 | xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz) | 864 | xs_dict *xs_dict_insert_m(xs_dict *dict, int offset, const xs_str *key, |
| 863 | /* adds a memory block to the dict */ | 865 | const xs_val *data, int dsz) |
| 866 | /* inserts a memory block into the dict */ | ||
| 864 | { | 867 | { |
| 865 | XS_ASSERT_TYPE(dict, XSTYPE_DICT); | 868 | XS_ASSERT_TYPE(dict, XSTYPE_DICT); |
| 866 | XS_ASSERT_TYPE(key, XSTYPE_STRING); | 869 | XS_ASSERT_TYPE(key, XSTYPE_STRING); |
| 867 | 870 | ||
| 868 | char c = XSTYPE_DITEM; | ||
| 869 | int sz = xs_size(dict); | ||
| 870 | int ksz = xs_size(key); | 871 | int ksz = xs_size(key); |
| 871 | 872 | ||
| 872 | dict = xs_insert_m(dict, sz - 1, &c, 1); | 873 | dict = xs_expand(dict, offset, 1 + ksz + dsz); |
| 873 | dict = xs_insert_m(dict, sz, key, ksz); | 874 | |
| 874 | dict = xs_insert_m(dict, sz + ksz, mem, dsz); | 875 | dict[offset] = XSTYPE_DITEM; |
| 876 | memcpy(&dict[offset + 1], key, ksz); | ||
| 877 | memcpy(&dict[offset + 1 + ksz], data, dsz); | ||
| 875 | 878 | ||
| 876 | return dict; | 879 | return dict; |
| 877 | } | 880 | } |
| 878 | 881 | ||
| 879 | 882 | ||
| 883 | xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz) | ||
| 884 | /* appends a memory block to the dict */ | ||
| 885 | { | ||
| 886 | return xs_dict_insert_m(dict, xs_size(dict) - 1, key, mem, dsz); | ||
| 887 | } | ||
| 888 | |||
| 889 | |||
| 890 | xs_dict *xs_dict_prepend_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz) | ||
| 891 | /* prepends a memory block to the dict */ | ||
| 892 | { | ||
| 893 | return xs_dict_insert_m(dict, 4, key, mem, dsz); | ||
| 894 | } | ||
| 895 | |||
| 896 | |||
| 880 | int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value) | 897 | int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value) |
| 881 | /* iterates a dict value */ | 898 | /* iterates a dict value */ |
| 882 | { | 899 | { |
| @@ -962,8 +979,8 @@ xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data) | |||
| 962 | /* delete the possibly existing key */ | 979 | /* delete the possibly existing key */ |
| 963 | dict = xs_dict_del(dict, key); | 980 | dict = xs_dict_del(dict, key); |
| 964 | 981 | ||
| 965 | /* append the data */ | 982 | /* add the data */ |
| 966 | dict = xs_dict_append(dict, key, data); | 983 | dict = xs_dict_prepend(dict, key, data); |
| 967 | 984 | ||
| 968 | return dict; | 985 | return dict; |
| 969 | } | 986 | } |