changed layer stack vector to contain uniqe_ptr of layers

This commit is contained in:
2026-04-02 11:23:36 +02:00
parent fe265c6994
commit 5aa1e39cdd
4 changed files with 19 additions and 17 deletions

View File

@@ -95,7 +95,7 @@ void Application::Run() {
oldTime = currentTime; oldTime = currentTime;
// Update functions before rendereing // Update functions before rendereing
for (auto layer : m_LayerStack) { for (auto &layer : m_LayerStack) {
layer->OnFrame(time); layer->OnFrame(time);
} }
@@ -129,7 +129,7 @@ void Application::Run() {
SDL_SetRenderDrawColor(m_Renderer, (Uint8)111, (Uint8)232, (Uint8)168, (Uint8)0); SDL_SetRenderDrawColor(m_Renderer, (Uint8)111, (Uint8)232, (Uint8)168, (Uint8)0);
SDL_RenderClear(m_Renderer); SDL_RenderClear(m_Renderer);
for (auto layer : m_LayerStack) { for (auto &layer : m_LayerStack) {
layer->OnImGuiRender(); layer->OnImGuiRender();
} }

View File

@@ -4,19 +4,20 @@
namespace SakuraVNE { namespace SakuraVNE {
LayerStack::~LayerStack() { LayerStack::~LayerStack() {
for (Layer *layer : m_LayerStack) { for (auto &layer : m_LayerStack) {
layer->OnDetach(); 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) { void LayerStack::PushLayer(Layer *layer) {
m_LayerStack.emplace(m_LayerStack.begin() + m_LayerIndex, layer); m_LayerStack.emplace(m_LayerStack.begin() + m_LayerIndex, layer);
m_LayerIndex++; m_LayerIndex++;
} }
void LayerStack::PopLayer(Layer *layer) { 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<Layer> &ptr) { return ptr.get() == layer; });
if (match != m_LayerStack.begin() + m_LayerIndex) { if (match != m_LayerStack.begin() + m_LayerIndex) {
layer->OnDetach(); layer->OnDetach();
m_LayerStack.erase(match); 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::PushOverLay(Layer *layer) { m_LayerStack.emplace_back(layer); }
void LayerStack::PopOverlay(Layer *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<Layer> &ptr) { return ptr.get() == layer; });
if (match != m_LayerStack.end()) { if (match != m_LayerStack.end()) {
layer->OnDetach(); layer->OnDetach();

View File

@@ -2,6 +2,7 @@
#include "Layer.h" #include "Layer.h"
#include <iterator> #include <iterator>
#include <memory>
#include <vector> #include <vector>
namespace SakuraVNE { namespace SakuraVNE {
@@ -15,22 +16,22 @@ public:
void PushOverLay(Layer *layer); void PushOverLay(Layer *layer);
void PopOverlay(Layer *layer); void PopOverlay(Layer *layer);
std::vector<Layer *>::iterator begin() { return m_LayerStack.begin(); } std::vector<std::unique_ptr<Layer>>::iterator begin() { return m_LayerStack.begin(); }
std::vector<Layer *>::iterator end() { return m_LayerStack.end(); } std::vector<std::unique_ptr<Layer>>::iterator end() { return m_LayerStack.end(); }
std::vector<Layer *>::reverse_iterator rbegin() { return m_LayerStack.rbegin(); } std::vector<std::unique_ptr<Layer>>::reverse_iterator rbegin() { return m_LayerStack.rbegin(); }
std::vector<Layer *>::reverse_iterator rend() { return m_LayerStack.rend(); } std::vector<std::unique_ptr<Layer>>::reverse_iterator rend() { return m_LayerStack.rend(); }
std::vector<Layer *>::const_iterator begin() const { return m_LayerStack.begin(); } std::vector<std::unique_ptr<Layer>>::const_iterator begin() const { return m_LayerStack.begin(); }
std::vector<Layer *>::const_iterator end() const { return m_LayerStack.end(); } std::vector<std::unique_ptr<Layer>>::const_iterator end() const { return m_LayerStack.end(); }
std::vector<Layer *>::const_reverse_iterator rbegin() const { return m_LayerStack.rbegin(); } std::vector<std::unique_ptr<Layer>>::const_reverse_iterator rbegin() const { return m_LayerStack.rbegin(); }
std::vector<Layer *>::const_reverse_iterator rend() const { return m_LayerStack.rend(); } std::vector<std::unique_ptr<Layer>>::const_reverse_iterator rend() const { return m_LayerStack.rend(); }
#ifdef DEBUG #ifdef DEBUG
// this is only used for the tests for now, so it will be taken out of the release build // this is only used for the tests for now, so it will be taken out of the release build
inline const std::vector<Layer *> &GetLayers() const { return m_LayerStack; } inline const std::vector<std::unique_ptr<Layer>> &GetLayers() const { return m_LayerStack; }
#endif #endif
private: private:
std::vector<Layer *> m_LayerStack; std::vector<std::unique_ptr<Layer>> m_LayerStack;
unsigned int m_LayerIndex = 0; unsigned int m_LayerIndex = 0;
}; };
} // namespace SakuraVNE } // namespace SakuraVNE

View File

@@ -42,7 +42,7 @@ TEST_CASE("Layer operations", "[Layer]") {
lstack.PopOverlay(layer6); lstack.PopOverlay(layer6);
bool hasLayer2InVec = false; bool hasLayer2InVec = false;
for (auto layer : layers) { for (auto &layer : layers) {
if (layer->GetName() == "layer6") { if (layer->GetName() == "layer6") {
hasLayer2InVec = true; hasLayer2InVec = true;
} }