Add Serializer module

This commit is contained in:
Musa Mahmood 2025-11-28 09:03:20 -05:00
parent efdb057361
commit 7fe5176e41
11 changed files with 110 additions and 13 deletions

View File

@ -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")

View File

@ -189,11 +189,13 @@ 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) {
#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 <typename T> force_inline void array_reset (ArenaArray<T>& array) {

View File

@ -41,6 +41,7 @@
#include <stdint.h>
// Primitive types.
// typedef nullptr null
typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;

View File

@ -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;

View File

@ -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 };
}

14
lib/Base/Serializer.cpp Normal file
View File

@ -0,0 +1,14 @@
force_inline Serializer* new_serializer (Arena_Reserve new_reserve) {
return arena_array_new<u8>(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<T>&)

55
lib/Base/Serializer.h Normal file
View File

@ -0,0 +1,55 @@
typedef ArenaArray<u8> 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<u8> to_view (Serializer* serializer); #redundant, just call to_view (ArenaArray<T>&)
template <typename T> 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 <typename T> force_inline void AddArray_NoSize (Serializer* serializer, ArrayView<T> 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 <typename T> force_inline void AddArray (Serializer* serializer, ArrayView<T> view) {
Add(serializer, view.count);
AddArray_NoSize(serializer, view);
}
template <typename T> force_inline void AddString (Serializer* serializer, string s) {
Add(serializer, s.count);
AddArray_NoSize(serializer, to_view(s));
}
template <typename T> 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 <typename T> force_inline void AddString16 (Serializer* serializer, string s) {
u16 string_length = (u16)s.count;
Add(serializer, string_length);
AddArray_NoSize(serializer, to_view(s));
}

View File

@ -53,6 +53,10 @@ string to_string (ArrayView<u8> str) {
return {str.count, str.data};
}
ArrayView<u8> to_view (string s) {
return {s.count, s.data};
}
void string_free (string& s) {
internal_free(s.data);

View File

@ -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<u8> str);
ArrayView<u8> to_view (string s);
void free(string& s);
// String manipulation & comparison

View File

@ -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"

View File

@ -13,7 +13,7 @@ internal void Main_Entry_Point (int argc, WCHAR **argv);
}
#endif
#endif
/*
#include <d3d11.h>
#include <tchar.h>
#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.";