Mercurial > public > mercurial-scm > hg
comparison mercurial/revset.py @ 20705:9cc2249a9461
revset: made generatorset a private class
This class are not supposed to be used outside revset.py since it only
wraps content that is used by baseset typed classes.
It only gets created by revset operations or private methods.
author | Lucas Moscovicz <lmoscovicz@fb.com> |
---|---|
date | Wed, 12 Mar 2014 17:07:38 -0700 |
parents | e07b1fd30805 |
children | efb34b066e7a |
comparison
equal
deleted
inserted
replaced
20704:623ed0ed793e | 20705:9cc2249a9461 |
---|---|
2323 yield r | 2323 yield r |
2324 s = self._r1.set() | 2324 s = self._r1.set() |
2325 for r in self._r2: | 2325 for r in self._r2: |
2326 if r not in s: | 2326 if r not in s: |
2327 yield r | 2327 yield r |
2328 self._iter = generatorset(gen()) | 2328 self._iter = _generatorset(gen()) |
2329 | 2329 |
2330 return self._iter | 2330 return self._iter |
2331 | 2331 |
2332 def __iter__(self): | 2332 def __iter__(self): |
2333 for r in self._iterator(): | 2333 for r in self._iterator(): |
2334 yield r | 2334 yield r |
2335 | 2335 |
2336 def __contains__(self, x): | 2336 def __contains__(self, x): |
2337 return x in self._r1 or x in self._r2 | 2337 return x in self._r1 or x in self._r2 |
2338 | 2338 |
2339 class generatorset(object): | 2339 class _generatorset(object): |
2340 """Wrapper structure for generators that provides lazy membership and can | 2340 """Wrap a generator for lazy iteration |
2341 | |
2342 Wrapper structure for generators that provides lazy membership and can | |
2341 be iterated more than once. | 2343 be iterated more than once. |
2342 When asked for membership it generates values until either it finds the | 2344 When asked for membership it generates values until either it finds the |
2343 requested one or has gone through all the elements in the generator | 2345 requested one or has gone through all the elements in the generator |
2346 | |
2347 This class does not duck-type baseset and it's only supposed to be used | |
2348 internally | |
2344 """ | 2349 """ |
2345 def __init__(self, gen): | 2350 def __init__(self, gen): |
2346 self._gen = gen | 2351 self._gen = gen |
2347 self._iter = iter(gen) | 2352 self._iter = iter(gen) |
2348 self._cache = {} | 2353 self._cache = {} |
2384 if not self._finished: | 2389 if not self._finished: |
2385 for i in self: | 2390 for i in self: |
2386 continue | 2391 continue |
2387 self._genlist.sort(reverse=reverse) | 2392 self._genlist.sort(reverse=reverse) |
2388 | 2393 |
2389 class ascgeneratorset(generatorset): | 2394 class ascgeneratorset(_generatorset): |
2390 """ Same structure as generatorset but stops iterating after it goes past | 2395 """ Same structure as _generatorset but stops iterating after it goes past |
2391 the value when asked for membership and the element is not contained | 2396 the value when asked for membership and the element is not contained |
2392 """ | 2397 """ |
2393 def __contains__(self, x): | 2398 def __contains__(self, x): |
2394 if x in self._cache: | 2399 if x in self._cache: |
2395 return self._cache[x] | 2400 return self._cache[x] |
2401 break | 2406 break |
2402 | 2407 |
2403 self._cache[x] = False | 2408 self._cache[x] = False |
2404 return False | 2409 return False |
2405 | 2410 |
2406 class descgeneratorset(generatorset): | 2411 class descgeneratorset(_generatorset): |
2407 """ Same structure as generatorset but stops iterating after it goes past | 2412 """ Same structure as _generatorset but stops iterating after it goes past |
2408 the value when asked for membership and the element is not contained | 2413 the value when asked for membership and the element is not contained |
2409 """ | 2414 """ |
2410 def __contains__(self, x): | 2415 def __contains__(self, x): |
2411 if x in self._cache: | 2416 if x in self._cache: |
2412 return self._cache[x] | 2417 return self._cache[x] |