diff options
| author | 2024-02-15 17:44:28 +0100 | |
|---|---|---|
| committer | 2024-02-15 17:44:28 +0100 | |
| commit | b75e44afb38bef99bc932942ff4ba4286b774507 (patch) | |
| tree | 07a3d3a1bf552bf6287c20e9ec7e6e5bbe73774c /xs.h | |
| parent | Moved verified links to its own json file. (diff) | |
| download | snac2-b75e44afb38bef99bc932942ff4ba4286b774507.tar.gz snac2-b75e44afb38bef99bc932942ff4ba4286b774507.tar.xz snac2-b75e44afb38bef99bc932942ff4ba4286b774507.zip | |
Backport from xs.
Diffstat (limited to 'xs.h')
| -rw-r--r-- | xs.h | 35 |
1 files changed, 12 insertions, 23 deletions
| @@ -54,6 +54,7 @@ void _xs_destroy(char **var); | |||
| 54 | xstype xs_type(const xs_val *data); | 54 | xstype xs_type(const xs_val *data); |
| 55 | int xs_size(const xs_val *data); | 55 | int xs_size(const xs_val *data); |
| 56 | int xs_is_null(const xs_val *data); | 56 | int xs_is_null(const xs_val *data); |
| 57 | int xs_cmp(const xs_val *v1, const xs_val *v2); | ||
| 57 | xs_val *xs_dup(const xs_val *data); | 58 | xs_val *xs_dup(const xs_val *data); |
| 58 | xs_val *xs_expand(xs_val *data, int offset, int size); | 59 | xs_val *xs_expand(xs_val *data, int offset, int size); |
| 59 | xs_val *xs_collapse(xs_val *data, int offset, int size); | 60 | xs_val *xs_collapse(xs_val *data, int offset, int size); |
| @@ -91,7 +92,6 @@ int xs_list_len(const xs_list *list); | |||
| 91 | xs_val *xs_list_get(const xs_list *list, int num); | 92 | xs_val *xs_list_get(const xs_list *list, int num); |
| 92 | xs_list *xs_list_del(xs_list *list, int num); | 93 | xs_list *xs_list_del(xs_list *list, int num); |
| 93 | xs_list *xs_list_insert(xs_list *list, int num, const xs_val *data); | 94 | xs_list *xs_list_insert(xs_list *list, int num, const xs_val *data); |
| 94 | xs_list *xs_list_insert_sorted(xs_list *list, const char *str); | ||
| 95 | xs_list *xs_list_set(xs_list *list, int num, const xs_val *data); | 95 | xs_list *xs_list_set(xs_list *list, int num, const xs_val *data); |
| 96 | xs_list *xs_list_dequeue(xs_list *list, xs_val **data, int last); | 96 | xs_list *xs_list_dequeue(xs_list *list, xs_val **data, int last); |
| 97 | #define xs_list_pop(list, data) xs_list_dequeue(list, data, 1) | 97 | #define xs_list_pop(list, data) xs_list_dequeue(list, data, 1) |
| @@ -350,6 +350,17 @@ int xs_is_null(const xs_val *data) | |||
| 350 | } | 350 | } |
| 351 | 351 | ||
| 352 | 352 | ||
| 353 | int xs_cmp(const xs_val *v1, const xs_val *v2) | ||
| 354 | /* compares two values */ | ||
| 355 | { | ||
| 356 | int s1 = xs_size(v1); | ||
| 357 | int s2 = xs_size(v2); | ||
| 358 | int d = s1 - s2; | ||
| 359 | |||
| 360 | return d == 0 ? memcmp(v1, v2, s1) : d; | ||
| 361 | } | ||
| 362 | |||
| 363 | |||
| 353 | xs_val *xs_dup(const xs_val *data) | 364 | xs_val *xs_dup(const xs_val *data) |
| 354 | /* creates a duplicate of data */ | 365 | /* creates a duplicate of data */ |
| 355 | { | 366 | { |
| @@ -767,28 +778,6 @@ xs_list *xs_list_insert(xs_list *list, int num, const xs_val *data) | |||
| 767 | } | 778 | } |
| 768 | 779 | ||
| 769 | 780 | ||
| 770 | xs_list *xs_list_insert_sorted(xs_list *list, const xs_str *str) | ||
| 771 | /* inserts a string in the list in its ordered position */ | ||
| 772 | { | ||
| 773 | XS_ASSERT_TYPE(list, XSTYPE_LIST); | ||
| 774 | XS_ASSERT_TYPE(str, XSTYPE_STRING); | ||
| 775 | |||
| 776 | char *p, *v; | ||
| 777 | int offset = xs_size(list); | ||
| 778 | |||
| 779 | p = list; | ||
| 780 | while (xs_list_iter(&p, &v)) { | ||
| 781 | /* if this element is greater or equal, insert here */ | ||
| 782 | if (strcmp(v, str) >= 0) { | ||
| 783 | offset = v - list; | ||
| 784 | break; | ||
| 785 | } | ||
| 786 | } | ||
| 787 | |||
| 788 | return _xs_list_write_litem(list, offset - 1, str, xs_size(str)); | ||
| 789 | } | ||
| 790 | |||
| 791 | |||
| 792 | xs_list *xs_list_set(xs_list *list, int num, const xs_val *data) | 781 | xs_list *xs_list_set(xs_list *list, int num, const xs_val *data) |
| 793 | /* sets the element at #num position */ | 782 | /* sets the element at #num position */ |
| 794 | { | 783 | { |