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