86 lines
2.2 KiB
C
Executable File
86 lines
2.2 KiB
C
Executable File
#include "tlibc/string/StringBuilder.h"
|
|
|
|
void StringBuilder_destroy(StringBuilder* b){
|
|
if(!b)
|
|
return;
|
|
|
|
free(b->buffer.data);
|
|
}
|
|
|
|
str StringBuilder_getStr(StringBuilder* b){
|
|
if(b->buffer.size == 0 || ((char*)b->buffer.data)[b->buffer.size - 1] != '\0'){
|
|
List_push(&b->buffer, u8, '\0');
|
|
// '\0' at the end doesn't increase buffer.size
|
|
b->buffer.size -= 1;
|
|
}
|
|
str result = str_construct((char*)b->buffer.data, b->buffer.size, true);
|
|
return result;
|
|
}
|
|
|
|
bool StringBuilder_equals(const StringBuilder* a, const StringBuilder* b){
|
|
str a_str = str_construct((char*)a->buffer.data, a->buffer.size, false);
|
|
str b_str = str_construct((char*)b->buffer.data, b->buffer.size, false);
|
|
return str_equals(a_str, b_str);
|
|
}
|
|
|
|
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, FMT_i64, n);
|
|
StringBuilder_append_cstr(b, buf);
|
|
}
|
|
|
|
void StringBuilder_append_u64(StringBuilder* b, u64 n){
|
|
char buf[32];
|
|
sprintf(buf, FMT_u64, n);
|
|
StringBuilder_append_cstr(b, buf);
|
|
}
|
|
|
|
void StringBuilder_append_f32(StringBuilder* b, f32 n){
|
|
char buf[32];
|
|
sprintf(buf, FMT_f32, n);
|
|
StringBuilder_append_cstr(b, buf);
|
|
}
|
|
|
|
void StringBuilder_append_f64(StringBuilder* b, f64 n){
|
|
char buf[32];
|
|
sprintf(buf, FMT_f64, n);
|
|
StringBuilder_append_cstr(b, buf);
|
|
}
|
|
|
|
void StringBuilder_append_memory(StringBuilder* b, Array(u8) 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));
|
|
}
|
|
}
|