sc_event.hh revision 12955:9c8bf6a5f2e3
112027Sjungma@eit.uni-kl.de/* 212027Sjungma@eit.uni-kl.de * Copyright 2018 Google, Inc. 312027Sjungma@eit.uni-kl.de * 412027Sjungma@eit.uni-kl.de * Redistribution and use in source and binary forms, with or without 512027Sjungma@eit.uni-kl.de * modification, are permitted provided that the following conditions are 612027Sjungma@eit.uni-kl.de * met: redistributions of source code must retain the above copyright 712027Sjungma@eit.uni-kl.de * notice, this list of conditions and the following disclaimer; 812027Sjungma@eit.uni-kl.de * redistributions in binary form must reproduce the above copyright 912027Sjungma@eit.uni-kl.de * notice, this list of conditions and the following disclaimer in the 1012027Sjungma@eit.uni-kl.de * documentation and/or other materials provided with the distribution; 1112027Sjungma@eit.uni-kl.de * neither the name of the copyright holders nor the names of its 1212027Sjungma@eit.uni-kl.de * contributors may be used to endorse or promote products derived from 1312027Sjungma@eit.uni-kl.de * this software without specific prior written permission. 1412027Sjungma@eit.uni-kl.de * 1512027Sjungma@eit.uni-kl.de * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1612027Sjungma@eit.uni-kl.de * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1712027Sjungma@eit.uni-kl.de * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1812027Sjungma@eit.uni-kl.de * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1912027Sjungma@eit.uni-kl.de * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2012027Sjungma@eit.uni-kl.de * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2112027Sjungma@eit.uni-kl.de * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2212027Sjungma@eit.uni-kl.de * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2312027Sjungma@eit.uni-kl.de * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2412027Sjungma@eit.uni-kl.de * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2512027Sjungma@eit.uni-kl.de * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2612027Sjungma@eit.uni-kl.de * 2712027Sjungma@eit.uni-kl.de * Authors: Gabe Black 2812027Sjungma@eit.uni-kl.de */ 2912027Sjungma@eit.uni-kl.de 3012027Sjungma@eit.uni-kl.de#ifndef __SYSTEMC_EXT_CORE_SC_EVENT_HH__ 3112027Sjungma@eit.uni-kl.de#define __SYSTEMC_EXT_CORE_SC_EVENT_HH__ 3212027Sjungma@eit.uni-kl.de 3312027Sjungma@eit.uni-kl.de#include <set> 3412027Sjungma@eit.uni-kl.de#include <vector> 3512027Sjungma@eit.uni-kl.de 3612027Sjungma@eit.uni-kl.de#include "sc_time.hh" 3712027Sjungma@eit.uni-kl.de 3812027Sjungma@eit.uni-kl.denamespace sc_gem5 3912027Sjungma@eit.uni-kl.de{ 4012027Sjungma@eit.uni-kl.de 4112027Sjungma@eit.uni-kl.declass Event; 4212027Sjungma@eit.uni-kl.de 4312027Sjungma@eit.uni-kl.de} 4412027Sjungma@eit.uni-kl.de 4512027Sjungma@eit.uni-kl.denamespace sc_core 4612027Sjungma@eit.uni-kl.de{ 4712027Sjungma@eit.uni-kl.de 4812027Sjungma@eit.uni-kl.declass sc_event; 4912027Sjungma@eit.uni-kl.declass sc_event_and_expr; 5012027Sjungma@eit.uni-kl.declass sc_event_or_expr; 5112027Sjungma@eit.uni-kl.declass sc_interface; 5212027Sjungma@eit.uni-kl.declass sc_object; 5312027Sjungma@eit.uni-kl.declass sc_port_base; 5412027Sjungma@eit.uni-kl.de 5512027Sjungma@eit.uni-kl.declass sc_event_finder 5612027Sjungma@eit.uni-kl.de{ 5712027Sjungma@eit.uni-kl.de protected: 5812027Sjungma@eit.uni-kl.de void warn_unimpl(const char *func) const; 5912027Sjungma@eit.uni-kl.de 6012027Sjungma@eit.uni-kl.de public: 6112027Sjungma@eit.uni-kl.de // Should be "implementation defined" but used in the tests. 6212027Sjungma@eit.uni-kl.de virtual const sc_event &find_event(sc_interface *if_p=NULL) const = 0; 6312027Sjungma@eit.uni-kl.de}; 6412027Sjungma@eit.uni-kl.de 6512027Sjungma@eit.uni-kl.detemplate <class IF> 6612027Sjungma@eit.uni-kl.declass sc_event_finder_t : public sc_event_finder 6712027Sjungma@eit.uni-kl.de{ 6812027Sjungma@eit.uni-kl.de public: 6912027Sjungma@eit.uni-kl.de sc_event_finder_t(const sc_port_base &, 7012027Sjungma@eit.uni-kl.de const sc_event & (IF::*event_method)() const) 7112027Sjungma@eit.uni-kl.de { 7212027Sjungma@eit.uni-kl.de warn_unimpl(__PRETTY_FUNCTION__); 7312027Sjungma@eit.uni-kl.de } 7412027Sjungma@eit.uni-kl.de 7512027Sjungma@eit.uni-kl.de const sc_event & 7612027Sjungma@eit.uni-kl.de find_event(sc_interface *if_p=NULL) const override 7712027Sjungma@eit.uni-kl.de { 7812027Sjungma@eit.uni-kl.de warn_unimpl(__PRETTY_FUNCTION__); 7912027Sjungma@eit.uni-kl.de return *(const sc_event *)nullptr; 8012027Sjungma@eit.uni-kl.de } 8112027Sjungma@eit.uni-kl.de}; 8212027Sjungma@eit.uni-kl.de 8312027Sjungma@eit.uni-kl.declass sc_event_and_list 8412027Sjungma@eit.uni-kl.de{ 8512027Sjungma@eit.uni-kl.de public: 8612027Sjungma@eit.uni-kl.de sc_event_and_list(); 8712027Sjungma@eit.uni-kl.de sc_event_and_list(const sc_event_and_list &); 8812027Sjungma@eit.uni-kl.de sc_event_and_list(const sc_event &); 8912027Sjungma@eit.uni-kl.de sc_event_and_list &operator = (const sc_event_and_list &); 9012027Sjungma@eit.uni-kl.de ~sc_event_and_list(); 9112027Sjungma@eit.uni-kl.de 9212027Sjungma@eit.uni-kl.de int size() const; 9312027Sjungma@eit.uni-kl.de void swap(sc_event_and_list &); 9412027Sjungma@eit.uni-kl.de 9512027Sjungma@eit.uni-kl.de sc_event_and_list &operator &= (const sc_event &); 9612027Sjungma@eit.uni-kl.de sc_event_and_list &operator &= (const sc_event_and_list &); 9712027Sjungma@eit.uni-kl.de 9812027Sjungma@eit.uni-kl.de sc_event_and_expr operator & (const sc_event &) const; 9912027Sjungma@eit.uni-kl.de sc_event_and_expr operator & (const sc_event_and_list &); 10012027Sjungma@eit.uni-kl.de 10112027Sjungma@eit.uni-kl.de private: 10212027Sjungma@eit.uni-kl.de friend class sc_event_and_expr; 10312027Sjungma@eit.uni-kl.de 10412027Sjungma@eit.uni-kl.de explicit sc_event_and_list(bool auto_delete); 10512027Sjungma@eit.uni-kl.de 10612027Sjungma@eit.uni-kl.de void insert(sc_event const &e); 10712027Sjungma@eit.uni-kl.de void insert(sc_event_and_list const &eal); 10812027Sjungma@eit.uni-kl.de 10912027Sjungma@eit.uni-kl.de std::set<const sc_event *> events; 11012027Sjungma@eit.uni-kl.de bool autoDelete; 11112027Sjungma@eit.uni-kl.de mutable unsigned busy; 11212027Sjungma@eit.uni-kl.de}; 11312027Sjungma@eit.uni-kl.de 11412027Sjungma@eit.uni-kl.declass sc_event_or_list 11512027Sjungma@eit.uni-kl.de{ 11612027Sjungma@eit.uni-kl.de public: 11712027Sjungma@eit.uni-kl.de sc_event_or_list(); 11812027Sjungma@eit.uni-kl.de sc_event_or_list(const sc_event_or_list &); 11912027Sjungma@eit.uni-kl.de sc_event_or_list(const sc_event &); 12012027Sjungma@eit.uni-kl.de sc_event_or_list& operator = (const sc_event_or_list &); 12112027Sjungma@eit.uni-kl.de ~sc_event_or_list(); 12212027Sjungma@eit.uni-kl.de 12312027Sjungma@eit.uni-kl.de int size() const; 12412027Sjungma@eit.uni-kl.de void swap(sc_event_or_list &); 12512027Sjungma@eit.uni-kl.de 12612027Sjungma@eit.uni-kl.de sc_event_or_list &operator |= (const sc_event &); 12712027Sjungma@eit.uni-kl.de sc_event_or_list &operator |= (const sc_event_or_list &); 12812027Sjungma@eit.uni-kl.de 12912027Sjungma@eit.uni-kl.de sc_event_or_expr operator | (const sc_event &) const; 13012027Sjungma@eit.uni-kl.de sc_event_or_expr operator | (const sc_event_or_list &) const; 13112027Sjungma@eit.uni-kl.de 13212027Sjungma@eit.uni-kl.de private: 13312027Sjungma@eit.uni-kl.de friend class sc_event_or_expr; 13412027Sjungma@eit.uni-kl.de 13512027Sjungma@eit.uni-kl.de explicit sc_event_or_list(bool auto_delete); 13612027Sjungma@eit.uni-kl.de 13712027Sjungma@eit.uni-kl.de void insert(sc_event const &e); 13812027Sjungma@eit.uni-kl.de void insert(sc_event_or_list const &eol); 13912027Sjungma@eit.uni-kl.de 14012027Sjungma@eit.uni-kl.de std::set<const sc_event *> events; 14112027Sjungma@eit.uni-kl.de bool autoDelete; 14212027Sjungma@eit.uni-kl.de mutable unsigned busy; 14312027Sjungma@eit.uni-kl.de}; 14412027Sjungma@eit.uni-kl.de 14512027Sjungma@eit.uni-kl.declass sc_event_and_expr 14612027Sjungma@eit.uni-kl.de{ 14712027Sjungma@eit.uni-kl.de public: 14812027Sjungma@eit.uni-kl.de sc_event_and_expr(sc_event_and_expr const &e); 14912027Sjungma@eit.uni-kl.de operator const sc_event_and_list &() const; 15012027Sjungma@eit.uni-kl.de 15112027Sjungma@eit.uni-kl.de void insert(sc_event const &e) const; 15212027Sjungma@eit.uni-kl.de void insert(sc_event_and_list const &eal) const; 15312027Sjungma@eit.uni-kl.de 15412027Sjungma@eit.uni-kl.de ~sc_event_and_expr(); 15512027Sjungma@eit.uni-kl.de 15612027Sjungma@eit.uni-kl.de private: 15712027Sjungma@eit.uni-kl.de friend class sc_event_and_list; 15812027Sjungma@eit.uni-kl.de friend class sc_event; 15912027Sjungma@eit.uni-kl.de 16012027Sjungma@eit.uni-kl.de sc_event_and_expr(); 16112027Sjungma@eit.uni-kl.de mutable sc_event_and_list *list; 16212027Sjungma@eit.uni-kl.de}; 16312027Sjungma@eit.uni-kl.de 16412027Sjungma@eit.uni-kl.desc_event_and_expr operator & (sc_event_and_expr, sc_event const &); 16512027Sjungma@eit.uni-kl.desc_event_and_expr operator & (sc_event_and_expr, sc_event_and_list const &); 16612027Sjungma@eit.uni-kl.de 16712027Sjungma@eit.uni-kl.declass sc_event_or_expr 16812027Sjungma@eit.uni-kl.de{ 16912027Sjungma@eit.uni-kl.de public: 17012027Sjungma@eit.uni-kl.de sc_event_or_expr(sc_event_or_expr const &e); 17112027Sjungma@eit.uni-kl.de operator const sc_event_or_list &() const; 17212027Sjungma@eit.uni-kl.de 17312027Sjungma@eit.uni-kl.de void insert(sc_event const &e) const; 17412027Sjungma@eit.uni-kl.de void insert(sc_event_or_list const &eol) const; 17512027Sjungma@eit.uni-kl.de 17612027Sjungma@eit.uni-kl.de ~sc_event_or_expr(); 17712027Sjungma@eit.uni-kl.de 17812027Sjungma@eit.uni-kl.de private: 17912027Sjungma@eit.uni-kl.de friend class sc_event_or_list; 18012027Sjungma@eit.uni-kl.de friend class sc_event; 18112027Sjungma@eit.uni-kl.de 18212027Sjungma@eit.uni-kl.de sc_event_or_expr(); 18312027Sjungma@eit.uni-kl.de mutable sc_event_or_list *list; 18412027Sjungma@eit.uni-kl.de}; 18512027Sjungma@eit.uni-kl.de 18612027Sjungma@eit.uni-kl.desc_event_or_expr operator | (sc_event_or_expr, sc_event const &); 18712027Sjungma@eit.uni-kl.desc_event_or_expr operator | (sc_event_or_expr, sc_event_or_list const &); 18812027Sjungma@eit.uni-kl.de 18912027Sjungma@eit.uni-kl.declass sc_event 19012027Sjungma@eit.uni-kl.de{ 19112027Sjungma@eit.uni-kl.de public: 19212027Sjungma@eit.uni-kl.de sc_event(); 19312027Sjungma@eit.uni-kl.de explicit sc_event(const char *); 19412027Sjungma@eit.uni-kl.de ~sc_event(); 19512027Sjungma@eit.uni-kl.de 19612027Sjungma@eit.uni-kl.de const char *name() const; 19712027Sjungma@eit.uni-kl.de const char *basename() const; 19812027Sjungma@eit.uni-kl.de bool in_hierarchy() const; 19912027Sjungma@eit.uni-kl.de sc_object *get_parent_object() const; 20012027Sjungma@eit.uni-kl.de 20112027Sjungma@eit.uni-kl.de void notify(); 202 void notify(const sc_time &); 203 void notify(double, sc_time_unit); 204 void cancel(); 205 206 // Nonstandard 207 // Returns whether this event is currently triggered. 208 bool triggered() const; 209 210 // Deprecated 211 void notify_delayed(); 212 void notify_delayed(const sc_time &); 213 214 sc_event_and_expr operator & (const sc_event &) const; 215 sc_event_and_expr operator & (const sc_event_and_list &) const; 216 sc_event_or_expr operator | (const sc_event &) const; 217 sc_event_or_expr operator | (const sc_event_or_list &) const; 218 219 private: 220 // Disabled 221 sc_event(const sc_event &) {} 222 sc_event &operator = (const sc_event &) { return *this; } 223 224 friend class ::sc_gem5::Event; 225 ::sc_gem5::Event *_gem5_event; 226}; 227 228const std::vector<sc_event *> &sc_get_top_level_events(); 229sc_event *sc_find_event(const char *); 230 231} // namespace sc_core 232 233#endif //__SYSTEMC_EXT_CORE_SC_INTERFACE_HH__ 234