}
// If the current time and index match the first entry in the breakpoint
// table, then remove that entry.
if (!_breakpoints.isEmpty()) {
SuperdenseTime nextBreakpoint = (SuperdenseTime) _breakpoints
.first();
Time breakpointTime = nextBreakpoint.timestamp();
comparison = breakpointTime.compareTo(_currentTime);
// Remove any breakpoints from the table that are now in the past.
// In theory, this should only happen if we are inside a modal model
// and we were not active at the time of the breakpoint. In such a
// case, the right thing to do is to ignore the breakpoint.
// NOTE: This requires that actors be written carefully, since
// they have to ensure that if they post something on the breakpoint
// table (by calling fireAt()) and are not fired at that requested
// time, then they recover the next time they are fired.
while (comparison < 0
|| (comparison == 0 && nextBreakpoint.index() < _index)) {
if (_debugging) {
_debug("Remove a breakpoint that we missed: "
+ breakpointTime);
}
_breakpoints.removeFirst();
if (_breakpoints.isEmpty()) {
break;
}
nextBreakpoint = (SuperdenseTime) _breakpoints.first();
breakpointTime = nextBreakpoint.timestamp();
comparison = breakpointTime.compareTo(_currentTime);
}
if (comparison == 0 && nextBreakpoint.index() == _index) {
if (_debugging) {
_debug("The current superdense time is a breakpoint, "
+ nextBreakpoint + " , which is removed.");
}
_breakpoints.removeFirst();