gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
sc_event.cc
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 #include "systemc/core/event.hh"
33 
34 namespace sc_core
35 {
36 
37 
38 /*
39  * sc_event_and_list
40  */
41 
42 sc_event_and_list::sc_event_and_list() : autoDelete(false), busy(0) {}
43 
45  events(eal.events), autoDelete(false), busy(0)
46 {}
47 
49 {
50  insert(e);
51 }
52 
54  autoDelete(auto_delete), busy(0)
55 {}
56 
58 
61 {
62  events = eal.events;
63  return *this;
64 }
65 
66 int
68 {
69  return events.size();
70 }
71 
72 void
74 {
75  events.swap(eal.events);
76 }
77 
80 {
81  insert(e);
82  return *this;
83 }
84 
87 {
88  insert(eal);
89  return *this;
90 }
91 
94 {
95  sc_event_and_expr expr;
96  expr.insert(*this);
97  expr.insert(e);
98  return expr;
99 }
100 
103 {
104  sc_event_and_expr expr;
105  expr.insert(*this);
106  expr.insert(eal);
107  return expr;
108 }
109 
110 void
112 {
113  events.insert(&e);
114 }
115 
116 void
118 {
119  events.insert(eal.events.begin(), eal.events.end());
120 }
121 
122 
123 /*
124  * sc_event_or_list
125  */
126 
128 
130  events(eol.events), autoDelete(false), busy(0)
131 {}
132 
134 {
135  insert(e);
136 }
137 
139  autoDelete(auto_delete), busy(0)
140 {}
141 
144 {
145  events = eol.events;
146  return *this;
147 }
148 
150 
151 int
153 {
154  return events.size();
155 }
156 
157 void
159 {
160  events.swap(eol.events);
161 }
162 
165 {
166  insert(e);
167  return *this;
168 }
169 
172 {
173  insert(eol);
174  return *this;
175 }
176 
179 {
180  sc_event_or_expr expr;
181  expr.insert(*this);
182  expr.insert(e);
183  return expr;
184 }
185 
188 {
189  sc_event_or_expr expr;
190  expr.insert(*this);
191  expr.insert(eol);
192  return expr;
193 }
194 
195 void
197 {
198  events.insert(&e);
199 }
200 
201 void
203 {
204  events.insert(eol.events.begin(), eol.events.end());
205 }
206 
207 
208 /*
209  * sc_event_and_expr
210  */
211 
212 // Move semantics
214  list(e.list)
215 {
216  e.list = nullptr;
217 }
218 
219 sc_event_and_expr::operator const sc_event_and_list &() const
220 {
221  sc_event_and_list *temp = list;
222  list = nullptr;
223  return *temp;
224 }
225 
226 void
228 {
229  assert(list);
230  list->insert(e);
231 }
232 
233 void
235 {
236  assert(list);
237  list->insert(eal);
238 }
239 
241 
243 
246 {
247  expr.insert(e);
248  return expr;
249 }
250 
253 {
254  expr.insert(eal);
255  return expr;
256 }
257 
258 
259 /*
260  * sc_event_or_expr
261  */
262 
263 // Move semantics
265  list(e.list)
266 {
267  e.list = nullptr;
268 }
269 
270 sc_event_or_expr::operator const sc_event_or_list &() const
271 {
272  sc_event_or_list *temp = list;
273  list = NULL;
274  return *temp;
275 }
276 
277 void
279 {
280  assert(list);
281  list->insert(e);
282 }
283 
284 void
286 {
287  assert(list);
288  list->insert(eol);
289 }
290 
292 
294 
297 {
298  expr.insert(e);
299  return expr;
300 }
301 
304 {
305  expr.insert(eol);
306  return expr;
307 }
308 
309 
310 /*
311  * sc_event
312  */
313 
315  _gem5_event(new ::sc_gem5::Event(
316  this, sc_core::sc_gen_unique_name("event")))
317 {}
318 
319 sc_event::sc_event(const char *_name) :
320  _gem5_event(new ::sc_gem5::Event(this, _name))
321 {}
322 
324 
325 const char *sc_event::name() const { return _gem5_event->name().c_str(); }
326 const char *
328 {
329  return _gem5_event->basename().c_str();
330 }
331 bool sc_event::in_hierarchy() const { return _gem5_event->inHierarchy(); }
332 
333 sc_object *
335 {
336  return _gem5_event->getParentObject();
337 }
338 
343 bool sc_event::triggered() const { return _gem5_event->triggered(); }
344 void
346 {
348 }
349 void
351 {
353 }
354 
356 sc_event::operator & (const sc_event &e) const
357 {
358  sc_event_and_expr expr;
359  expr.insert(*this);
360  expr.insert(e);
361  return expr;
362 }
363 
366 {
367  sc_event_and_expr expr;
368  expr.insert(*this);
369  expr.insert(eal);
370  return expr;
371 }
372 
375 {
376  sc_event_or_expr expr;
377  expr.insert(*this);
378  expr.insert(e);
379  return expr;
380 }
381 
384 {
385  sc_event_or_expr expr;
386  expr.insert(*this);
387  expr.insert(eol);
388  return expr;
389 }
390 
392  _gem5_event(new ::sc_gem5::Event(
394  "$$$internal kernel event$$$"), true))
395 {}
396 
397 sc_event::sc_event(bool, const char *_name) :
398  _gem5_event(new ::sc_gem5::Event(
399  this,
400  (std::string("$$$internal kernel event$$$") + _name).c_str(),
401  true))
402 {}
403 
406 {
408 }
409 
410 sc_event *
411 sc_find_event(const char *name)
412 {
413  std::string str(name);
415  return it == ::sc_gem5::allEvents.end() ? nullptr : *it;
416 }
417 
418 } // namespace sc_core
419 
420 namespace sc_gem5
421 {
422 
423 InternalScEvent::InternalScEvent() : sc_event(true) {}
424 InternalScEvent::InternalScEvent(const char *_name) : sc_event(true, _name) {}
425 
426 } // namespace sc_gem5
void insert(sc_event const &e) const
Definition: sc_event.cc:227
sc_event_or_expr operator|(const sc_event &) const
Definition: sc_event.cc:374
sc_event_and_expr operator&(const sc_event &) const
bool in_hierarchy() const
Definition: sc_event.cc:331
sc_event_and_expr operator&(const sc_event &) const
sc_event_and_expr operator&(sc_event_and_expr expr, sc_event const &e)
Definition: sc_event.cc:245
const std::vector< sc_event * > & sc_get_top_level_events()
Definition: sc_event.cc:405
sc_time_unit
Definition: sc_time.hh:42
std::set< const sc_event * > events
Definition: sc_event.hh:122
sc_core::sc_object * getParentObject() const
Definition: event.cc:134
const char * sc_gen_unique_name(const char *seed)
Definition: sc_module.cc:822
sc_event_or_list & operator|=(const sc_event &)
Definition: sc_event.cc:164
sc_event_or_expr operator|(const sc_event &) const
Definition: sc_event.cc:178
Overload hash function for BasicBlockRange type.
Definition: vec_reg.hh:586
sc_event_or_list * list
Definition: sc_event.hh:165
::sc_gem5::Event * _gem5_event
Definition: sc_event.hh:211
EventsIt findEvent(const std::string &name)
Definition: event.cc:224
STL vector class.
Definition: stl.hh:40
void swap(sc_event_and_list &)
Definition: sc_event.cc:73
bool inHierarchy() const
Definition: event.cc:128
bool triggered() const
Definition: event.cc:205
void notifyDelayed(const sc_core::sc_time &t)
Definition: event.cc:190
std::set< const sc_event * > events
Definition: sc_event.hh:90
Bitfield< 22 > u
void notify(StaticSensitivities &senses)
Definition: event.cc:140
const char * basename() const
Definition: sc_event.cc:327
Events allEvents
Definition: event.cc:221
Bitfield< 9 > d
void insert(sc_event const &e) const
Definition: sc_event.cc:278
Events topLevelEvents
Definition: event.cc:220
sc_event_or_list & operator=(const sc_event_or_list &)
Definition: sc_event.cc:143
void swap(sc_event_or_list &)
Definition: sc_event.cc:158
static scfx_rep_node * list
Definition: scfx_rep.cc:336
const char * name() const
Definition: sc_event.cc:325
bool triggered() const
Definition: sc_event.cc:343
void insert(sc_event const &e)
Definition: sc_event.cc:196
sc_event_and_list & operator=(const sc_event_and_list &)
Definition: sc_event.cc:60
sc_event_or_expr operator|(sc_event_or_expr expr, sc_event const &e)
Definition: sc_event.cc:296
sc_event_and_list & operator&=(const sc_event &)
const std::string & basename() const
Definition: event.cc:122
Bitfield< 9 > e
const sc_time SC_ZERO_TIME
Definition: sc_time.cc:292
sc_event_and_list * list
Definition: sc_event.hh:143
Definition: eventq.hh:189
void insert(sc_event const &e)
Definition: sc_event.cc:111
Events::iterator EventsIt
Definition: object.hh:47
const std::string & name() const
Definition: event.cc:116
Bitfield< 5 > t
sc_event * sc_find_event(const char *name)
Definition: sc_event.cc:411
void notify_delayed()
Definition: sc_event.cc:345
void cancel()
Definition: event.cc:198
sc_object * get_parent_object() const
Definition: sc_event.cc:334

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