From 5aa1e39cdd6c88bfea7b443db720ea969f69cbe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hatvani=20Tam=C3=A1s?= Date: Thu, 2 Apr 2026 11:23:36 +0200 Subject: [PATCH] changed layer stack vector to contain uniqe_ptr of layers --- SakuraCore/src/Application.cpp | 4 ++-- SakuraCore/src/LayerStack.cpp | 9 +++++---- SakuraCore/src/LayerStack.h | 21 +++++++++++---------- SakuraCore/test/test.cpp | 2 +- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/SakuraCore/src/Application.cpp b/SakuraCore/src/Application.cpp index 2e7c611..080547c 100644 --- a/SakuraCore/src/Application.cpp +++ b/SakuraCore/src/Application.cpp @@ -95,7 +95,7 @@ void Application::Run() { oldTime = currentTime; // Update functions before rendereing - for (auto layer : m_LayerStack) { + for (auto &layer : m_LayerStack) { layer->OnFrame(time); } @@ -129,7 +129,7 @@ void Application::Run() { SDL_SetRenderDrawColor(m_Renderer, (Uint8)111, (Uint8)232, (Uint8)168, (Uint8)0); SDL_RenderClear(m_Renderer); - for (auto layer : m_LayerStack) { + for (auto &layer : m_LayerStack) { layer->OnImGuiRender(); } diff --git a/SakuraCore/src/LayerStack.cpp b/SakuraCore/src/LayerStack.cpp index 208035a..ba099b2 100644 --- a/SakuraCore/src/LayerStack.cpp +++ b/SakuraCore/src/LayerStack.cpp @@ -4,19 +4,20 @@ namespace SakuraVNE { LayerStack::~LayerStack() { - for (Layer *layer : m_LayerStack) { + for (auto &layer : m_LayerStack) { layer->OnDetach(); - delete layer; + // delete layer; } } +// should these be fixed with std::move and take layer param as std::unique_ptr? void LayerStack::PushLayer(Layer *layer) { m_LayerStack.emplace(m_LayerStack.begin() + m_LayerIndex, layer); m_LayerIndex++; } void LayerStack::PopLayer(Layer *layer) { - auto match = std::find(m_LayerStack.begin(), m_LayerStack.begin() + m_LayerIndex, layer); + auto match = std::find_if(m_LayerStack.begin(), m_LayerStack.begin() + m_LayerIndex, [layer](const std::unique_ptr &ptr) { return ptr.get() == layer; }); if (match != m_LayerStack.begin() + m_LayerIndex) { layer->OnDetach(); m_LayerStack.erase(match); @@ -27,7 +28,7 @@ void LayerStack::PopLayer(Layer *layer) { void LayerStack::PushOverLay(Layer *layer) { m_LayerStack.emplace_back(layer); } void LayerStack::PopOverlay(Layer *layer) { - auto match = std::find(m_LayerStack.begin() + m_LayerIndex, m_LayerStack.end(), layer); + auto match = std::find_if(m_LayerStack.begin() + m_LayerIndex, m_LayerStack.end(), [layer](const std::unique_ptr &ptr) { return ptr.get() == layer; }); if (match != m_LayerStack.end()) { layer->OnDetach(); diff --git a/SakuraCore/src/LayerStack.h b/SakuraCore/src/LayerStack.h index 301e441..93e065d 100644 --- a/SakuraCore/src/LayerStack.h +++ b/SakuraCore/src/LayerStack.h @@ -2,6 +2,7 @@ #include "Layer.h" #include +#include #include namespace SakuraVNE { @@ -15,22 +16,22 @@ public: void PushOverLay(Layer *layer); void PopOverlay(Layer *layer); - std::vector::iterator begin() { return m_LayerStack.begin(); } - std::vector::iterator end() { return m_LayerStack.end(); } - std::vector::reverse_iterator rbegin() { return m_LayerStack.rbegin(); } - std::vector::reverse_iterator rend() { return m_LayerStack.rend(); } + std::vector>::iterator begin() { return m_LayerStack.begin(); } + std::vector>::iterator end() { return m_LayerStack.end(); } + std::vector>::reverse_iterator rbegin() { return m_LayerStack.rbegin(); } + std::vector>::reverse_iterator rend() { return m_LayerStack.rend(); } - std::vector::const_iterator begin() const { return m_LayerStack.begin(); } - std::vector::const_iterator end() const { return m_LayerStack.end(); } - std::vector::const_reverse_iterator rbegin() const { return m_LayerStack.rbegin(); } - std::vector::const_reverse_iterator rend() const { return m_LayerStack.rend(); } + std::vector>::const_iterator begin() const { return m_LayerStack.begin(); } + std::vector>::const_iterator end() const { return m_LayerStack.end(); } + std::vector>::const_reverse_iterator rbegin() const { return m_LayerStack.rbegin(); } + std::vector>::const_reverse_iterator rend() const { return m_LayerStack.rend(); } #ifdef DEBUG // this is only used for the tests for now, so it will be taken out of the release build - inline const std::vector &GetLayers() const { return m_LayerStack; } + inline const std::vector> &GetLayers() const { return m_LayerStack; } #endif private: - std::vector m_LayerStack; + std::vector> m_LayerStack; unsigned int m_LayerIndex = 0; }; } // namespace SakuraVNE diff --git a/SakuraCore/test/test.cpp b/SakuraCore/test/test.cpp index fbaa274..0578bc5 100644 --- a/SakuraCore/test/test.cpp +++ b/SakuraCore/test/test.cpp @@ -42,7 +42,7 @@ TEST_CASE("Layer operations", "[Layer]") { lstack.PopOverlay(layer6); bool hasLayer2InVec = false; - for (auto layer : layers) { + for (auto &layer : layers) { if (layer->GetName() == "layer6") { hasLayer2InVec = true; }