#ifndef STR_H #define STR_H #include #include "stdwrm.h" #include "dynarr.h" typedef DYNARR(char) string; typedef struct { const char *s; size_t n; } strv_t; #define strv(s) (strv_t) { s, strlen(s) } string snew(void); size_t slen(const string); void scats(string *, strv_t); void scatc(string *, char); void sfree(string); #ifdef STDWRM_STR_IMPL string snew(void) { string s; DA_INIT(s); DA_PUSH(s, '\0'); return s; } size_t slen(const string s) { return DA_LEN(s) - 1; } void scatc(string *s, char c) { size_t n = DA_LEN(*s) + 1; DA_FIT(*s, n); (*s)[n-2] = c; (*s)[n-1] = '\0'; DA_LEN(*s) = n; } void scats(string *s, strv_t sv) { size_t n = DA_LEN(*s) + sv.n; DA_FIT(*s, n); memcpy(&(*s)[slen(*s)], sv.s, sv.n); (*s)[n-1] = '\0'; DA_LEN(*s) = n; } void sfree(string s) { DA_FREE(s); } #endif #endif