tlibc/src/string/StringBuilder.c

68 lines
1.7 KiB
C
Executable File

#include "tlibc/string/StringBuilder.h"
void StringBuilder_destroy(StringBuilder* b){
free(b->buffer.data);
b->buffer = List_construct_size(NULL, 0, 0);
}
str StringBuilder_getStr(StringBuilder* b){
List_push(&b->buffer, u8, '\0');
str result = str_construct((char*)b->buffer.data, b->buffer.size - 1, true);
return result;
}
void StringBuilder_removeFromEnd(StringBuilder* b, u32 count){
if(count < b->buffer.size){
b->buffer.size -= count;
}
else{
b->buffer.size = 0;
}
}
void StringBuilder_append_char(StringBuilder* b, char c){
List_push(&b->buffer, u8, c);
}
void StringBuilder_append_str(StringBuilder* b, str s){
if(s.data == NULL)
return;
List_push_size(&b->buffer, s.data, s.size);
}
void StringBuilder_append_cstr(StringBuilder* b, cstr s){
StringBuilder_append_str(b, str_construct((char*)(void*)s, strlen(s), true));
}
void StringBuilder_append_i64(StringBuilder* b, i64 n){
char buf[32];
sprintf(buf, IFWIN("%lli", "%li"), n);
StringBuilder_append_cstr(b, buf);
}
void StringBuilder_append_u64(StringBuilder* b, u64 n){
char buf[32];
sprintf(buf, IFWIN("%llu", "%lu"), n);
StringBuilder_append_cstr(b, buf);
}
void StringBuilder_append_f64(StringBuilder* b, f64 n){
char buf[32];
sprintf(buf, "%lf", n);
StringBuilder_append_cstr(b, buf);
}
void StringBuilder_append_memory(StringBuilder* b, Array mem, bool uppercase) {
if(mem.data == NULL)
return;
char buf[8];
for (u32 i=0; i < mem.size; i++) {
sprintf(buf, uppercase ? "%02X" : "%02x", ((u8*)mem.data)[i]);
StringBuilder_append_str(b, str_construct(buf, 2, true));
}
}