##// END OF EJS Templates
revset: added generatorset class with cached __contains__ method
Lucas Moscovicz -
r20536:532b114a default
parent child Browse files
Show More
@@ -2176,6 +2176,37 b' class lazyset(object):'
2176 2176 def set(self):
2177 2177 return set([r for r in self])
2178 2178
2179 class generatorset(object):
2180 """Wrapper structure for generators that provides lazy membership."""
2181 def __init__(self, gen):
2182 self._gen = gen
2183 self._iter = iter(gen)
2184 self._cache = {}
2185
2186 def __contains__(self, x):
2187 if x in self._cache:
2188 return self._cache[x]
2189
2190 while True:
2191 try:
2192 l = self._iter.next()
2193 self._cache[l] = True
2194 if l == x:
2195 return True
2196 except (StopIteration):
2197 break
2198
2199 self._cache[x] = False
2200 return False
2201
2202 def __iter__(self):
2203 for item in self._gen:
2204 self._cache[item] = True
2205 yield item
2206
2207 def set(self):
2208 return self
2209
2179 2210 class spanset(object):
2180 2211 """Duck type for baseset class which represents a range of revisions and
2181 2212 can work lazily and without having all the range in memory
General Comments 0
You need to be logged in to leave comments. Login now