Add Serializer module
This commit is contained in:
parent
efdb057361
commit
7fe5176e41
18
exe_main.cpp
18
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")
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -41,6 +41,7 @@
|
||||
#include <stdint.h>
|
||||
|
||||
// Primitive types.
|
||||
// typedef nullptr null
|
||||
typedef uint8_t u8;
|
||||
typedef uint16_t u16;
|
||||
typedef uint32_t u32;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
14
lib/Base/Serializer.cpp
Normal 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
55
lib/Base/Serializer.h
Normal 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));
|
||||
}
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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.";
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user