/* * Copyright (c) 2006 The Regents of The University of Michigan * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer; * redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution; * neither the name of the copyright holders nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Authors: Nathan Binkert */ %module(package="m5.internal") event %{ #include "base/types.hh" #include "python/swig/pyevent.hh" #include "sim/eventq.hh" #include "sim/sim_events.hh" #include "sim/sim_exit.hh" #include "sim/simulate.hh" %} %import "python/swig/serialize.i" #pragma SWIG nowarn=350,351 %extend EventQueue { void schedule(Event *event, Tick when) { // Any python event that are scheduled must have their // internal object's refcount incremented so that the object // sticks around while it is in the event queue. PythonEvent *pyevent = dynamic_cast(event); if (pyevent) pyevent->incref(); $self->schedule(event, when); } void deschedule(Event *event) { $self->deschedule(event); // Now that we're removing the python object from the event // queue, we need to decrement its reference count. PythonEvent *pyevent = dynamic_cast(event); if (pyevent) pyevent->decref(); } } %ignore EventQueue::schedule; %ignore EventQueue::deschedule; %include %include %include "base/types.hh" %include "sim/eventq.hh" // This must follow eventq.hh %include "python/swig/pyevent.hh" // minimal definition of SimExitEvent interface to wrap class SimLoopExitEvent : public Event { public: std::string getCause(); int getCode(); SimLoopExitEvent(const std::string &_cause, int c, Tick _repeat = 0); }; %exception simulate { $action if (!result) { return NULL; } } SimLoopExitEvent *simulate(Tick num_cycles = MaxTick); void exitSimLoop(const std::string &message, int exit_code);