From b73ab7bf9662dd6211f530c3ced90d3ad8675814 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Mon, 4 Jan 2016 18:00:50 +0100 Subject: [PATCH] Improve `SurfaceStack` --- src/Surfaces/SurfaceStack.cpp | 28 ++++++++++++++++++---------- src/Surfaces/SurfaceStack.h | 13 ++++++------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/Surfaces/SurfaceStack.cpp b/src/Surfaces/SurfaceStack.cpp index 47a5329..ef5351c 100644 --- a/src/Surfaces/SurfaceStack.cpp +++ b/src/Surfaces/SurfaceStack.cpp @@ -5,13 +5,22 @@ namespace piMapper { SurfaceStack::SurfaceStack(){} -void SurfaceStack::push_back(ofx::piMapper::BaseSurface & s){ +void SurfaceStack::push_back(BaseSurface * s){ _surfaces.push_back(s); } -void SurfaceStack::pop_back(){ - if(_surfaces.size() > 0){ - _surfaces.pop_back(); +void SurfaceStack::erase(int i){ + delete _surfaces[i]; + _surfaces.erase(_surfaces.begin() + i); +} + +void SurfaceStack::swap(int a, int b){ + std::swap(_surfaces[a], _surfaces[b]); +} + +void SurfaceStack::draw(){ + for(int i = 0; i < _surfaces.size(); ++i){ + _surfaces[i]->draw(); } } @@ -19,12 +28,11 @@ int SurfaceStack::size(){ return _surfaces.size(); } -void SurfaceStack::erase(int pos){ - _surfaces.erase(_surfaces.begin() + pos); -} - -void SurfaceStack::swap(ofx::piMapper::BaseSurface * a, ofx::piMapper::BaseSurface * b){ - std::swap(a, b); +BaseSurface * SurfaceStack::operator[](int i){ + if(i >= _surfaces.size()){ + throw runtime_error("SurfaceStack index out of bounds"); + } + return _surfaces[i]; } } // namespace piMapper diff --git a/src/Surfaces/SurfaceStack.h b/src/Surfaces/SurfaceStack.h index 13f45ff..113f260 100644 --- a/src/Surfaces/SurfaceStack.h +++ b/src/Surfaces/SurfaceStack.h @@ -11,18 +11,17 @@ class SurfaceStack { public: SurfaceStack(); - void push_back(BaseSurface & s); - void pop_back(); - void erase(int pos); - void swap(BaseSurface * a, BaseSurface * b); + void push_back(BaseSurface * s); + void erase(int i); + void swap(int a, int b); void draw(); int size(); - - BaseSurface * at(int pos); + + BaseSurface * operator[](int i); private: - vector _surfaces; + vector _surfaces; }; } // namespace piMapper