Mercurial > public > mercurial-scm > hg
comparison mercurial/smartset.py @ 33109:247bae545061
smartset: fix generatorset.last() to not return the first element (issue5609)
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 27 Jun 2017 23:50:22 +0900 |
parents | 6d767d62b25e |
children | 01c9700fbf9f |
comparison
equal
deleted
inserted
replaced
33108:208de1534ebd | 33109:247bae545061 |
---|---|
764 | 764 |
765 Wrapper structure for generators that provides lazy membership and can | 765 Wrapper structure for generators that provides lazy membership and can |
766 be iterated more than once. | 766 be iterated more than once. |
767 When asked for membership it generates values until either it finds the | 767 When asked for membership it generates values until either it finds the |
768 requested one or has gone through all the elements in the generator | 768 requested one or has gone through all the elements in the generator |
769 | |
770 >>> xs = generatorset([0, 1, 4], iterasc=True) | |
771 >>> assert xs.last() == xs.last() | |
772 >>> xs.last() # cached | |
773 4 | |
769 """ | 774 """ |
770 def __init__(self, gen, iterasc=None): | 775 def __init__(self, gen, iterasc=None): |
771 """ | 776 """ |
772 gen: a generator producing the values for the generatorset. | 777 gen: a generator producing the values for the generatorset. |
773 """ | 778 """ |
935 it = self.fastasc | 940 it = self.fastasc |
936 if it is None: | 941 if it is None: |
937 # we need to consume all and try again | 942 # we need to consume all and try again |
938 for x in self._consumegen(): | 943 for x in self._consumegen(): |
939 pass | 944 pass |
940 return self.first() | 945 return self.last() |
941 return next(it(), None) | 946 return next(it(), None) |
942 | 947 |
943 def __repr__(self): | 948 def __repr__(self): |
944 d = {False: '-', True: '+'}[self._ascending] | 949 d = {False: '-', True: '+'}[self._ascending] |
945 return '<%s%s>' % (type(self).__name__, d) | 950 return '<%s%s>' % (type(self).__name__, d) |