From 0d8b874c0048ca088bb9e353a5f7c62e1f8cd0e8 Mon Sep 17 00:00:00 2001 From: hachem Date: Thu, 14 Aug 2025 00:42:05 +0200 Subject: feat: 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/state_manager.cpp | 2 +- src/core/state_manager.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 b05e2b5..f2284cd 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 = create_scope(name, width, height); m_window->set_event_callback([this](Event& event) { on_event(event); @@ -109,9 +109,9 @@ namespace Donut Renderer::on_window_resize(1280, 720); RenderCommand::set_face_culling(false); - m_state_manager = std::make_unique(); - m_state_manager->register_state("Config", std::make_unique()); - m_state_manager->register_state("Simulation", std::make_unique()); + m_state_manager = create_scope(); + m_state_manager->register_state("Config", create_scope()); + m_state_manager->register_state("Simulation", create_scope()); m_state_manager->switch_to_state("Config"); } diff --git a/src/core/application.h b/src/core/application.h index 326e541..048503b 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 "state_manager.h" #include "log.h" +#include "state_manager.h" namespace Donut { @@ -29,8 +27,8 @@ namespace Donut void on_render(); void on_event(Event& event); private: - std::unique_ptr m_state_manager; - std::unique_ptr m_window; + Scope m_state_manager; + Scope m_window; bool m_running; bool m_minimized; diff --git a/src/core/camera.cpp b/src/core/camera.cpp index 06866e4..f580191 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 ec031a5..0411e20 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 = create_ref(); s_logger->set_log_level(LogLevel::Info); s_logger->enable_console_output(true); s_logger->enable_file_output(true); @@ -27,7 +28,7 @@ namespace Donut s_logger.reset(); } - std::shared_ptr Logger::get_logger() + Ref Logger::get_logger() { return s_logger; } diff --git a/src/core/log.h b/src/core/log.h index 77324f5..1477226 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 get_logger(); + static Ref get_logger(); template static void trace(const std::string_view& format, const Args&... args) @@ -135,7 +136,7 @@ namespace Donut std::ofstream m_log_file; 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..cbfbe82 --- /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 create_scope(Args&& ... args) + { + return std::make_unique(std::forward(args)...); + } + + template + constexpr Ref create_ref(Args&& ... args) + { + return std::make_shared(std::forward(args)...); + } +}; diff --git a/src/core/state_manager.cpp b/src/core/state_manager.cpp index 5da601c..728df15 100644 --- a/src/core/state_manager.cpp +++ b/src/core/state_manager.cpp @@ -19,7 +19,7 @@ namespace Donut m_current_state_name = ""; } - void StateManager::register_state(const std::string& state_name, std::unique_ptr state) + void StateManager::register_state(const std::string& state_name, Scope state) { if (m_states.find(state_name) != m_states.end()) DONUT_WARN("State '{}' already exists, overwriting", state_name); diff --git a/src/core/state_manager.h b/src/core/state_manager.h index 7d5e734..469c48f 100644 --- a/src/core/state_manager.h +++ b/src/core/state_manager.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 on_event(Event& event); - void register_state(const std::string& state_name, std::unique_ptr state); + void register_state(const std::string& state_name, Scope state); void switch_to_state(const std::string& state_name); std::string get_current_state_name() const { return m_current_state_name; } @@ -34,6 +34,6 @@ namespace Donut State* m_current_state = nullptr; std::string m_current_state_name = ""; - std::unordered_map> m_states; + std::unordered_map> m_states; }; } diff --git a/src/core/window.cpp b/src/core/window.cpp index a32dddb..f598357 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 ae79b6d..256f708 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