summaryrefslogtreecommitdiff
path: root/src/systemc/ext/core/sc_event.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/ext/core/sc_event.hh')
-rw-r--r--src/systemc/ext/core/sc_event.hh62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/systemc/ext/core/sc_event.hh b/src/systemc/ext/core/sc_event.hh
index 0b901ff1e..d037a84bf 100644
--- a/src/systemc/ext/core/sc_event.hh
+++ b/src/systemc/ext/core/sc_event.hh
@@ -30,10 +30,18 @@
#ifndef __SYSTEMC_EXT_CORE_SC_EVENT_HH__
#define __SYSTEMC_EXT_CORE_SC_EVENT_HH__
+#include <set>
#include <vector>
#include "sc_time.hh"
+namespace sc_gem5
+{
+
+class Event;
+
+}
+
namespace sc_core
{
@@ -79,6 +87,7 @@ class sc_event_and_list
sc_event_and_list(const sc_event_and_list &);
sc_event_and_list(const sc_event &);
sc_event_and_list &operator = (const sc_event_and_list &);
+ ~sc_event_and_list();
int size() const;
void swap(sc_event_and_list &);
@@ -88,6 +97,18 @@ class sc_event_and_list
sc_event_and_expr operator & (const sc_event &) const;
sc_event_and_expr operator & (const sc_event_and_list &);
+
+ private:
+ friend class sc_event_and_expr;
+
+ explicit sc_event_and_list(bool auto_delete);
+
+ void insert(sc_event const &e);
+ void insert(sc_event_and_list const &eal);
+
+ std::set<const sc_event *> events;
+ bool autoDelete;
+ mutable unsigned busy;
};
class sc_event_or_list
@@ -107,12 +128,37 @@ class sc_event_or_list
sc_event_or_expr operator | (const sc_event &) const;
sc_event_or_expr operator | (const sc_event_or_list &) const;
+
+ private:
+ friend class sc_event_or_expr;
+
+ explicit sc_event_or_list(bool auto_delete);
+
+ void insert(sc_event const &e);
+ void insert(sc_event_or_list const &eol);
+
+ std::set<const sc_event *> events;
+ bool autoDelete;
+ mutable unsigned busy;
};
class sc_event_and_expr
{
public:
+ sc_event_and_expr(sc_event_and_expr const &e);
operator const sc_event_and_list &() const;
+
+ void insert(sc_event const &e) const;
+ void insert(sc_event_and_list const &eal) const;
+
+ ~sc_event_and_expr();
+
+ private:
+ friend class sc_event_and_list;
+ friend class sc_event;
+
+ sc_event_and_expr();
+ mutable sc_event_and_list *list;
};
sc_event_and_expr operator & (sc_event_and_expr, sc_event const &);
@@ -121,7 +167,20 @@ sc_event_and_expr operator & (sc_event_and_expr, sc_event_and_list const &);
class sc_event_or_expr
{
public:
+ sc_event_or_expr(sc_event_or_expr const &e);
operator const sc_event_or_list &() const;
+
+ void insert(sc_event const &e) const;
+ void insert(sc_event_or_list const &eol) const;
+
+ ~sc_event_or_expr();
+
+ private:
+ friend class sc_event_or_list;
+ friend class sc_event;
+
+ sc_event_or_expr();
+ mutable sc_event_or_list *list;
};
sc_event_or_expr operator | (sc_event_or_expr, sc_event const &);
@@ -161,6 +220,9 @@ class sc_event
// Disabled
sc_event(const sc_event &) {}
sc_event &operator = (const sc_event &) { return *this; }
+
+ friend class ::sc_gem5::Event;
+ ::sc_gem5::Event *_gem5_event;
};
const std::vector<sc_event *> &sc_get_top_level_events();