event_queue.py 876 B

123456789101112131415161718192021222324252627
  1. from sccd.runtime.infinity import INFINITY
  2. from heapq import heappush, heappop
  3. class EventQueue(object):
  4. def __init__(self):
  5. self.event_list = []
  6. self.event_time_numbers = {}
  7. def __str__(self):
  8. return str(self.event_list)
  9. def isEmpty(self):
  10. return not self.event_list
  11. def getEarliestTime(self):
  12. return INFINITY if self.isEmpty() else self.event_list[0][0]
  13. def add(self, event_time, event):
  14. self.event_time_numbers[event_time] = self.event_time_numbers.setdefault(event_time, 0) + 1
  15. heappush(self.event_list, (event_time + self.event_time_numbers[event_time], event))
  16. return id(event)
  17. def remove(self, event_id):
  18. self.event_list = sorted([e for e in self.event_list if id(e) != event_id])
  19. def pop(self):
  20. return heappop(self.event_list)[1]