00001 /*!@file Simulation/Simulation.H Main loop of a simulation */ 00002 00003 // //////////////////////////////////////////////////////////////////// // 00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2000-2005 // 00005 // by the University of Southern California (USC) and the iLab at USC. // 00006 // See http://iLab.usc.edu for information about this project. // 00007 // //////////////////////////////////////////////////////////////////// // 00008 // Major portions of the iLab Neuromorphic Vision Toolkit are protected // 00009 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency // 00010 // in Visual Environments, and Applications'' by Christof Koch and // 00011 // Laurent Itti, California Institute of Technology, 2001 (patent // 00012 // pending; application number 09/912,225 filed July 23, 2001; see // 00013 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status). // 00014 // //////////////////////////////////////////////////////////////////// // 00015 // This file is part of the iLab Neuromorphic Vision C++ Toolkit. // 00016 // // 00017 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can // 00018 // redistribute it and/or modify it under the terms of the GNU General // 00019 // Public License as published by the Free Software Foundation; either // 00020 // version 2 of the License, or (at your option) any later version. // 00021 // // 00022 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope // 00023 // that it will be useful, but WITHOUT ANY WARRANTY; without even the // 00024 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // 00025 // PURPOSE. See the GNU General Public License for more details. // 00026 // // 00027 // You should have received a copy of the GNU General Public License // 00028 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write // 00029 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, // 00030 // Boston, MA 02111-1307 USA. // 00031 // //////////////////////////////////////////////////////////////////// // 00032 // 00033 // Primary maintainer for this file: Laurent Itti <itti@usc.edu> 00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Simulation/Simulation.H $ 00035 // $Id: Simulation.H 7279 2006-10-19 04:48:22Z itti $ 00036 // 00037 00038 #ifndef SIMULATION_SIMULATION_H_DEFINED 00039 #define SIMULATION_SIMULATION_H_DEFINED 00040 00041 #include "Component/ModelComponent.H" 00042 #include "Simulation/SimEventQueueConfigurator.H" 00043 #include "Simulation/SimModule.H" 00044 00045 //! Encapsulation of the main loop of a simulation 00046 /*! This class encapsulates the main loop of a typical 00047 simulation. Basically it holds a SimEventQueue and a bunch of 00048 SimModules, and will keep evolving the modules and the queue until 00049 some simulation break event terminates the simulation. Modules are 00050 evolved in the order in which they have been added using 00051 addModule(), and the queue is evolved last. */ 00052 class Simulation : public ModelComponent 00053 { 00054 public: 00055 //! Constructor 00056 Simulation(OptionManager& mgr); 00057 00058 //! Destructor 00059 virtual ~Simulation(); 00060 00061 //! Add a module to our evolve list 00062 /*! At each time step, SimModule::evolve() will be called on each 00063 added module, then on our internal SimEventQueue. */ 00064 void addModule(nub::ref<SimModule> mod); 00065 00066 //! Run the simulation until it breaks 00067 /*! Keep evolve()'ing the simulation until some module posts a 00068 SimBreak event. Returns 0 if the simulation ended normally through 00069 catching a SimBreak event, or -1 if a Unix signal was caught 00070 (e.g., CTRL-C). */ 00071 int run(); 00072 00073 private: 00074 nub::ref<SimEventQueueConfigurator> itsQC; 00075 std::vector<nub::ref<SimModule> > itsModules; 00076 }; 00077 00078 // ###################################################################### 00079 /* So things look consistent in everyone's emacs... */ 00080 /* Local Variables: */ 00081 /* mode: c++ */ 00082 /* indent-tabs-mode: nil */ 00083 /* End: */ 00084 00085 #endif // SIMULATION_SIMULATION_H_DEFINED