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:
@@ -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__
|
||||
|
||||
Reference in New Issue
Block a user