summaryrefslogtreecommitdiff
path: root/xs.h
diff options
context:
space:
mode:
authorGravatar default2024-08-11 21:50:45 +0200
committerGravatar default2024-08-11 21:50:45 +0200
commit45278afdf116c6f7ced29b6ada7fe6c6a67b04b4 (patch)
tree7c6be932dc60f467e1bbdd151b083aeb2deab7ce /xs.h
parentMinor search improvement. (diff)
downloadsnac2-45278afdf116c6f7ced29b6ada7fe6c6a67b04b4.tar.gz
snac2-45278afdf116c6f7ced29b6ada7fe6c6a67b04b4.tar.xz
snac2-45278afdf116c6f7ced29b6ada7fe6c6a67b04b4.zip
Backport from xs.
Diffstat (limited to 'xs.h')
-rw-r--r--xs.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/xs.h b/xs.h
index 608dc3a..ae851eb 100644
--- a/xs.h
+++ b/xs.h
@@ -60,6 +60,7 @@ xstype xs_type(const xs_val *data);
60int xs_size(const xs_val *data); 60int xs_size(const xs_val *data);
61int xs_is_null(const xs_val *data); 61int xs_is_null(const xs_val *data);
62int xs_cmp(const xs_val *v1, const xs_val *v2); 62int xs_cmp(const xs_val *v1, const xs_val *v2);
63const xs_val *xs_or(const xs_val *v1, const xs_val *v2);
63xs_val *xs_dup(const xs_val *data); 64xs_val *xs_dup(const xs_val *data);
64xs_val *xs_expand(xs_val *data, int offset, int size); 65xs_val *xs_expand(xs_val *data, int offset, int size);
65xs_val *xs_collapse(xs_val *data, int offset, int size); 66xs_val *xs_collapse(xs_val *data, int offset, int size);
@@ -119,8 +120,8 @@ xs_dict *xs_dict_new(void);
119xs_dict *xs_dict_append(xs_dict *dict, const xs_str *key, const xs_val *value); 120xs_dict *xs_dict_append(xs_dict *dict, const xs_str *key, const xs_val *value);
120xs_dict *xs_dict_prepend(xs_dict *dict, const xs_str *key, const xs_val *value); 121xs_dict *xs_dict_prepend(xs_dict *dict, const xs_str *key, const xs_val *value);
121int xs_dict_next(const xs_dict *dict, const xs_str **key, const xs_val **value, int *ctxt); 122int xs_dict_next(const xs_dict *dict, const xs_str **key, const xs_val **value, int *ctxt);
122const xs_val *xs_dict_get_def(const xs_dict *dict, const xs_str *key, const xs_val *def); 123const xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key);
123#define xs_dict_get(dict, key) xs_dict_get_def(dict, key, NULL) 124#define xs_dict_get_def(dict, key, def) xs_or(xs_dict_get(dict, key), def)
124xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); 125xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key);
125xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data); 126xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data);
126xs_dict *xs_dict_gc(const xs_dict *dict); 127xs_dict *xs_dict_gc(const xs_dict *dict);
@@ -360,6 +361,13 @@ int xs_cmp(const xs_val *v1, const xs_val *v2)
360} 361}
361 362
362 363
364const xs_val *xs_or(const xs_val *v1, const xs_val *v2)
365/* returns v1 if it's not NULL, else v2 */
366{
367 return v1 == NULL ? v2 : v1;
368}
369
370
363xs_val *xs_dup(const xs_val *data) 371xs_val *xs_dup(const xs_val *data)
364/* creates a duplicate of data */ 372/* creates a duplicate of data */
365{ 373{
@@ -1211,8 +1219,8 @@ xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key)
1211} 1219}
1212 1220
1213 1221
1214const xs_val *xs_dict_get_def(const xs_dict *dict, const xs_str *key, const xs_str *def) 1222const xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key)
1215/* gets a value by key, or returns def */ 1223/* gets a value by key, or NULL */
1216{ 1224{
1217 if (xs_type(dict) == XSTYPE_DICT) { 1225 if (xs_type(dict) == XSTYPE_DICT) {
1218 int *o = _xs_dict_locate(dict, key); 1226 int *o = _xs_dict_locate(dict, key);
@@ -1226,7 +1234,7 @@ const xs_val *xs_dict_get_def(const xs_dict *dict, const xs_str *key, const xs_s
1226 } 1234 }
1227 } 1235 }
1228 1236
1229 return def; 1237 return NULL;
1230} 1238}
1231 1239
1232 1240