diff options
| author | Soikk | 2025-06-07 21:41:00 +0200 |
|---|---|---|
| committer | Soikk | 2025-06-07 21:41:00 +0200 |
| commit | 3158a49e571dffcb6a17227fed290856c333ae54 (patch) | |
| tree | 61223d3a582a723be8fc8244164a2838422d187b /str | |
| parent | 16191cdeeb03f62bdc1bd4d38b87b386e6beb48b (diff) | |
| download | soikk-libs-3158a49e571dffcb6a17227fed290856c333ae54.tar.xz soikk-libs-3158a49e571dffcb6a17227fed290856c333ae54.tar.zst | |
Added streq and strdup¨
Diffstat (limited to 'str')
| -rwxr-xr-x | str/str.c | 63 | ||||
| -rwxr-xr-x | str/str.h | 17 |
2 files changed, 80 insertions, 0 deletions
@@ -117,6 +117,20 @@ u64 strtou(str s){ return r; } +int streq(str s1, str s2){ + if(s1.len != s2.len){ + return 0; + } + int i = 0; + while(i < s1.len){ + if(s1.ptr[i] != s2.ptr[i]){ + return 0; + } + i++; + } + return 1; +} + u64 len_nstrs(u64 n, ...){ u64 s = 0; va_list vl; @@ -129,6 +143,15 @@ u64 len_nstrs(u64 n, ...){ return s; } +u64 vlen_nstrs(u64 n, va_list args){ + u64 s = 0; + for(u64 i = 0; i < n; i++) { + str t = va_arg(args, str); + s += t.len; + } + return s; +} + void copy_nstrs(str dst, u64 n, ...){ va_list vl; va_start(vl, n); @@ -139,6 +162,13 @@ void copy_nstrs(str dst, u64 n, ...){ va_end(vl); } +void vcopy_nstrs(str dst, u64 n, va_list args){ + for(u64 i = 0; i < n; i++) { + str t = va_arg(args, str); + copy_str(dst, t); + } +} + void move_nstrs(str dst, u64 n, ...){ va_list vl; va_start(vl, n); @@ -149,6 +179,39 @@ void move_nstrs(str dst, u64 n, ...){ va_end(vl); } +void vmove_nstrs(str dst, u64 n, va_list args){ + for(u64 i = 0; i < n; i++) { + str t = va_arg(args, str); + move_str(dst, t); + } +} + +str dup_nstrs(u64 n, ...){ + va_list vl, vlc; + va_start(vl, n); + va_copy(vlc, vl); + str r = dnstr(vlen_nstrs(n, vlc)); + for(u64 i = 0; i < n; i++) { + str t = va_arg(vl, str); + copy_str(r, t); + } + va_end(vlc); + va_end(vl); + return r; +} + +str vdup_nstrs(u64 n, va_list args){ + va_list vlc; + va_copy(vlc, args); + str r = dnstr(vlen_nstrs(n, vlc)); + for(u64 i = 0; i < n; i++) { + str t = va_arg(args, str); + copy_str(r, t); + } + va_end(vlc); + return r; +} + str read_delim(char *buf, char d){ u32 i = 0; while(buf[i] && buf[i] != d) i++; @@ -57,13 +57,19 @@ str utostr(u64 n, int b); u64 strtou(str s); +int streq(str s1, str s2); + #define NUMSTRS(...) (sizeof((str[]){{0}, ##__VA_ARGS__})/sizeof(str)-1) +// look into calling vlen_nstrs from len_nstrs u64 len_nstrs(u64 n, ...); +u64 vlen_nstrs(u64 n, va_list args); + #define len_strs(...) \ len_nstrs(NUMSTRS(__VA_ARGS__), __VA_ARGS__) +// probably should change to append or something #define copy_str(dest, src) \ if(dest.ptr != NULL && src.ptr != NULL){ \ memcpy((dest).ptr+(dest).len, (src).ptr, (src).len); \ @@ -78,8 +84,16 @@ u64 len_nstrs(u64 n, ...); void copy_nstrs(str dst, u64 n, ...); +void vcopy_nstrs(str dst, u64 n, va_list args); + void move_nstrs(str dst, u64 n, ...); +void vmove_nstrs(str dst, u64 n, va_list args); + +str dup_nstrs(u64 n, ...); + +str vdup_nstrs(u64 n, va_list args); + #define copy_strs(d, ...) \ copy_nstrs(d, NUMSTRS(__VA_ARGS__), __VA_ARGS__); \ (d).len += len_nstrs(NUMSTRS(__VA_ARGS__), __VA_ARGS__) @@ -88,6 +102,9 @@ void move_nstrs(str dst, u64 n, ...); move_nstrs(d, NUMSTRS(__VA_ARGS__), __VA_ARGS__); \ (d).len += len_nstrs(NUMSTRS(__VA_ARGS__), __VA_ARGS__) +#define dup_strs(...) \ + dup_nstrs(NUMSTRS(__VA_ARGS__), __VA_ARGS__); + str read_delim(char *buf, char d); str sread_delim(char *buf, char d); |
