summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas.sandberg@arm.com>2017-05-09 19:06:39 +0100
committerAndreas Sandberg <andreas.sandberg@arm.com>2017-05-16 08:59:04 +0000
commit05c486c5ebf95cffc7435c16c45120a28c42b2fb (patch)
tree512b037d20232ff0a45fb4e9138f16eed2a351f5 /src
parentf44ddb94a6f72fe1ef04739817ee2102cee36c0f (diff)
downloadgem5-05c486c5ebf95cffc7435c16c45120a28c42b2fb.tar.xz
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 <andreas.sandberg@arm.com> Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> Reviewed-on: https://gem5-review.googlesource.com/3220 Reviewed-by: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/python/m5/event.py28
1 files changed, 27 insertions, 1 deletions
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' ]