Working on simplifying configurable allocation scheme
This commit is contained in:
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user