#include "str.h" void str_init(str_t* str) { assert(str); str->data = NULL; str->size = 0; str->cap = 0; } void str_free(str_t* str) { assert(str); free(str->data); str->data = NULL; str->size = 0; str->cap = 0; } void str_resize(str_t* str) { assert(str); if (str->data == NULL) { str->cap = 2; str->data = calloc(str->cap + 1, sizeof(char)); } if (str->size >= str->cap) { str->cap *= 2; str->data = realloc(str->data, sizeof(char) * (str->cap + 1)); } } void str_push(str_t* str, char c) { assert(str); str_resize(str); str->data[str->size] = c; str_resize(str); str->data[str->size + 1] = '\0'; str->size++; } void str_append(str_t* str, char const* src) { assert(str); assert(src); size_t len = strlen(src); for (size_t i=0; isize == 0; }