// src/backend/simulation.cc - Copyright 2005, 2006, University // of Padova, dept. of Pure and Applied // Mathematics // // This file is part of SGPEMv2. // // This is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // SGPEMv2 is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with SGPEMv2; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "config.h" #include "simulation.hh" #include "simulation_observer.hh" #include "concrete_simulation.hh" #include #include // Do not include in header file: #include "singleton.tcc" using namespace sgpem; // Explicit template instantiation to allow to export symbols from the DSO. template class SG_DLLEXPORT Singleton; Simulation::Simulation() : _notify(true) { } Simulation::~Simulation() {} Simulation& Simulation::get_instance() { return Singleton::get_instance(); } void Simulation::attach(SimulationObserver& observer) { _observers.push_back(&observer); } void Simulation::detach(const SimulationObserver& observer) { _observers.erase(std::find(_observers.begin(), _observers.end(), &observer)); } void Simulation::notify_change() { if (!_notify) return; for (RegisteredObservers::iterator it = _observers.begin(); it != _observers.end(); it++) (*it)->update(*this); } bool Simulation::set_notify_enabled(bool enabled) { bool old_value = _notify; _notify = enabled; // Force notify if we re-enable it if (old_value == false && _notify == true) notify_change(); return old_value; }