diff options
| -rw-r--r-- | xs.h | 18 | ||||
| -rw-r--r-- | xs_version.h | 2 |
2 files changed, 14 insertions, 6 deletions
| @@ -60,6 +60,7 @@ xstype xs_type(const xs_val *data); | |||
| 60 | int xs_size(const xs_val *data); | 60 | int xs_size(const xs_val *data); |
| 61 | int xs_is_null(const xs_val *data); | 61 | int xs_is_null(const xs_val *data); |
| 62 | int xs_cmp(const xs_val *v1, const xs_val *v2); | 62 | int xs_cmp(const xs_val *v1, const xs_val *v2); |
| 63 | const xs_val *xs_or(const xs_val *v1, const xs_val *v2); | ||
| 63 | xs_val *xs_dup(const xs_val *data); | 64 | xs_val *xs_dup(const xs_val *data); |
| 64 | xs_val *xs_expand(xs_val *data, int offset, int size); | 65 | xs_val *xs_expand(xs_val *data, int offset, int size); |
| 65 | xs_val *xs_collapse(xs_val *data, int offset, int size); | 66 | xs_val *xs_collapse(xs_val *data, int offset, int size); |
| @@ -119,8 +120,8 @@ xs_dict *xs_dict_new(void); | |||
| 119 | xs_dict *xs_dict_append(xs_dict *dict, const xs_str *key, const xs_val *value); | 120 | xs_dict *xs_dict_append(xs_dict *dict, const xs_str *key, const xs_val *value); |
| 120 | xs_dict *xs_dict_prepend(xs_dict *dict, const xs_str *key, const xs_val *value); | 121 | xs_dict *xs_dict_prepend(xs_dict *dict, const xs_str *key, const xs_val *value); |
| 121 | int xs_dict_next(const xs_dict *dict, const xs_str **key, const xs_val **value, int *ctxt); | 122 | int xs_dict_next(const xs_dict *dict, const xs_str **key, const xs_val **value, int *ctxt); |
| 122 | const xs_val *xs_dict_get_def(const xs_dict *dict, const xs_str *key, const xs_val *def); | 123 | const 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) |
| 124 | xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); | 125 | xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); |
| 125 | xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data); | 126 | xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data); |
| 126 | xs_dict *xs_dict_gc(const xs_dict *dict); | 127 | xs_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 | ||
| 364 | const 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 | |||
| 363 | xs_val *xs_dup(const xs_val *data) | 371 | xs_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 | ||
| 1214 | const xs_val *xs_dict_get_def(const xs_dict *dict, const xs_str *key, const xs_str *def) | 1222 | const 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 | ||
diff --git a/xs_version.h b/xs_version.h index 0f81d28..716dba6 100644 --- a/xs_version.h +++ b/xs_version.h | |||
| @@ -1 +1 @@ | |||
| /* 3536c4e2ab0849eccf81c50741028453e9ad7f3a 2024-08-05T18:37:46+02:00 */ | /* 7c7c38b6d14c07cb85698223bcff4d3193245437 2024-08-11T21:48:09+02:00 */ | ||