Minor fixes to string builder, examples

This commit is contained in:
Musa Mahmood 2025-12-01 07:34:37 -05:00
parent 916777c2b5
commit a0f95174b2
9 changed files with 39 additions and 25 deletions

View File

@ -101,7 +101,7 @@ template <typename T> ArrayView<T> to_view (ArenaArray<T>& array, s64 start_offs
template <typename T> void array_add (ArenaArray<T>& array, ArrayView<T> items) {
T* current_point = &array.data[array.count];
s64 final_count = array.allocated + items.count;
s64 final_count = array.count + items.count;
if (array.allocated < final_count) {
array_reserve(array, final_count);
@ -188,7 +188,7 @@ template <typename T> void init_range (T* ptr, s64 start_offset, s64 end_offset)
}
}
template <typename T> void poison_range (ArenaArray<T>& array, s64 start, s64 count) {
template <typename T> void array_poison_range (ArenaArray<T>& array, s64 start, s64 count) {
#if BUILD_DEBUG
Assert(start >= 0 && start < array.count);
Assert(start + count <= array.count);
@ -202,7 +202,9 @@ template <typename T> force_inline void array_reset (ArenaArray<T>& array) {
// reset backing array:
arena_reset(array.arena);
array.count = 0;
array.allocated = 0;
// should be # of bytes committed / sizeof(T):
s64 committed_bytes = (s64)(array.arena->first_uncommitted_page - array.data);
array.allocated = committed_bytes / sizeof(T);
}
template <typename T> force_inline void reset_keeping_memory (ArenaArray<T>& array) {

View File

@ -1,6 +1,7 @@
ExpandableArena* expandable_arena_new (Arena_Reserve starting_reserve, s32 commit_page_count) {
ExpandableArena* new_arena = (ExpandableArena*)bootstrap_arena(starting_reserve, commit_page_count);
// Note: beyond first 32 bytes ExpandableArena will not be initialized, so we do it here:
// Note: beyond first 32 bytes (sizeof(Arena)) ExpandableArena will not be initialized,
// so we do it here:
new_arena->current = (Arena*)new_arena;
new_arena->current_point = expandable_arena_start(new_arena);

View File

@ -13,7 +13,7 @@ struct ExpandableArena {
Arena_Reserve reserve_size = Arena_Reserve::Size_64K;
Arena_Flags flags = Arena_Flags::None;
u32 initial_commit_page_count = ARENA_DEFAULT_COMMIT_PAGE_COUNT;
// Note that this downcasts to Arena, so can be initialized in the same way.
// Note that this downcasts to Arena*, so can be initialized in the same way.
Arena* current;
Array<Arena*> next_arenas;
};

View File

@ -18,7 +18,7 @@ void log_error (string fmt, ...) {
Logger* logger = context_logger();
logger->proc(message, Log_Level::Error, logger->data);
reset_string_builder(sb);
reset_string_builder(sb, true);
}
void log (string fmt, ...) {
@ -41,7 +41,7 @@ void log (string fmt, ...) {
Logger* logger = context_logger();
logger->proc(message, Log_Level::None, logger->data);
reset_string_builder(sb);
reset_string_builder(sb, true);
}
void print (string message) {

View File

@ -3,7 +3,7 @@ force_inline Serializer* new_serializer (Arena_Reserve new_reserve) {
}
force_inline void reset_serializer (Serializer* serializer) {
poison_range(*serializer, 0, serializer->count);
array_poison_range(*serializer, 0, serializer->count);
reset_keeping_memory(*serializer);
}

View File

@ -200,7 +200,7 @@ force_inline void append_no_add (String_Builder* sb, string s) {
// Unfortunately this follows the printf format, which is annoying.
// I'd rather have something like fmt::
void print_to_builder (String_Builder* sb, string format, va_list args) {
s64 expected_final_count = sb->count + format.count + 4096;
s64 expected_final_count = max_array_size(*sb);// amount to reserve
if (sb->allocated < expected_final_count) {
array_reserve(*sb, expected_final_count);
@ -215,7 +215,7 @@ void print_to_builder (String_Builder* sb, string format, va_list args) {
}
void print_to_builder (String_Builder* sb, string format, ...) {
s64 expected_final_count = sb->count + format.count + 4096;
s64 expected_final_count = max_array_size(*sb);
if (sb->allocated < expected_final_count) {
array_reserve(*sb, expected_final_count);
@ -239,9 +239,13 @@ string string_view (String_Builder* sb) {
}
// for when we want to keep the string builder around and recycle the memory.
internal force_inline void reset_string_builder (String_Builder* sb) {
poison_range(*sb, 0, sb->count);
reset_keeping_memory(*sb);
internal force_inline void reset_string_builder (String_Builder* sb, bool keep_memory) {
array_poison_range(*sb, 0, sb->count);
if (keep_memory) {
reset_keeping_memory(*sb);
} else {
array_reset(*sb);
}
}
force_inline string builder_to_string (String_Builder* sb) {

View File

@ -113,12 +113,12 @@ typedef ArenaArray<u8> String_Builder; // struct String_Builder
force_inline String_Builder* new_string_builder (Arena_Reserve new_reserve=Arena_Reserve::Size_64K);
force_inline void append (String_Builder* sb, string s);
void append (String_Builder* sb, ArrayView<string> strings);
// This should probably be called append_but_do_not_increment_count
internal force_inline void append_no_add (String_Builder* sb, string s); // for appending null terminators, does not increment count.
void print_to_builder (String_Builder* sb, string format, ...);
void print_to_builder (String_Builder* sb, string format, va_list args);
string string_view (String_Builder* sb);
internal force_inline void reset_string_builder (String_Builder* sb);
internal force_inline void reset_string_builder (String_Builder* sb, bool keep_memory=false);
force_inline string builder_to_string (String_Builder* sb); // returns string view
internal force_inline void free_string_builder (String_Builder* sb);

View File

@ -469,7 +469,7 @@ internal ArrayView<u8> read_entire_file (File file) {
}
internal ArrayView<u8> read_entire_file (string file_path, bool log_errors) {
File f = file_open(file_path, log_errors=log_errors);
File f = file_open(file_path, false, false, log_errors);
if (!file_is_valid(f)) return {};
ArrayView<u8> file_data = read_entire_file(f);
@ -504,8 +504,9 @@ internal bool write_entire_file (string file_path, ArrayView<u8> file_data) {
return write_entire_file(file_path, file_data.data, file_data.count);
}
// #window_creation
Window_Type create_window (string new_window_name) {
// #window_creation -> put API in OS_Win32.h
// void initialize_window_class(float background_color[3]) {}
Window_Type create_window (string new_window_name, bool center_window) {
return 0;
}

View File

@ -222,14 +222,20 @@ internal void Main_Entry_Point (int argc, WCHAR **argv) {
log("Hello. There are %s things here\n", string_literal_example.data);
print("Hello, I am just a printed message to stdout\n\n");
// Testing file writes and reads:
print("Writing some nonsense to a file.\n");
bool success = write_entire_file("D:/TempLocal/junk.txt", to_view(result));
log("Done. Success: %d\n", success);
// push_allocator(allocator(thread_context()->arena));
push_allocator(GPAllocator());
string file_path = "D:/Work/OpenBCI/ToolZ/prototyping-gui-main/modules/native-proto-lib/native-sdk-prototyping/src/SignalProcessing.cpp";
ArrayView<u8> file_data = read_entire_file(file_path, true);
log("file_data: \n");
log("%s\n", file_data.data);
}
// { string s = "hello I am cool";
// wstring sw = utf8_to_wide(s);
// printf("testing operator overload: %d\n", !s);
// printf("testing utf8_to_wide: %ls\n", (wchar_t*)sw.data);
// }
// debug_break();
// ImGui_Application();
// #TODO: #Main - `Main_Entry_Point`