00001 /*!@file Simulation/SimEvent.H Base class for events that arise in 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/SimEvent.H $ 00035 // $Id: SimEvent.H 13103 2010-03-31 02:24:47Z itti $ 00036 // 00037 00038 #ifndef SIMULATION_SIMEVENT_H_DEFINED 00039 #define SIMULATION_SIMEVENT_H_DEFINED 00040 00041 #include "rutz/shared_ptr.h" 00042 #include "Simulation/SimModule.H" 00043 #include <set> 00044 00045 //! Base class for events that arise in simulation 00046 /*! Actual events would normally derive from this base. See 00047 Simulation/SimEvents.H */ 00048 class SimEvent { 00049 public: 00050 //! Constuctor 00051 /*! Normally a SimModule would pass "this" as src. This is used in SimEventQueue to prune older events that have been 00052 pushed by the same SimModule. The event will be visible to anyone through SimEventQueue::check() after it has been 00053 posted to the SimEventQueue. */ 00054 SimEvent(SimModule* src); 00055 00056 //! Destructor 00057 virtual ~SimEvent(); 00058 00059 //! Get a description for printing out 00060 /*! The base class implementation only returns the demangled name of the class. Overload as necessary in derived 00061 classes if you want to also return additional information. */ 00062 virtual std::string toString() const; 00063 00064 //! Get comma-separated list of receivers done with the event 00065 /*! Normally, few people except for SimEventQueue would use this function. */ 00066 std::string getDoneList() const; 00067 00068 private: 00069 friend class SimEventQueue; // allow SimEventQueue to access our private data 00070 00071 //! Returns true if receiver is done with event 00072 /*! Normally, few people except for SimEventQueue would use this function. */ 00073 bool isDone(const SimModule* const receiver) const; 00074 00075 //! Mark that receiver is done with the event 00076 /*! Normally, few people except for SimEventQueue would use this function. */ 00077 void markDone(const SimModule* const receiver); 00078 00079 SimModule* const itsSource; // source of the event (a brain module) 00080 std::set<const SimModule*> itsReceiversDone; 00081 }; 00082 00083 00084 // ###################################################################### 00085 /* So things look consistent in everyone's emacs... */ 00086 /* Local Variables: */ 00087 /* mode: c++ */ 00088 /* indent-tabs-mode: nil */ 00089 /* End: */ 00090 00091 #endif // SIMULATION_SIMEVENT_H_DEFINED