# HG changeset patch # User Lucas Moscovicz # Date 1393550823 28800 # Node ID 7fc371d2e5a38d8d06878ed78da3f6c22364659d # Parent 0dc7a50345c2c64539837a4645f1aa3c162fb4e9 revset: added ordered generatorset classes with __contains__ method They stop iterating as soon as they go past the value they are looking for, so, for values not in the generator they return faster. diff -r 0dc7a50345c2 -r 7fc371d2e5a3 mercurial/revset.py --- a/mercurial/revset.py Tue Feb 25 20:29:46 2014 +0100 +++ b/mercurial/revset.py Thu Feb 27 17:27:03 2014 -0800 @@ -2296,6 +2296,40 @@ def set(self): return self +class ascgeneratorset(generatorset): + """ Same structure as generatorset but stops iterating after it goes past + the value when asked for membership and the element is not contained + """ + def __contains__(self, x): + if x in self._cache: + return self._cache[x] + + for l in self: + if l == x: + return True + if l > x: + break + + self._cache[x] = False + return False + +class descgeneratorset(generatorset): + """ Same structure as generatorset but stops iterating after it goes past + the value when asked for membership and the element is not contained + """ + def __contains__(self, x): + if x in self._cache: + return self._cache[x] + + for l in self: + if l == x: + return True + if l < x: + break + + self._cache[x] = False + return False + class spanset(object): """Duck type for baseset class which represents a range of revisions and can work lazily and without having all the range in memory