mercurial/revset.py
changeset 20694 621c94378d0d
parent 20693 d04aac468bf4
child 20695 d99fcf4483f8
equal deleted inserted replaced
20693:d04aac468bf4 20694:621c94378d0d
  2312 
  2312 
  2313     def reverse(self):
  2313     def reverse(self):
  2314         self._subset.reverse()
  2314         self._subset.reverse()
  2315         self._ascending = not self._ascending
  2315         self._ascending = not self._ascending
  2316 
  2316 
       
  2317 class addset(object):
       
  2318     """Wrapper structure for lazily adding two structures without losing much
       
  2319     performance on the __contains__ method
       
  2320     """
       
  2321     def __init__(self, revs1, revs2):
       
  2322         self._r1 = revs1
       
  2323         self._r2 = revs2
       
  2324         self._iter = None
       
  2325 
       
  2326     def _iterator(self):
       
  2327         if not self._iter:
       
  2328             def gen():
       
  2329                 for r in self._r1:
       
  2330                     yield r
       
  2331                 s = self._r1.set()
       
  2332                 for r in self._r2:
       
  2333                     if r not in s:
       
  2334                         yield r
       
  2335             self._iter = generatorset(gen())
       
  2336 
       
  2337         return self._iter
       
  2338 
       
  2339     def __iter__(self):
       
  2340         for r in self._iterator():
       
  2341             yield r
       
  2342 
       
  2343     def __contains__(self, x):
       
  2344         return x in self._r1 or x in self._r2
       
  2345 
  2317 class generatorset(object):
  2346 class generatorset(object):
  2318     """Wrapper structure for generators that provides lazy membership and can
  2347     """Wrapper structure for generators that provides lazy membership and can
  2319     be iterated more than once.
  2348     be iterated more than once.
  2320     When asked for membership it generates values until either it finds the
  2349     When asked for membership it generates values until either it finds the
  2321     requested one or has gone through all the elements in the generator
  2350     requested one or has gone through all the elements in the generator