1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- from kernel.mvk_server.python_runtime.infinity import INFINITY
- class EventQueue(object):
- class EventQueueEntry(object):
- def __init__(self, event_list, time_offset) :
- self.event_list = event_list
- self.time_offset = time_offset
-
- def decreaseTime(self, offset) :
- self.time_offset -= offset;
-
- def getEvents(self) :
- return self.event_list
-
- def getTime (self) :
- return self.time_offset
- def __init__(self):
- self.event_list = []
- def add(self, event_list, time_offset) :
- entry = EventQueue.EventQueueEntry(event_list, time_offset);
- #We maintain a sorted stable list
- insert_index = 0;
- index = len(self.event_list)-1
- while (index >= 0) :
- if (self.event_list[index].getTime() <= time_offset) :
- insert_index = index + 1;
- break;
- index -= 1
- self.event_list.insert(insert_index, entry)
-
- def decreaseTime(self, offset) :
- for event in self.event_list :
- event.decreaseTime(offset)
-
- def isEmpty(self) :
- return len(self.event_list) == 0
-
- def getEarliestTime(self) :
- """Returns the earliest time. INFINITY if no events are present."""
- if self.isEmpty() :
- return INFINITY
- else :
- return self.event_list[0].getTime()
-
- def popDueEvents(self) :
- result = []
- if (self.isEmpty() or self.event_list[0].getTime() > 0.0) :
- #There are no events, or the earliest event isn't due, so we can already return an emtpy result
- return result
- index = 0;
- while (index < len(self.event_list) and self.event_list[index].getTime() <= 0.0) :
- result.append(self.event_list[index].getEvents()) #Add all events that are due (offset less than 0) to the result
- index += 1
- self.event_list = self.event_list[len(result):]
- return result;
|