1 /* 2 ** Windstille - A Sci-Fi Action-Adventure Game 3 ** Copyright (C) 2009 Ingo Ruhnke <grumbel@gmail.com> 4 ** 5 ** This program is free software: you can redistribute it and/or modify 6 ** it under the terms of the GNU General Public License as published by 7 ** the Free Software Foundation, either version 3 of the License, or 8 ** (at your option) any later version. 9 ** 10 ** This program is distributed in the hope that it will be useful, 11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 ** GNU General Public License for more details. 14 ** 15 ** You should have received a copy of the GNU General Public License 16 ** along with this program. If not, see <http://www.gnu.org/licenses/>. 17 */ 18 19 #ifndef HEADER_SUPERTUX_UTIL_CURRENTON_HPP 20 #define HEADER_SUPERTUX_UTIL_CURRENTON_HPP 21 22 /** 23 * A 'Currenton' allows access to the currently active instance of a 24 * class via the static current() function. It is kind of like a 25 * singleton, but without handling the object construction itself or 26 * in other words its a glorified global variable that points to the 27 * current instance of a class. 28 */ 29 template<class C> 30 class Currenton 31 { 32 private: 33 static Currenton<C>* s_current; 34 35 protected: Currenton()36 Currenton() 37 { 38 // FIXME: temporarly disabled, as Sector() for the main menu, 39 // doesn't get cleaned up before a real Sector() starts 40 // assert(!s_current); 41 s_current = this; 42 } 43 ~Currenton()44 virtual ~Currenton() 45 { 46 if (s_current == this) 47 { 48 s_current = nullptr; 49 } 50 } 51 52 public: current()53 static C* current() { return static_cast<C*>(s_current); } 54 }; 55 56 template<class C> 57 Currenton<C>* Currenton<C>::s_current = nullptr; 58 59 #endif 60 61 /* EOF */ 62