summaryrefslogtreecommitdiff
path: root/xs.h
diff options
context:
space:
mode:
authorGravatar default2024-02-15 17:44:28 +0100
committerGravatar default2024-02-15 17:44:28 +0100
commitb75e44afb38bef99bc932942ff4ba4286b774507 (patch)
tree07a3d3a1bf552bf6287c20e9ec7e6e5bbe73774c /xs.h
parentMoved verified links to its own json file. (diff)
downloadsnac2-b75e44afb38bef99bc932942ff4ba4286b774507.tar.gz
snac2-b75e44afb38bef99bc932942ff4ba4286b774507.tar.xz
snac2-b75e44afb38bef99bc932942ff4ba4286b774507.zip
Backport from xs.
Diffstat (limited to 'xs.h')
-rw-r--r--xs.h35
1 files changed, 12 insertions, 23 deletions
diff --git a/xs.h b/xs.h
index fc475ec..fb766ef 100644
--- a/xs.h
+++ b/xs.h
@@ -54,6 +54,7 @@ void _xs_destroy(char **var);
54xstype xs_type(const xs_val *data); 54xstype xs_type(const xs_val *data);
55int xs_size(const xs_val *data); 55int xs_size(const xs_val *data);
56int xs_is_null(const xs_val *data); 56int xs_is_null(const xs_val *data);
57int xs_cmp(const xs_val *v1, const xs_val *v2);
57xs_val *xs_dup(const xs_val *data); 58xs_val *xs_dup(const xs_val *data);
58xs_val *xs_expand(xs_val *data, int offset, int size); 59xs_val *xs_expand(xs_val *data, int offset, int size);
59xs_val *xs_collapse(xs_val *data, int offset, int size); 60xs_val *xs_collapse(xs_val *data, int offset, int size);
@@ -91,7 +92,6 @@ int xs_list_len(const xs_list *list);
91xs_val *xs_list_get(const xs_list *list, int num); 92xs_val *xs_list_get(const xs_list *list, int num);
92xs_list *xs_list_del(xs_list *list, int num); 93xs_list *xs_list_del(xs_list *list, int num);
93xs_list *xs_list_insert(xs_list *list, int num, const xs_val *data); 94xs_list *xs_list_insert(xs_list *list, int num, const xs_val *data);
94xs_list *xs_list_insert_sorted(xs_list *list, const char *str);
95xs_list *xs_list_set(xs_list *list, int num, const xs_val *data); 95xs_list *xs_list_set(xs_list *list, int num, const xs_val *data);
96xs_list *xs_list_dequeue(xs_list *list, xs_val **data, int last); 96xs_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
353int 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
353xs_val *xs_dup(const xs_val *data) 364xs_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
770xs_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
792xs_list *xs_list_set(xs_list *list, int num, const xs_val *data) 781xs_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{