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

historyBuffer.py (1752B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\historyBuffer.py
      2 import collections
      3 import blue
      4 
      5 class HistoryBuffer:
      6 
      7     def __init__(self, maxLen = None):
      8         self.maxLen = maxLen
      9         self.Reset()
     10 
     11     def Reset(self):
     12         self.deque = collections.deque(maxlen=self.maxLen)
     13         self.idx = None
     14 
     15     def Append(self, data):
     16         if len(self.deque) and self.idx is not None:
     17             self.deque = collections.deque(list(self.deque)[:self.idx + 1], maxlen=self.maxLen)
     18         if self.ShouldAppend(data):
     19             self.deque.append(data)
     20         self.idx = len(self.deque) - 1
     21 
     22     def ShouldAppend(self, data):
     23         if not len(self.deque):
     24             return True
     25         try:
     26             if data != self.deque[-1]:
     27                 return True
     28         except TypeError:
     29             return True
     30 
     31     def GoBack(self):
     32         if self.IsBackEnabled():
     33             self.idx -= 1
     34             return self.GetCurrent()
     35 
     36     def GetPrevious(self):
     37         if self.IsBackEnabled():
     38             return self.deque[self.idx - 1]
     39 
     40     def GetNext(self):
     41         if self.IsForwardEnabled():
     42             return self.deque[self.idx + 1]
     43 
     44     def GoForward(self):
     45         if self.IsForwardEnabled():
     46             self.idx += 1
     47             return self.GetCurrent()
     48 
     49     def GetCurrent(self):
     50         return self.deque[self.idx]
     51 
     52     def IsBackEnabled(self):
     53         return len(self.deque) > 1 and self.idx > 0
     54 
     55     def IsForwardEnabled(self):
     56         return len(self.deque) > 1 and self.idx < len(self.deque) - 1
     57 
     58     def UpdateCurrent(self, value):
     59         if self.idx is not None:
     60             self.deque[self.idx] = value
     61 
     62     def IsEmpty(self):
     63         return len(self.deque) == 0