hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2025-08-14 00:42:05 +0200
committerhachem <im@hachem.wtf>2025-08-14 00:42:05 +0200
commit0d8b874c0048ca088bb9e353a5f7c62e1f8cd0e8 (patch)
tree2c0f3b13161489e4e91994882f8f2ed67a20bc0e /src/core
parent9671d5e54484b8bce261207d08ff15053ae24e48 (diff)
feat: custom memory managers and fix includes
Diffstat (limited to 'src/core')
-rw-r--r--src/core/application.cpp8
-rw-r--r--src/core/application.h10
-rw-r--r--src/core/camera.cpp1
-rw-r--r--src/core/log.cpp7
-rw-r--r--src/core/log.h7
-rw-r--r--src/core/memory.h24
-rw-r--r--src/core/state_manager.cpp2
-rw-r--r--src/core/state_manager.h10
-rw-r--r--src/core/window.cpp2
-rw-r--r--src/core/window.h5
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