summaryrefslogtreecommitdiff
path: root/xs.h
diff options
context:
space:
mode:
authorGravatar default2024-05-03 00:23:02 +0200
committerGravatar default2024-05-03 00:23:02 +0200
commit20bc82630032a6b8cdf9092651b7c50d7c581eee (patch)
treee6b5b037e3d6cdc9db6b2b1106a066899d1a8136 /xs.h
parentUpdated RELEASE_NOTES. (diff)
downloadpenes-snac2-20bc82630032a6b8cdf9092651b7c50d7c581eee.tar.gz
penes-snac2-20bc82630032a6b8cdf9092651b7c50d7c581eee.tar.xz
penes-snac2-20bc82630032a6b8cdf9092651b7c50d7c581eee.zip
Backport from xs.
Diffstat (limited to 'xs.h')
-rw-r--r--xs.h48
1 files changed, 6 insertions, 42 deletions
diff --git a/xs.h b/xs.h
index 48b0211..ad72207 100644
--- a/xs.h
+++ b/xs.h
@@ -110,11 +110,8 @@ xs_list *xs_split_n(const char *str, const char *sep, int times);
110xs_list *xs_list_cat(xs_list *l1, const xs_list *l2); 110xs_list *xs_list_cat(xs_list *l1, const xs_list *l2);
111 111
112xs_dict *xs_dict_new(void); 112xs_dict *xs_dict_new(void);
113xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz); 113xs_dict *xs_dict_append(xs_dict *dict, const xs_str *key, const xs_val *value);
114#define xs_dict_append(dict, key, data) xs_dict_append_m(dict, key, data, xs_size(data)) 114xs_dict *xs_dict_prepend(xs_dict *dict, const xs_str *key, const xs_val *value);
115xs_dict *xs_dict_prepend_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz);
116#define xs_dict_prepend(dict, key, data) xs_dict_prepend_m(dict, key, data, xs_size(data))
117int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value);
118int xs_dict_next(const xs_dict *dict, xs_str **key, xs_val **value, int *ctxt); 115int xs_dict_next(const xs_dict *dict, xs_str **key, xs_val **value, int *ctxt);
119xs_val *xs_dict_get_def(const xs_dict *dict, const xs_str *key, const xs_val *def); 116xs_val *xs_dict_get_def(const xs_dict *dict, const xs_str *key, const xs_val *def);
120#define xs_dict_get(dict, key) xs_dict_get_def(dict, key, NULL) 117#define xs_dict_get(dict, key) xs_dict_get_def(dict, key, NULL)
@@ -1042,50 +1039,17 @@ xs_dict *_xs_dict_write_ditem(xs_dict *dict, int offset, const xs_str *key,
1042} 1039}
1043 1040
1044 1041
1045xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz) 1042xs_dict *xs_dict_append(xs_dict *dict, const xs_str *key, const xs_val *value)
1046/* appends a memory block to the dict */ 1043/* appends a memory block to the dict */
1047{ 1044{
1048 return _xs_dict_write_ditem(dict, xs_size(dict) - 1, key, mem, dsz); 1045 return _xs_dict_write_ditem(dict, xs_size(dict) - 1, key, value, xs_size(value));
1049} 1046}
1050 1047
1051 1048
1052xs_dict *xs_dict_prepend_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz) 1049xs_dict *xs_dict_prepend(xs_dict *dict, const xs_str *key, const xs_val *value)
1053/* prepends a memory block to the dict */ 1050/* prepends a memory block to the dict */
1054{ 1051{
1055 return _xs_dict_write_ditem(dict, 4, key, mem, dsz); 1052 return _xs_dict_write_ditem(dict, 4, key, value, xs_size(value));
1056}
1057
1058
1059int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value)
1060/* iterates a dict value */
1061{
1062 int goon = 1;
1063
1064 xs_val *p = *dict;
1065
1066 /* skip the start of the list */
1067 if (xs_type(p) == XSTYPE_DICT)
1068 p += 1 + _XS_TYPE_SIZE;
1069
1070 /* an element? */
1071 if (xs_type(p) == XSTYPE_DITEM) {
1072 p++;
1073
1074 *key = p;
1075 p += xs_size(*key);
1076
1077 *value = p;
1078 p += xs_size(*value);
1079 }
1080 else {
1081 /* end of list */
1082 goon = 0;
1083 }
1084
1085 /* store back the pointer */
1086 *dict = p;
1087
1088 return goon;
1089} 1053}
1090 1054
1091 1055