diff options
Diffstat (limited to 'xs.h')
| -rw-r--r-- | xs.h | 45 |
1 files changed, 27 insertions, 18 deletions
| @@ -1,4 +1,4 @@ | |||
| 1 | /* copyright (c) 2022 grunfink - MIT license */ | 1 | /* copyright (c) 2022 - 2023 grunfink / MIT license */ |
| 2 | 2 | ||
| 3 | #ifndef _XS_H | 3 | #ifndef _XS_H |
| 4 | 4 | ||
| @@ -53,7 +53,9 @@ d_char *xs_insert_m(d_char *data, int offset, const char *mem, int size); | |||
| 53 | #define xs_insert(data, offset, data2) xs_insert_m(data, offset, data2, xs_size(data2)) | 53 | #define xs_insert(data, offset, data2) xs_insert_m(data, offset, data2, xs_size(data2)) |
| 54 | #define xs_append_m(data, mem, size) xs_insert_m(data, xs_size(data) - 1, mem, size) | 54 | #define xs_append_m(data, mem, size) xs_insert_m(data, xs_size(data) - 1, mem, size) |
| 55 | d_char *xs_str_new(const char *str); | 55 | d_char *xs_str_new(const char *str); |
| 56 | #define xs_str_cat(str1, str2) xs_insert(str1, xs_size(str1) - 1, str2) | 56 | d_char *xs_str_wrap_i(const char *prefix, d_char *str, const char *suffix); |
| 57 | #define xs_str_prepend_i(str, prefix) xs_str_wrap_i(prefix, str, NULL) | ||
| 58 | #define xs_str_cat(str, suffix) xs_str_wrap_i(NULL, str, suffix) | ||
| 57 | d_char *xs_replace_i(d_char *str, const char *sfrom, const char *sto); | 59 | d_char *xs_replace_i(d_char *str, const char *sfrom, const char *sto); |
| 58 | #define xs_replace(str, sfrom, sto) xs_replace_i(xs_dup(str), sfrom, sto) | 60 | #define xs_replace(str, sfrom, sto) xs_replace_i(xs_dup(str), sfrom, sto) |
| 59 | d_char *xs_fmt(const char *fmt, ...); | 61 | d_char *xs_fmt(const char *fmt, ...); |
| @@ -64,7 +66,6 @@ d_char *xs_crop_i(d_char *str, int start, int end); | |||
| 64 | d_char *xs_strip_chars_i(d_char *str, const char *chars); | 66 | d_char *xs_strip_chars_i(d_char *str, const char *chars); |
| 65 | #define xs_strip_i(str) xs_strip_chars_i(str, " \r\n\t\v\f") | 67 | #define xs_strip_i(str) xs_strip_chars_i(str, " \r\n\t\v\f") |
| 66 | d_char *xs_tolower_i(d_char *str); | 68 | d_char *xs_tolower_i(d_char *str); |
| 67 | d_char *xs_str_prepend_i(d_char *str, const char *prefix); | ||
| 68 | d_char *xs_list_new(void); | 69 | d_char *xs_list_new(void); |
| 69 | d_char *xs_list_append_m(d_char *list, const char *mem, int dsz); | 70 | d_char *xs_list_append_m(d_char *list, const char *mem, int dsz); |
| 70 | #define xs_list_append(list, data) xs_list_append_m(list, data, xs_size(data)) | 71 | #define xs_list_append(list, data) xs_list_append_m(list, data, xs_size(data)) |
| @@ -364,6 +365,19 @@ d_char *xs_str_new(const char *str) | |||
| 364 | } | 365 | } |
| 365 | 366 | ||
| 366 | 367 | ||
| 368 | d_char *xs_str_wrap_i(const char *prefix, d_char *str, const char *suffix) | ||
| 369 | /* wraps str with prefix and suffix */ | ||
| 370 | { | ||
| 371 | if (prefix) | ||
| 372 | str = xs_insert_m(str, 0, prefix, strlen(prefix)); | ||
| 373 | |||
| 374 | if (suffix) | ||
| 375 | str = xs_insert_m(str, xs_size(str) - 1, suffix, xs_size(suffix)); | ||
| 376 | |||
| 377 | return str; | ||
| 378 | } | ||
| 379 | |||
| 380 | |||
| 367 | d_char *xs_replace_i(d_char *str, const char *sfrom, const char *sto) | 381 | d_char *xs_replace_i(d_char *str, const char *sfrom, const char *sto) |
| 368 | /* replaces inline all sfrom with sto */ | 382 | /* replaces inline all sfrom with sto */ |
| 369 | { | 383 | { |
| @@ -490,18 +504,6 @@ d_char *xs_tolower_i(d_char *str) | |||
| 490 | } | 504 | } |
| 491 | 505 | ||
| 492 | 506 | ||
| 493 | d_char *xs_str_prepend_i(d_char *str, const char *prefix) | ||
| 494 | /* prepends prefix into string */ | ||
| 495 | { | ||
| 496 | int sz = strlen(prefix); | ||
| 497 | |||
| 498 | str = xs_expand(str, 0, sz); | ||
| 499 | memcpy(str, prefix, sz); | ||
| 500 | |||
| 501 | return str; | ||
| 502 | } | ||
| 503 | |||
| 504 | |||
| 505 | /** lists **/ | 507 | /** lists **/ |
| 506 | 508 | ||
| 507 | d_char *xs_list_new(void) | 509 | d_char *xs_list_new(void) |
| @@ -666,9 +668,16 @@ d_char *xs_list_set(d_char *list, int num, const char *data) | |||
| 666 | d_char *xs_list_pop(d_char *list, char **data) | 668 | d_char *xs_list_pop(d_char *list, char **data) |
| 667 | /* pops the last element from the list */ | 669 | /* pops the last element from the list */ |
| 668 | { | 670 | { |
| 669 | if ((*data = xs_list_get(list, -1)) != NULL) { | 671 | char *p = list, *v = NULL; |
| 670 | *data = xs_dup(*data); | 672 | |
| 671 | list = xs_list_del(list, -1); | 673 | /* iterate to the end */ |
| 674 | while (xs_list_iter(&p, &v)); | ||
| 675 | |||
| 676 | if (v != NULL) { | ||
| 677 | *data = xs_dup(v); | ||
| 678 | |||
| 679 | /* collapse from the address of the element */ | ||
| 680 | list = xs_collapse(list, v - 1 - list, xs_size(v - 1)); | ||
| 672 | } | 681 | } |
| 673 | 682 | ||
| 674 | return list; | 683 | return list; |