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>
This commit is contained in:
Sean Wilson
2017-06-06 16:05:48 -05:00
parent 3d46619c34
commit e34924b50f

View File

@@ -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__