NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

priorityQueue.py (1118B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\dbuff\common\priorityQueue.py
      2 import heapq
      3 
      4 class BuffPriorityQueue(object):
      5     _REMOVED = '<removed-buff>'
      6 
      7     def __init__(self):
      8         self._queue = []
      9         self._entries = {}
     10 
     11     def Add(self, buff, evaluationTimestamp):
     12         entry = self._entries.get(buff)
     13         if entry:
     14             if entry[0] == evaluationTimestamp:
     15                 return
     16             self.Remove(buff)
     17         entry = [evaluationTimestamp, buff]
     18         heapq.heappush(self._queue, entry)
     19         self._entries[buff] = entry
     20 
     21     def Remove(self, buff):
     22         entry = self._entries.pop(buff)
     23         entry[1] = self._REMOVED
     24 
     25     def PopNextReadyBuff(self, now):
     26         while self._queue:
     27             evaluationTimestamp, buff = self._queue[0]
     28             if buff is self._REMOVED:
     29                 heapq.heappop(self._queue)
     30             else:
     31                 if evaluationTimestamp < now:
     32                     heapq.heappop(self._queue)
     33                     del self._entries[buff]
     34                     return buff
     35                 return None