| 101 | |
| 102 | |
| 103 | class ArrayCacheByTimestamp(BaseCache): |
| 104 | def __init__(self, max_size=None): |
| 105 | super(ArrayCacheByTimestamp, self).__init__(max_size) |
| 106 | self.hashmap = {} |
| 107 | self._size_tracker = set() |
| 108 | self._new_updates = 0 |
| 109 | self._clear_updates = False |
| 110 | |
| 111 | def getLimit(self, symbol, limit): |
| 112 | self._clear_updates = True |
| 113 | if limit is None: |
| 114 | return self._new_updates |
| 115 | return min(self._new_updates, limit) |
| 116 | |
| 117 | def append(self, item): |
| 118 | if item[0] in self.hashmap: |
| 119 | reference = self.hashmap[item[0]] |
| 120 | if reference != item: |
| 121 | reference[0:len(item)] = item |
| 122 | else: |
| 123 | self.hashmap[item[0]] = item |
| 124 | if len(self._deque) == self._deque.maxlen: |
| 125 | delete_reference = self._deque.popleft() |
| 126 | del self.hashmap[delete_reference[0]] |
| 127 | self._deque.append(item) |
| 128 | if self._clear_updates: |
| 129 | self._clear_updates = False |
| 130 | self._size_tracker.clear() |
| 131 | self._size_tracker.add(item[0]) |
| 132 | self._new_updates = len(self._size_tracker) |
| 133 | |
| 134 | |
| 135 | class ArrayCacheBySymbolById(ArrayCache): |
no outgoing calls
searching dependent graphs…