diff options
author | Sean Wilson <spwilson2@wisc.edu> | 2017-06-06 16:05:48 -0500 |
---|---|---|
committer | Sean Wilson <spwilson2@wisc.edu> | 2017-06-20 18:03:21 +0000 |
commit | e34924b50fd3362dc51a67c51c6d7f2b2015cf30 (patch) | |
tree | c79312bcc90cc5812073bb2f18759487f39b6a1a | |
parent | 3d46619c34f1fc470fcc65b83fe678a70e89be30 (diff) | |
download | gem5-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>
-rw-r--r-- | src/sim/eventq.hh | 28 |
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__ |