#include <tabula.h>
#include <alias/str.h>
alias_str alias_str_clone(alias_MemoryCB *mcb, alias_str s) {
uintmax_t l = strlen(s);
return alias_memory_clone(mcb, s, l + 1, 1);
}
alias_str alias_str_clone_substring(alias_MemoryCB *mcb, alias_str s, uint32_t length) {
uintmax_t l = strlen(s);
if(l > length) {
uint8_t * result = alias_memory_clone(mcb, s, length + 1, 1);
result[length] = 0;
return (alias_str)result;
} else {
return alias_str_clone(mcb, s);
}
}
alias_str alias_str_format(alias_MemoryCB *mcb, alias_str format, ...) {
va_list ap1, ap2;
va_start(ap1, format);
va_copy(ap2, ap1);
int length = tabula_vcprintf(format, ap1);
char *result = alias_malloc(mcb, length + 1, 1);
tabula_snprintf(result, length, length, format, ap2);
return result;
}
void alias_str_free(alias_MemoryCB *mcb, alias_str s) { alias_free(mcb, (void *)s, strlen(s) + 1, 1); }
bool alias_str_same(alias_str a, alias_str b) { return strcmp(a, b) == 0; }
int alias_str_compare(alias_str a, alias_str b) { return strcmp(a, b); }
uintmax_t alias_str_length(alias_str s) { return strlen(s); }
uintmax_t alias_str_size(alias_str s) { return strlen(s); }