summaryrefslogtreecommitdiff
path: root/src/sim
diff options
context:
space:
mode:
authorSean Wilson <spwilson2@wisc.edu>2017-06-06 16:05:48 -0500
committerSean Wilson <spwilson2@wisc.edu>2017-06-20 18:03:21 +0000
commite34924b50fd3362dc51a67c51c6d7f2b2015cf30 (patch)
treec79312bcc90cc5812073bb2f18759487f39b6a1a /src/sim
parent3d46619c34f1fc470fcc65b83fe678a70e89be30 (diff)
downloadgem5-e34924b50fd3362dc51a67c51c6d7f2b2015cf30.tar.xz
sim: Add generic EventFunctionWrapper
Add EventFunctionWrapper, an event wrapper which takes any callable object to use as its callback. (This includes c++ lambdas, function pointers, bound functions, and std::functions.) Change-Id: Iab140df47bd0f7e4b3fe3b568f9dd122a43cee1c Signed-off-by: Sean Wilson <spwilson2@wisc.edu> Reviewed-on: https://gem5-review.googlesource.com/3743 Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com>
Diffstat (limited to 'src/sim')
-rw-r--r--src/sim/eventq.hh28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/sim/eventq.hh b/src/sim/eventq.hh
index 9d3c5c36a..6d68b4e3a 100644
--- a/src/sim/eventq.hh
+++ b/src/sim/eventq.hh
@@ -800,4 +800,32 @@ class EventWrapper : public Event
const char *description() const { return "EventWrapped"; }
};
+class EventFunctionWrapper : public Event
+{
+ private:
+ std::function<void(void)> callback;
+ std::string _name;
+
+ public:
+ EventFunctionWrapper(const std::function<void(void)> &callback,
+ const std::string &name,
+ bool del = false,
+ Priority p = Default_Pri)
+ : Event(p), callback(callback), _name(name)
+ {
+ if (del)
+ setFlags(AutoDelete);
+ }
+
+ void process() { callback(); }
+
+ const std::string
+ name() const
+ {
+ return _name + ".wrapped_function_event";
+ }
+
+ const char *description() const { return "EventFunctionWrapped"; }
+};
+
#endif // __SIM_EVENTQ_HH__