Mercurial > hg
comparison mercurial/changelog.py @ 24030:828dc8db5515
revlog: add __contains__ for fast membership test
Because revlog implements __iter__, "rev in revlog" works but does silly O(n)
lookup unexpectedly. So it seems good to add fast version of __contains__.
This allows "rev in repo.changelog" in the next patch.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 04 Feb 2015 21:25:57 +0900 |
parents | e44399c494ab |
children | b5cd8c2f6e65 |
comparison
equal
deleted
inserted
replaced
24029:e1dbe0b215ae | 24030:828dc8db5515 |
---|---|
141 """filtered version of revlog.tip""" | 141 """filtered version of revlog.tip""" |
142 for i in xrange(len(self) -1, -2, -1): | 142 for i in xrange(len(self) -1, -2, -1): |
143 if i not in self.filteredrevs: | 143 if i not in self.filteredrevs: |
144 return self.node(i) | 144 return self.node(i) |
145 | 145 |
146 def __contains__(self, rev): | |
147 """filtered version of revlog.__contains__""" | |
148 return (revlog.revlog.__contains__(self, rev) | |
149 and rev not in self.filteredrevs) | |
150 | |
146 def __iter__(self): | 151 def __iter__(self): |
147 """filtered version of revlog.__iter__""" | 152 """filtered version of revlog.__iter__""" |
148 if len(self.filteredrevs) == 0: | 153 if len(self.filteredrevs) == 0: |
149 return revlog.revlog.__iter__(self) | 154 return revlog.revlog.__iter__(self) |
150 | 155 |