##// END OF EJS Templates
revset: introduce an abstractsmartset class...
Pierre-Yves David -
r22692:78c916f2 default
parent child Browse files
Show More
@@ -2195,7 +2195,93 b' def funcsused(tree):'
2195 funcs.add(tree[1][1])
2195 funcs.add(tree[1][1])
2196 return funcs
2196 return funcs
2197
2197
2198 class baseset(list):
2198 class abstractsmartset(object):
2199
2200 def __nonzero__(self):
2201 """True if the smartset is not empty"""
2202 raise NotImplementedError()
2203
2204 def __contains__(self, rev):
2205 """provide fast membership testing"""
2206 raise NotImplementedError()
2207
2208 def __set__(self):
2209 """Returns a set or a smartset containing all the elements.
2210
2211 The returned structure should be the fastest option for membership
2212 testing.
2213
2214 This is part of the mandatory API for smartset."""
2215 raise NotImplementedError()
2216
2217 def __iter__(self):
2218 """iterate the set in the order it is supposed to be iterated"""
2219 raise NotImplementedError()
2220
2221 def isascending(self):
2222 """True if the set will iterate in ascending order"""
2223 raise NotImplementedError()
2224
2225 def ascending(self):
2226 """Sorts the set in ascending order (in place).
2227
2228 This is part of the mandatory API for smartset."""
2229 raise NotImplementedError()
2230
2231 def isdescending(self):
2232 """True if the set will iterate in descending order"""
2233 raise NotImplementedError()
2234
2235 def descending(self):
2236 """Sorts the set in descending order (in place).
2237
2238 This is part of the mandatory API for smartset."""
2239 raise NotImplementedError()
2240
2241 def min(self):
2242 """return the minimum element in the set"""
2243 raise NotImplementedError()
2244
2245 def max(self):
2246 """return the maximum element in the set"""
2247 raise NotImplementedError()
2248
2249 def reverse(self):
2250 """reverse the expected iteration order"""
2251 raise NotImplementedError()
2252
2253 def sort(self, reverse=True):
2254 """get the set to iterate in an ascending or descending order"""
2255 raise NotImplementedError()
2256
2257 def __and__(self, other):
2258 """Returns a new object with the intersection of the two collections.
2259
2260 This is part of the mandatory API for smartset."""
2261 raise NotImplementedError()
2262
2263 def __add__(self, other):
2264 """Returns a new object with the union of the two collections.
2265
2266 This is part of the mandatory API for smartset."""
2267 raise NotImplementedError()
2268
2269 def __sub__(self, other):
2270 """Returns a new object with the substraction of the two collections.
2271
2272 This is part of the mandatory API for smartset."""
2273 raise NotImplementedError()
2274
2275 def filter(self, condition):
2276 """Returns this smartset filtered by condition as a new smartset.
2277
2278 `condition` is a callable which takes a revision number and returns a
2279 boolean.
2280
2281 This is part of the mandatory API for smartset."""
2282 raise NotImplementedError()
2283
2284 class baseset(list, abstractsmartset):
2199 """Basic data structure that represents a revset and contains the basic
2285 """Basic data structure that represents a revset and contains the basic
2200 operation that it should be able to perform.
2286 operation that it should be able to perform.
2201
2287
@@ -2320,7 +2406,7 b' class _orderedsetmixin(object):'
2320 return self._last()
2406 return self._last()
2321 return self._first()
2407 return self._first()
2322
2408
2323 class lazyset(object):
2409 class lazyset(abstractsmartset):
2324 """Duck type for baseset class which iterates lazily over the revisions in
2410 """Duck type for baseset class which iterates lazily over the revisions in
2325 the subset and contains a function which tests for membership in the
2411 the subset and contains a function which tests for membership in the
2326 revset
2412 revset
@@ -2754,7 +2840,7 b' def spanset(repo, start=None, end=None):'
2754 return _spanset(repo, start, end)
2840 return _spanset(repo, start, end)
2755
2841
2756
2842
2757 class _spanset(_orderedsetmixin):
2843 class _spanset(_orderedsetmixin, abstractsmartset):
2758 """Duck type for baseset class which represents a range of revisions and
2844 """Duck type for baseset class which represents a range of revisions and
2759 can work lazily and without having all the range in memory
2845 can work lazily and without having all the range in memory
2760
2846
General Comments 0
You need to be logged in to leave comments. Login now