Mercurial > public > mercurial-scm > hg-stable
diff mercurial/smartset.py @ 32840:9b7d615108d7
smartset: micro optimize spanset.slice() to narrow range accordingly
-1ms isn't significant, but seems not bad.
revset #0: limit(0:9999, 100, 9000)
6) 0.001145
7) 0.000214
revset #3: last(0:9999, 100)
6) 0.000197
7) 0.000171
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Fri, 10 Apr 2015 00:14:16 +0900 |
parents | 653d60455dbe |
children | 27ba0d8dc26c |
line wrap: on
line diff
--- a/mercurial/smartset.py Thu Apr 09 23:56:06 2015 +0900 +++ b/mercurial/smartset.py Fri Apr 10 00:14:16 2015 +0900 @@ -1056,6 +1056,18 @@ return x return None + def _slice(self, start, stop): + if self._hiddenrevs: + # unoptimized since all hidden revisions in range has to be scanned + return super(_spanset, self)._slice(start, stop) + if self._ascending: + x = min(self._start + start, self._end) + y = min(self._start + stop, self._end) + else: + x = max(self._end - stop, self._start) + y = max(self._end - start, self._start) + return _spanset(x, y, self._ascending, self._hiddenrevs) + def __repr__(self): d = {False: '-', True: '+'}[self._ascending] return '<%s%s %d:%d>' % (type(self).__name__.lstrip('_'), d,