Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/revlog.py @ 4993:4205f626dc05
lazyindex: speed up __getitem__
This function is fairly performance sensitive, so we make a couple
ugly tweaks:
- keep all entries packed so we needn't test entry types
- fold index lookup/load into unpack call to eliminate
local variable setting
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 23 Jul 2007 20:44:08 -0500 |
parents | 0a676643687b |
children | d36310dd51d7 |
comparison
equal
deleted
inserted
replaced
4992:0a676643687b | 4993:4205f626dc05 |
---|---|
234 if pos < 0: | 234 if pos < 0: |
235 pos += len(self.p.index) | 235 pos += len(self.p.index) |
236 self.p.loadindex(pos) | 236 self.p.loadindex(pos) |
237 return self.p.index[pos] | 237 return self.p.index[pos] |
238 def __getitem__(self, pos): | 238 def __getitem__(self, pos): |
239 ret = self.p.index[pos] or self.load(pos) | 239 return struct.unpack(indexformatng, |
240 if isinstance(ret, str): | 240 self.p.index[pos] or self.load(pos)) |
241 ret = struct.unpack(indexformatng, ret) | |
242 return ret | |
243 def __setitem__(self, pos, item): | 241 def __setitem__(self, pos, item): |
244 self.p.index[pos] = item | 242 self.p.index[pos] = struct.pack(indexformatng, *item) |
245 def __delitem__(self, pos): | 243 def __delitem__(self, pos): |
246 del self.p.index[pos] | 244 del self.p.index[pos] |
247 def insert(self, pos, e): | 245 def insert(self, pos, e): |
248 self.p.index.insert(pos, e) | 246 self.p.index.insert(pos, struct.pack(indexformatng, *e)) |
249 def append(self, e): | 247 def append(self, e): |
250 self.p.index.append(e) | 248 self.p.index.append(struct.pack(indexformatng, *e)) |
251 | 249 |
252 class lazymap(object): | 250 class lazymap(object): |
253 """a lazy version of the node map""" | 251 """a lazy version of the node map""" |
254 def __init__(self, parser): | 252 def __init__(self, parser): |
255 self.p = parser | 253 self.p = parser |