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;
// 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();
}

View File

@@ -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<Layer> &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<Layer> &ptr) { return ptr.get() == layer; });
if (match != m_LayerStack.end()) {
layer->OnDetach();

View File

@@ -2,6 +2,7 @@
#include "Layer.h"
#include <iterator>
#include <memory>
#include <vector>
namespace SakuraVNE {
@@ -15,22 +16,22 @@ public:
void PushOverLay(Layer *layer);
void PopOverlay(Layer *layer);
std::vector<Layer *>::iterator begin() { return m_LayerStack.begin(); }
std::vector<Layer *>::iterator end() { return m_LayerStack.end(); }
std::vector<Layer *>::reverse_iterator rbegin() { return m_LayerStack.rbegin(); }
std::vector<Layer *>::reverse_iterator rend() { return m_LayerStack.rend(); }
std::vector<std::unique_ptr<Layer>>::iterator begin() { return m_LayerStack.begin(); }
std::vector<std::unique_ptr<Layer>>::iterator end() { return m_LayerStack.end(); }
std::vector<std::unique_ptr<Layer>>::reverse_iterator rbegin() { return m_LayerStack.rbegin(); }
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<Layer *>::const_iterator end() const { return m_LayerStack.end(); }
std::vector<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_iterator begin() const { return m_LayerStack.begin(); }
std::vector<std::unique_ptr<Layer>>::const_iterator end() const { return m_LayerStack.end(); }
std::vector<std::unique_ptr<Layer>>::const_reverse_iterator rbegin() const { return m_LayerStack.rbegin(); }
std::vector<std::unique_ptr<Layer>>::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<Layer *> &GetLayers() const { return m_LayerStack; }
inline const std::vector<std::unique_ptr<Layer>> &GetLayers() const { return m_LayerStack; }
#endif
private:
std::vector<Layer *> m_LayerStack;
std::vector<std::unique_ptr<Layer>> m_LayerStack;
unsigned int m_LayerIndex = 0;
};
} // namespace SakuraVNE

View File

@@ -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;
}