diff --git a/External/Imgui b/External/Imgui index 21d3299..eaa32bb 160000 --- a/External/Imgui +++ b/External/Imgui @@ -1 +1 @@ -Subproject commit 21d3299e588b5c702dcca0f448b4f937af369b4a +Subproject commit eaa32bb787574510baed7f73a1010ea7347ff202 diff --git a/Juliet/include/Core/Memory/MemoryArena.h b/Juliet/include/Core/Memory/MemoryArena.h index 55e158a..4f41918 100644 --- a/Juliet/include/Core/Memory/MemoryArena.h +++ b/Juliet/include/Core/Memory/MemoryArena.h @@ -51,6 +51,12 @@ namespace Juliet }; static_assert(sizeof(Arena) <= k_ArenaHeaderSize); + struct TempArena + { + Arena* Arena; + index_t Position; + }; + struct ArenaParams { uint64 ReserveSize = g_Arena_Default_Reserve_Size; @@ -97,4 +103,7 @@ namespace Juliet return static_cast(ArenaPush(arena, sizeof(Type) * count, Max(8ull, AlignOf(Type)), true JULIET_DEBUG_ONLY(, typeid(Type).name()))); } + + TempArena ArenaTempBegin(NonNullPtr arena); + void ArenaTempEnd(TempArena temp); } // namespace Juliet diff --git a/Juliet/src/Core/HotReload/Win32/Win32HotReload.cpp b/Juliet/src/Core/HotReload/Win32/Win32HotReload.cpp index be1a8ea..ef90048 100644 --- a/Juliet/src/Core/HotReload/Win32/Win32HotReload.cpp +++ b/Juliet/src/Core/HotReload/Win32/Win32HotReload.cpp @@ -56,8 +56,8 @@ namespace Juliet basePathLength + StringLength(code.TransientDLLName) + /* _ */ 1 + kTempDLLBufferSizeForID + 1 /* \0 */; // Allocate from Scratch Arena (transient) - index_t pos = ArenaPos(code.Arena); - auto tempDllPath = ArenaPushArray(code.Arena, tempDllMaxBufferSize); + TempArena temp = ArenaTempBegin(code.Arena); + auto tempDllPath = ArenaPushArray(temp.Arena, tempDllMaxBufferSize); for (uint32 attempt = 0; attempt < kMaxAttempts; ++attempt) { @@ -97,7 +97,7 @@ namespace Juliet break; } } - ArenaPopTo(code.Arena, pos); + ArenaTempEnd(temp); code.Dll = LoadDynamicLibrary(tempDllPath); if (code.Dll) diff --git a/Juliet/src/Core/Memory/MemoryArena.cpp b/Juliet/src/Core/Memory/MemoryArena.cpp index 81510be..9941f47 100644 --- a/Juliet/src/Core/Memory/MemoryArena.cpp +++ b/Juliet/src/Core/Memory/MemoryArena.cpp @@ -327,4 +327,15 @@ namespace Juliet size_t position = current->BasePosition + current->Position; return position; } + + TempArena ArenaTempBegin(NonNullPtr arena) + { + index_t position = ArenaPos(arena); + return { arena.Get(), position }; + } + + void ArenaTempEnd(TempArena temp) + { + ArenaPopTo(temp.Arena, temp.Position); + } } // namespace Juliet