/** * If this firing is triggered by an event at <i>waitee</i>, then output the waiting time for each * prior event arrival at <i>waiter</i> since the last arrival of waitee. If there is no event at * <i>waitee</i>, then record the time of arrival of the events at <i>waiter</i>, and produce no * output. * * @exception IllegalActionException If get() or send() throws it. */ public void fire() throws IllegalActionException { super.fire(); Time currentTime = ((DEDirector) getDirector()).getModelTime(); while (waiter.hasToken(0)) { waiter.get(0); _waiting.addElement(currentTime); } boolean godot = false; while (waitee.hasToken(0)) { waitee.get(0); godot = true; } if (godot) { for (int i = 0; i < _waiting.size(); i++) { Time previousTime = (Time) _waiting.elementAt(i); DoubleToken outToken = new DoubleToken(currentTime.subtract(previousTime).getDoubleValue()); output.send(0, outToken); } _waiting.removeAllElements(); } }
/** * Clear the list of waiters. * * @exception IllegalActionException If the parent class throws it. */ public void initialize() throws IllegalActionException { super.initialize(); _waiting.removeAllElements(); }