comparison mercurial/revset.py @ 20512:659b8d8ddf19

revset: added cache to lazysets This allows __contains__ to return faster when asked for same value twice.
author Lucas Moscovicz <lmoscovicz@fb.com>
date Tue, 04 Feb 2014 15:31:57 -0800
parents 2efd608473fb
children 1850a7f5fb66
comparison
equal deleted inserted replaced
20511:5840da876235 20512:659b8d8ddf19
2115 revset 2115 revset
2116 """ 2116 """
2117 def __init__(self, subset, condition): 2117 def __init__(self, subset, condition):
2118 self._subset = subset 2118 self._subset = subset
2119 self._condition = condition 2119 self._condition = condition
2120 self._cache = {}
2120 2121
2121 def __contains__(self, x): 2122 def __contains__(self, x):
2122 return x in self._subset and self._condition(x) 2123 c = self._cache
2124 if x not in c:
2125 c[x] = x in self._subset and self._condition(x)
2126 return c[x]
2123 2127
2124 def __iter__(self): 2128 def __iter__(self):
2125 cond = self._condition 2129 cond = self._condition
2126 for x in self._subset: 2130 for x in self._subset:
2127 if cond(x): 2131 if cond(x):