summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2023-02-16 09:32:42 +0100
committerGravatar default2023-02-16 09:32:42 +0100
commit19ed90319b68bd6c56622dc7cd71c62ca3843dc5 (patch)
tree6f396b58f8e4e981d97efd69ecbc732f8470b354
parentRewritten text 'More...' as 'Load more...'. (diff)
downloadsnac2-19ed90319b68bd6c56622dc7cd71c62ca3843dc5.tar.gz
snac2-19ed90319b68bd6c56622dc7cd71c62ca3843dc5.tar.xz
snac2-19ed90319b68bd6c56622dc7cd71c62ca3843dc5.zip
Backport from xs.
-rw-r--r--xs.h35
-rw-r--r--xs_version.h2
2 files changed, 27 insertions, 10 deletions
diff --git a/xs.h b/xs.h
index ea3df1c..480db40 100644
--- a/xs.h
+++ b/xs.h
@@ -97,6 +97,8 @@ xs_list *xs_split_n(const char *str, const char *sep, int times);
97xs_dict *xs_dict_new(void); 97xs_dict *xs_dict_new(void);
98xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz); 98xs_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))
100xs_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))
100int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value); 102int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value);
101xs_dict *xs_dict_get(const xs_dict *dict, const xs_str *key); 103xs_dict *xs_dict_get(const xs_dict *dict, const xs_str *key);
102xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); 104xs_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
862xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz) 864xs_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
883xs_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
890xs_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
880int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value) 897int 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}
diff --git a/xs_version.h b/xs_version.h
index c6cd0f4..d16e7e7 100644
--- a/xs_version.h
+++ b/xs_version.h
@@ -1 +1 @@
/* 79e4ff3403fbbd78f57482122a2478c9453483a8 */ /* a2221e4e87e4c2e0a92a4934f88e78ca7e8e7f7f */