From e050dce79b67ae6386240567a994454711ab998d Mon Sep 17 00:00:00 2001 From: hachem Date: Thu, 14 Aug 2025 00:42:05 +0200 Subject: [add]: Custom memory managers and fix includes --- src/Core/Application.cpp | 8 ++++---- src/Core/Application.h | 10 ++++------ src/Core/Camera.cpp | 1 + src/Core/Log.cpp | 7 ++++--- src/Core/Log.h | 7 ++++--- src/Core/Memory.h | 24 ++++++++++++++++++++++++ src/Core/StateManager.cpp | 2 +- src/Core/StateManager.h | 10 +++++----- src/Core/Window.cpp | 2 +- src/Core/Window.h | 5 +++-- 10 files changed, 51 insertions(+), 25 deletions(-) create mode 100644 src/Core/Memory.h (limited to 'src/Core') diff --git a/src/Core/Application.cpp b/src/Core/Application.cpp index 4a0726d..a886327 100644 --- a/src/Core/Application.cpp +++ b/src/Core/Application.cpp @@ -16,7 +16,7 @@ namespace Donut { s_Instance = this; - m_Window = std::make_unique(name, width, height); + m_Window = CreateScope(name, width, height); m_Window->SetEventCallback([this](Event& event) { OnEvent(event); @@ -109,9 +109,9 @@ namespace Donut Renderer::OnWindowResize(1280, 720); RenderCommand::SetFaceCulling(false); - m_StateManager = std::make_unique(); - m_StateManager->RegisterState("Config", std::make_unique()); - m_StateManager->RegisterState("Simulation", std::make_unique()); + m_StateManager = CreateScope(); + m_StateManager->RegisterState("Config", CreateScope()); + m_StateManager->RegisterState("Simulation", CreateScope()); m_StateManager->SwitchToState("Config"); } diff --git a/src/Core/Application.h b/src/Core/Application.h index 92ab781..3d0ba25 100644 --- a/src/Core/Application.h +++ b/src/Core/Application.h @@ -1,12 +1,10 @@ #pragma once -#include -#include - +#include "Memory.h" #include "Window.h" #include "Event.h" -#include "StateManager.h" #include "Log.h" +#include "StateManager.h" namespace Donut { @@ -29,8 +27,8 @@ namespace Donut void OnRender(); void OnEvent(Event& event); private: - std::unique_ptr m_StateManager; - std::unique_ptr m_Window; + Scope m_StateManager; + Scope m_Window; bool m_Running; bool m_Minimized; diff --git a/src/Core/Camera.cpp b/src/Core/Camera.cpp index ecfb6df..4dff2d7 100644 --- a/src/Core/Camera.cpp +++ b/src/Core/Camera.cpp @@ -1,4 +1,5 @@ #include "Camera.h" + #include namespace Donut diff --git a/src/Core/Log.cpp b/src/Core/Log.cpp index 90c7094..f2f3e44 100644 --- a/src/Core/Log.cpp +++ b/src/Core/Log.cpp @@ -1,4 +1,5 @@ #include "Log.h" + #include #if defined(DONUT_WINDOWS) @@ -7,11 +8,11 @@ namespace Donut { - std::shared_ptr Logger::s_Logger; + Ref Logger::s_Logger; void Logger::Init() { - s_Logger = std::make_shared(); + s_Logger = CreateRef(); s_Logger->SetLogLevel(LogLevel::INFO); s_Logger->EnableConsoleOutput(true); s_Logger->EnableFileOutput(true); @@ -27,7 +28,7 @@ namespace Donut s_Logger.reset(); } - std::shared_ptr Logger::GetLogger() + Ref Logger::GetLogger() { return s_Logger; } diff --git a/src/Core/Log.h b/src/Core/Log.h index ad1b959..c7b2e47 100644 --- a/src/Core/Log.h +++ b/src/Core/Log.h @@ -1,7 +1,8 @@ #pragma once +#include "Core/Memory.h" + #include -#include #include #include #include @@ -28,7 +29,7 @@ namespace Donut static void Init(); static void Shutdown(); - static std::shared_ptr GetLogger(); + static Ref GetLogger(); template static void Trace(const std::string_view& format, const Args&... args) @@ -135,7 +136,7 @@ namespace Donut std::ofstream m_LogFile; std::mutex m_Mutex; - static std::shared_ptr s_Logger; + static Ref s_Logger; }; } diff --git a/src/Core/Memory.h b/src/Core/Memory.h new file mode 100644 index 0000000..0abc6b1 --- /dev/null +++ b/src/Core/Memory.h @@ -0,0 +1,24 @@ +#pragma once + +#include + +namespace Donut +{ + template + using Ref = std::shared_ptr; + + template + using Scope = std::unique_ptr; + + template + constexpr Scope CreateScope(Args&& ... args) + { + return std::make_unique(std::forward(args)...); + } + + template + constexpr Ref CreateRef(Args&& ... args) + { + return std::make_shared(std::forward(args)...); + } +}; \ No newline at end of file diff --git a/src/Core/StateManager.cpp b/src/Core/StateManager.cpp index 30d6b1d..266bafa 100644 --- a/src/Core/StateManager.cpp +++ b/src/Core/StateManager.cpp @@ -19,7 +19,7 @@ namespace Donut m_CurrentStateName = ""; } - void StateManager::RegisterState(const std::string& stateName, std::unique_ptr state) + void StateManager::RegisterState(const std::string& stateName, Scope state) { if (m_States.find(stateName) != m_States.end()) DONUT_WARN("State '{}' already exists, overwriting", stateName); diff --git a/src/Core/StateManager.h b/src/Core/StateManager.h index 06370f3..c0b2b13 100644 --- a/src/Core/StateManager.h +++ b/src/Core/StateManager.h @@ -1,11 +1,11 @@ #pragma once -#include +#include "Memory.h" +#include "State.h" + #include #include -#include "State.h" - namespace Donut { class StateManager @@ -18,7 +18,7 @@ namespace Donut void Render(); void OnEvent(Event& event); - void RegisterState(const std::string& stateName, std::unique_ptr state); + void RegisterState(const std::string& stateName, Scope state); void SwitchToState(const std::string& stateName); std::string GetCurrentStateName() const { return m_CurrentStateName; } @@ -34,6 +34,6 @@ namespace Donut State* m_CurrentState = nullptr; std::string m_CurrentStateName = ""; - std::unordered_map> m_States; + std::unordered_map> m_States; }; } diff --git a/src/Core/Window.cpp b/src/Core/Window.cpp index 832235a..73bd8db 100644 --- a/src/Core/Window.cpp +++ b/src/Core/Window.cpp @@ -1,6 +1,6 @@ #include "Window.h" + #include -#include namespace Donut { diff --git a/src/Core/Window.h b/src/Core/Window.h index 97bbbe2..c598bf2 100644 --- a/src/Core/Window.h +++ b/src/Core/Window.h @@ -1,10 +1,11 @@ #pragma once -#include -#include #include "Event.h" #include "Log.h" +#include +#include + namespace Donut { class Window -- cgit v1.3