From 7fe5176e410853a5ac3f0c360bfe07ad27e5ed6b Mon Sep 17 00:00:00 2001 From: Musa Mahmood Date: Fri, 28 Nov 2025 09:03:20 -0500 Subject: [PATCH] Add `Serializer` module --- exe_main.cpp | 18 +++++------ lib/Base/Arena_Array.h | 2 ++ lib/Base/Base.h | 1 + lib/Base/Base_Thread_Context.h | 4 +++ lib/Base/ErrorType.cpp | 17 +++++++++-- lib/Base/Serializer.cpp | 14 +++++++++ lib/Base/Serializer.h | 55 ++++++++++++++++++++++++++++++++++ lib/Base/String.cpp | 4 +++ lib/Base/String.h | 1 + lib_main.cpp | 3 ++ src/Base_Entry_Point.cpp | 4 +-- 11 files changed, 110 insertions(+), 13 deletions(-) create mode 100644 lib/Base/Serializer.cpp create mode 100644 lib/Base/Serializer.h diff --git a/exe_main.cpp b/exe_main.cpp index 3dec0a2..1f4b221 100644 --- a/exe_main.cpp +++ b/exe_main.cpp @@ -1,16 +1,16 @@ #include "lib_main.cpp" -#include "lib/third_party/dear-imgui/imgui.cpp" -#include "lib/third_party/dear-imgui/imgui_widgets.cpp" -#include "lib/third_party/dear-imgui/imgui_draw.cpp" -#include "lib/third_party/dear-imgui/imgui_tables.cpp" +// #include "lib/third_party/dear-imgui/imgui.cpp" +// #include "lib/third_party/dear-imgui/imgui_widgets.cpp" +// #include "lib/third_party/dear-imgui/imgui_draw.cpp" +// #include "lib/third_party/dear-imgui/imgui_tables.cpp" // #include "lib/third_party/dear-imgui/imgui_demo.cpp" -#include "lib/third_party/dear-imgui/imgui_impl_dx11.cpp" -#include "lib/third_party/dear-imgui/imgui_impl_win32.cpp" +// #include "lib/third_party/dear-imgui/imgui_impl_dx11.cpp" +// #include "lib/third_party/dear-imgui/imgui_impl_win32.cpp" -#include "lib/third_party/dear-imgui/imgui.h" -#include "lib/third_party/dear-imgui/imgui_impl_win32.h" -#include "lib/third_party/dear-imgui/imgui_impl_dx11.h" +// #include "lib/third_party/dear-imgui/imgui.h" +// #include "lib/third_party/dear-imgui/imgui_impl_win32.h" +// #include "lib/third_party/dear-imgui/imgui_impl_dx11.h" #pragma comment(lib, "d3d11") #pragma comment(lib, "d3dcompiler") diff --git a/lib/Base/Arena_Array.h b/lib/Base/Arena_Array.h index 6308297..2ec2b7b 100644 --- a/lib/Base/Arena_Array.h +++ b/lib/Base/Arena_Array.h @@ -189,11 +189,13 @@ template void init_range (T* ptr, s64 start_offset, s64 end_offset) } template void poison_range (ArenaArray& array, s64 start, s64 count) { +#if BUILD_DEBUG Assert(start >= 0 && start < array.count); Assert(start + count <= array.count); // Check that these ranges make sense T* start_address = &array[start]; memset(start_address, 0xCD, count * sizeof(T)); +#endif } template force_inline void array_reset (ArenaArray& array) { diff --git a/lib/Base/Base.h b/lib/Base/Base.h index 0f021f6..8989cf6 100644 --- a/lib/Base/Base.h +++ b/lib/Base/Base.h @@ -41,6 +41,7 @@ #include // Primitive types. +// typedef nullptr null typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; diff --git a/lib/Base/Base_Thread_Context.h b/lib/Base/Base_Thread_Context.h index f2e46d7..8b241d6 100644 --- a/lib/Base/Base_Thread_Context.h +++ b/lib/Base/Base_Thread_Context.h @@ -16,6 +16,10 @@ struct Thread_Context { Thread* thread_that_created_me = nullptr; // so we can remove from above array string thread_name; + + Allocator error_allocator = GPAllocator(); + Error* first_error = nullptr; + Error* current_error = nullptr; }; // C_LINKAGE thread_static TCTX* tctx_thread_local; diff --git a/lib/Base/ErrorType.cpp b/lib/Base/ErrorType.cpp index dbb4f2c..10b3f01 100644 --- a/lib/Base/ErrorType.cpp +++ b/lib/Base/ErrorType.cpp @@ -13,11 +13,24 @@ struct Error { s64 count; u8* data; ErrorClass severity = ErrorClass::NONE; - Error* previous_error; // if we're passing errors up the callstack. + s32 thread_id; + s32 source_line; + s32 path_length; + char* path; - Arena* arena; + // Linked list to errors + Error* previous_error; // if we're passing errors up the callstack. + Error* next_error; + + // Arena* arena; + + // Error () { memset(this, 0, sizeof(*this)); } }; +// string create_error(ErrorClass severity, string fmt, ...) { + +// } + string to_string (Error error) { return { error.count, error.data }; } diff --git a/lib/Base/Serializer.cpp b/lib/Base/Serializer.cpp new file mode 100644 index 0000000..b2a5c7d --- /dev/null +++ b/lib/Base/Serializer.cpp @@ -0,0 +1,14 @@ +force_inline Serializer* new_serializer (Arena_Reserve new_reserve) { + return arena_array_new(1, new_reserve); +} + +force_inline void reset_serializer (Serializer* serializer) { + poison_range(*serializer, 0, serializer->count); + reset_keeping_memory(*serializer); +} + +force_inline void free_serializer (Serializer* serializer) { + arena_array_free(*serializer); +} + +// #redundant to_view () #note, just call to_view (ArenaArray&) \ No newline at end of file diff --git a/lib/Base/Serializer.h b/lib/Base/Serializer.h new file mode 100644 index 0000000..9b91154 --- /dev/null +++ b/lib/Base/Serializer.h @@ -0,0 +1,55 @@ +typedef ArenaArray Serializer; + +force_inline Serializer* new_serializer (Arena_Reserve new_reserve=Arena_Reserve::Size_2G); +force_inline void reset_serializer (Serializer* serializer); +force_inline void free_serializer (Serializer* serializer); + +// force_inline ArrayView to_view (Serializer* serializer); #redundant, just call to_view (ArenaArray&) + +template force_inline void Add (Serializer* serializer, T item) { + T* current_point = &serializer->data[serializer->count]; + s64 final_count = serializer->allocated + sizeof(T); + + if (serializer->allocated < final_count) { + array_reserve(*serializer, final_count); + } + + memcpy(current_point, &item, sizeof(T)); + + serializer->count += sizeof(T); +} + +template force_inline void AddArray_NoSize (Serializer* serializer, ArrayView view) { + T* current_point = &serializer->data[serializer->count]; + s64 final_count = serializer->allocated + (view.count * sizeof(T)); + + if (serializer->allocated < final_count) { + array_reserve(*serializer, final_count); + } + + memcpy(current_point, view.data, view.count * sizeof(T)); + + serializer->count += view.count * sizeof(T); +} + +template force_inline void AddArray (Serializer* serializer, ArrayView view) { + Add(serializer, view.count); + AddArray_NoSize(serializer, view); +} + +template force_inline void AddString (Serializer* serializer, string s) { + Add(serializer, s.count); + AddArray_NoSize(serializer, to_view(s)); +} + +template force_inline void AddString32 (Serializer* serializer, string s) { + u32 string_length = (u32)s.count; + Add(serializer, string_length); + AddArray_NoSize(serializer, to_view(s)); +} + +template force_inline void AddString16 (Serializer* serializer, string s) { + u16 string_length = (u16)s.count; + Add(serializer, string_length); + AddArray_NoSize(serializer, to_view(s)); +} diff --git a/lib/Base/String.cpp b/lib/Base/String.cpp index 7b2e8be..99b05f8 100644 --- a/lib/Base/String.cpp +++ b/lib/Base/String.cpp @@ -53,6 +53,10 @@ string to_string (ArrayView str) { return {str.count, str.data}; } +ArrayView to_view (string s) { + return {s.count, s.data}; +} + void string_free (string& s) { internal_free(s.data); diff --git a/lib/Base/String.h b/lib/Base/String.h index 6a694d0..238dc12 100644 --- a/lib/Base/String.h +++ b/lib/Base/String.h @@ -75,6 +75,7 @@ u8* to_c_string (string s); // #allocates string copy_string (string s); // #allocates, returned string is #null-terminated. string copy_string (char* c_string); // #allocates, returned string is #null-terminated. string to_string (ArrayView str); +ArrayView to_view (string s); void free(string& s); // String manipulation & comparison diff --git a/lib_main.cpp b/lib_main.cpp index ba8f876..cfe40bc 100644 --- a/lib_main.cpp +++ b/lib_main.cpp @@ -22,6 +22,9 @@ #include "lib/Base/Logger.h" #include "lib/Base/String.cpp" +#include "lib/Base/Serializer.h" +#include "lib/Base/Serializer.cpp" + #include "lib/Base/ErrorType.cpp" #include "lib/Base/Base_Thread_Context.h" #include "lib/Base/Timing.h" diff --git a/src/Base_Entry_Point.cpp b/src/Base_Entry_Point.cpp index 75a2d78..82749a3 100644 --- a/src/Base_Entry_Point.cpp +++ b/src/Base_Entry_Point.cpp @@ -13,7 +13,7 @@ internal void Main_Entry_Point (int argc, WCHAR **argv); } #endif #endif - +/* #include #include #include "ImGui_Supplementary.cpp" @@ -179,7 +179,7 @@ void ImGui_Application () { CleanupDeviceD3D(); ::DestroyWindow(hwnd); ::UnregisterClassW(wc.lpszClassName, wc.hInstance); -} +}*/ string string_literal_example = "Hello, I am a string literal.";