diff options
| author | hachem <im@hachem.wtf> | 2025-08-14 00:42:05 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-08-14 00:42:05 +0200 |
| commit | 0d8b874c0048ca088bb9e353a5f7c62e1f8cd0e8 (patch) | |
| tree | 2c0f3b13161489e4e91994882f8f2ed67a20bc0e /src/core | |
| parent | 9671d5e54484b8bce261207d08ff15053ae24e48 (diff) | |
feat: custom memory managers and fix includes
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/application.cpp | 8 | ||||
| -rw-r--r-- | src/core/application.h | 10 | ||||
| -rw-r--r-- | src/core/camera.cpp | 1 | ||||
| -rw-r--r-- | src/core/log.cpp | 7 | ||||
| -rw-r--r-- | src/core/log.h | 7 | ||||
| -rw-r--r-- | src/core/memory.h | 24 | ||||
| -rw-r--r-- | src/core/state_manager.cpp | 2 | ||||
| -rw-r--r-- | src/core/state_manager.h | 10 | ||||
| -rw-r--r-- | src/core/window.cpp | 2 | ||||
| -rw-r--r-- | src/core/window.h | 5 |
10 files changed, 51 insertions, 25 deletions
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<Window>(name, width, height); + m_window = create_scope<Window>(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<StateManager>(); - m_state_manager->register_state("Config", std::make_unique<ConfigState>()); - m_state_manager->register_state("Simulation", std::make_unique<SimulationState>()); + m_state_manager = create_scope<StateManager>(); + m_state_manager->register_state("Config", create_scope<ConfigState>()); + m_state_manager->register_state("Simulation", create_scope<SimulationState>()); 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 <memory> -#include <functional> - +#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<StateManager> m_state_manager; - std::unique_ptr<Window> m_window; + Scope<StateManager> m_state_manager; + Scope<Window> 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 <glm/gtc/quaternion.hpp> 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 <filesystem> #if defined(DONUT_WINDOWS) @@ -7,11 +8,11 @@ namespace Donut { - std::shared_ptr<Logger> Logger::s_logger; + Ref<Logger> Logger::s_logger; void Logger::init() { - s_logger = std::make_shared<Logger>(); + s_logger = create_ref<Logger>(); 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> Logger::get_logger() + Ref<Logger> 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 <string> -#include <memory> #include <vector> #include <sstream> #include <iostream> @@ -28,7 +29,7 @@ namespace Donut static void init(); static void shutdown(); - static std::shared_ptr<Logger> get_logger(); + static Ref<Logger> get_logger(); template<typename... Args> 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<Logger> s_logger; + static Ref<Logger> 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 <memory> + +namespace Donut +{ + template<typename T> + using Ref = std::shared_ptr<T>; + + template<typename T> + using Scope = std::unique_ptr<T>; + + template<typename T, typename ... Args> + constexpr Scope<T> create_scope(Args&& ... args) + { + return std::make_unique<T>(std::forward<Args>(args)...); + } + + template<typename T, typename ... Args> + constexpr Ref<T> create_ref(Args&& ... args) + { + return std::make_shared<T>(std::forward<Args>(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> state) + void StateManager::register_state(const std::string& state_name, Scope<State> 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 <memory> +#include "memory.h" +#include "state.h" + #include <string> #include <unordered_map> -#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> state); + void register_state(const std::string& state_name, Scope<State> 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<std::string, std::unique_ptr<State>> m_states; + std::unordered_map<std::string, Scope<State>> 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 <cstdint> -#include <iostream> 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 <GLFW/glfw3.h> -#include <string> #include "event.h" #include "log.h" +#include <GLFW/glfw3.h> +#include <string> + namespace Donut { class Window |
