gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
sched_event.hh
Go to the documentation of this file.
1 /*
2  * Copyright 2018 Google, Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met: redistributions of source code must retain the above copyright
7  * notice, this list of conditions and the following disclaimer;
8  * redistributions in binary form must reproduce the above copyright
9  * notice, this list of conditions and the following disclaimer in the
10  * documentation and/or other materials provided with the distribution;
11  * neither the name of the copyright holders nor the names of its
12  * contributors may be used to endorse or promote products derived from
13  * this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  *
27  * Authors: Gabe Black
28  */
29 
30 #ifndef __SYSTEMC_CORE_SCHED_EVENT_HH__
31 #define __SYSTEMC_CORE_SCHED_EVENT_HH__
32 
33 #include <functional>
34 #include <list>
35 
36 #include "base/types.hh"
37 
38 namespace sc_gem5
39 {
40 
41 class ScEvent;
42 
44 
45 class ScEvent
46 {
47  private:
48  std::function<void()> work;
50  ScEvents *_events;
51  ScEvents::iterator _it;
52 
53  friend class Scheduler;
54 
55  void
56  schedule(ScEvents &events, Tick w)
57  {
58  when(w);
59  assert(!scheduled());
60  _events = &events;
61  _events->push_back(this);
62  _it = _events->end();
63  _it--;
64  }
65 
66  void
68  {
69  assert(scheduled());
70  _events->erase(_it);
71  _events = nullptr;
72  }
73  public:
74  ScEvent(std::function<void()> work) :
75  work(work), _when(MaxTick), _events(nullptr)
76  {}
77 
78  ~ScEvent();
79 
80  bool scheduled() { return _events != nullptr; }
81  ScEvents *scheduledOn() { return _events; }
82 
83  void when(Tick w) { _when = w; }
84  Tick when() { return _when; }
85 
86  void run() { deschedule(); work(); }
87 };
88 
89 } // namespace sc_gem5
90 
91 #endif // __SYSTEMC_CORE_SCHED_EVENT_HH__
std::list< ScEvent * > ScEvents
Definition: sched_event.hh:41
const Tick MaxTick
Definition: types.hh:65
ScEvents::iterator _it
Definition: sched_event.hh:51
ScEvent(std::function< void()> work)
Definition: sched_event.hh:74
uint64_t Tick
Tick count type.
Definition: types.hh:63
void schedule(ScEvents &events, Tick w)
Definition: sched_event.hh:56
Bitfield< 0 > w
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
std::function< void()> work
Definition: sched_event.hh:48
ScEvents * _events
Definition: sched_event.hh:50
void when(Tick w)
Definition: sched_event.hh:83
ScEvents * scheduledOn()
Definition: sched_event.hh:81

Generated on Fri Feb 28 2020 16:27:03 for gem5 by doxygen 1.8.13