From: Andreas Sandberg Date: Tue, 9 May 2017 18:06:39 +0000 (+0100) Subject: python: Add a helper function to create Python events X-Git-Tag: v19.0.0.0~2795 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=05c486c5ebf95cffc7435c16c45120a28c42b2fb;p=gem5.git python: Add a helper function to create Python events Add a helper function, m5.event.create(), to create events from Python. This function takes a callable Python object (e.g., a function) as an argument and optionally a priority as a keyword argument. This function was accidentally dropped from the public API when switching to PyBind. Change-Id: Icbd0e392d9506934ec2c9f541199aa35c1c2df8c Signed-off-by: Andreas Sandberg Reviewed-by: Curtis Dunham Reviewed-on: https://gem5-review.googlesource.com/3220 Reviewed-by: Gabe Black --- diff --git a/src/python/m5/event.py b/src/python/m5/event.py index d1aff9e5f..20f81b93b 100644 --- a/src/python/m5/event.py +++ b/src/python/m5/event.py @@ -48,6 +48,25 @@ from _m5.event import Event, getEventQueue, setEventQueue mainq = None +class EventWrapper(Event): + """Helper class to wrap callable objects in an Event base class""" + + def __init__(self, func, **kwargs): + super(EventWrapper, self).__init__(**kwargs) + + if not callable(func): + raise RuntimeError("Can't wrap '%s', object is not callable" % \ + str(func)) + + self._func = func + + def __call__(self): + self._func() + + def __str__(self): + return "EventWrapper(%s)" % (str(self._func), ) + + class ProgressEvent(Event): def __init__(self, eventq, period): super(ProgressEvent, self).__init__() @@ -59,4 +78,11 @@ class ProgressEvent(Event): print "Progress! Time now %fs" % (m5.curTick()/1e12) self.eventq.schedule(self, m5.curTick() + self.period) -__all__ = [ 'Event', 'ProgressEvent', 'SimExit', 'mainq' ] + +def create(func, priority=Event.Default_Pri): + """Create an Event from a function""" + + return EventWrapper(func, priority=priority) + +__all__ = [ 'Event', 'EventWrapper', 'ProgressEvent', 'SimExit', + 'mainq', 'create' ]