Working on simplifying configurable allocation scheme

This commit is contained in:
Krzosa Karol
2023-01-01 12:40:58 +01:00
parent 8c0a8bf72b
commit c5539276ae
18 changed files with 169 additions and 347 deletions

View File

@@ -76,7 +76,7 @@ operator==(String a, String b){
}
CORE_Static String
string_copy(Arena *a, String string){
string_copy(Allocator *a, String string){
U8 *copy = allocate_array(a, U8, string.len+1);
memory_copy(copy, string.str, string.len);
copy[string.len] = 0;
@@ -84,7 +84,7 @@ string_copy(Arena *a, String string){
}
CORE_Static String
string_fmtv(Arena *a, const char *str, va_list args1) {
string_fmtv(Allocator *a, const char *str, va_list args1) {
va_list args2;
va_copy(args2, args1);
S64 len = stbsp_vsnprintf(0, 0, str, args2);
@@ -104,7 +104,7 @@ String result = string_fmtv(alloc, str, args1); \
va_end(args1)
CORE_Static String
string_fmt(Arena *a, const char *str, ...) {
string_fmt(Allocator *a, const char *str, ...) {
STRING_FMT(a, str, result);
return result;
}
@@ -120,7 +120,7 @@ struct String_Builder_Block{
};
struct String_Builder{
Arena *allocator;
Allocator *allocator;
String_Builder_Block *first_free;
String_Builder_Block *first;
String_Builder_Block *last;
@@ -147,7 +147,7 @@ struct String_Builder{
block = first_free;
first_free = first_free->next;
} else{
block = (String_Builder_Block *)arena_push_size(allocator, sizeof(String_Builder_Block) + size);
block = (String_Builder_Block *)allocate_size(allocator, sizeof(String_Builder_Block) + size, false);
}
memory_zero(block, sizeof(String_Builder_Block)+1); // Also clear first byte of character data
block->cap = size;
@@ -203,7 +203,7 @@ struct String_Builder{
};
CORE_Static String_Builder
string_builder_make(Arena *a, S64 first_block_size = 4096){
string_builder_make(Allocator *a, S64 first_block_size = 4096){
String_Builder sb = {a};
sb.init(first_block_size);
return sb;
@@ -215,7 +215,7 @@ enum String_Builder_Flag{
};
CORE_Static String
string_flatten(Arena *a, String_Builder *b, String_Builder_Flag flags = String_Builder_Flag_None){
string_flatten(Allocator *a, String_Builder *b, String_Builder_Flag flags = String_Builder_Flag_None){
// @Note(Krzosa): Compute size to allocate
S64 size = 1;
if(is_flag_set(flags, String_Builder_Flag_AddSize)) size += sizeof(size_t);
@@ -224,7 +224,7 @@ string_flatten(Arena *a, String_Builder *b, String_Builder_Flag flags = String_B
}
String result = {};
result.str = (U8 *)arena_push_size(a, size);
result.str = (U8 *)allocate_size(a, size, false);
if(is_flag_set(flags, String_Builder_Flag_AddSize)) {
memory_copy(result.str + result.len, &size, sizeof(S64));
result.len += sizeof(S64);
@@ -240,18 +240,6 @@ string_flatten(Arena *a, String_Builder *b, String_Builder_Flag flags = String_B
return result;
}
CORE_Static void
test_string_builder(){
Scratch scratch;
String_Builder sb = string_builder_make(scratch, 4);
sb.addf("Thing, %d", 242252);
String f = string_flatten(scratch, &sb);
assert(string_compare(f, "Thing, 242252"_s));
sb.addf("-%f %f %f", 23.0, 42.29, 2925.2);
f = string_flatten(scratch, &sb);
sb.reset();
}
//-----------------------------------------------------------------------------
// String ops
//-----------------------------------------------------------------------------
@@ -368,7 +356,7 @@ string_trim_end(String string) {
}
CORE_Static String
string_to_lower_case(Arena *arena, String s) {
string_to_lower_case(Allocator *arena, String s) {
String copy = string_copy(arena, s);
for (U64 i = 0; i < copy.len; i++) {
copy.str[i] = to_lower_case(copy.str[i]);
@@ -377,7 +365,7 @@ string_to_lower_case(Arena *arena, String s) {
}
CORE_Static String
string_to_upper_case(Arena *arena, String s) {
string_to_upper_case(Allocator *arena, String s) {
String copy = string_copy(arena, s);
for (U64 i = 0; i < copy.len; i++) {
copy.str[i] = to_upper_case(copy.str[i]);
@@ -471,14 +459,15 @@ string_from_cstring(char *string){
return result;
}
#include "core_arena.cpp" // @! Move this include
struct String_Replace {
String find;
String replace;
};
CORE_Static String
string_replace(Arena *arena, String string, Array<String_Replace> pairs){
Scratch scratch(arena);
string_replace(Scratch_Arena *scratch, Allocator *allocator, String string, Array<String_Replace> pairs){
Scratch_Scope _scope(scratch);
String_Builder builder = {scratch};
for(int i = 0; i < string.len; i++){
For(pairs){
@@ -493,5 +482,5 @@ string_replace(Arena *arena, String string, Array<String_Replace> pairs){
builder.append_data(string.str + i, 1);
}
return string_flatten(arena, &builder);
return string_flatten(allocator, &builder);
}