changeset 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
files mercurial/revlog.py
diffstat 1 files changed, 5 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -236,18 +236,16 @@ class lazyindex(object):
         self.p.loadindex(pos)
         return self.p.index[pos]
     def __getitem__(self, pos):
-        ret = self.p.index[pos] or self.load(pos)
-        if isinstance(ret, str):
-            ret = struct.unpack(indexformatng, ret)
-        return ret
+        return struct.unpack(indexformatng,
+                             self.p.index[pos] or self.load(pos))
     def __setitem__(self, pos, item):
-        self.p.index[pos] = item
+        self.p.index[pos] = struct.pack(indexformatng, *item)
     def __delitem__(self, pos):
         del self.p.index[pos]
     def insert(self, pos, e):
-        self.p.index.insert(pos, e)
+        self.p.index.insert(pos, struct.pack(indexformatng, *e))
     def append(self, e):
-        self.p.index.append(e)
+        self.p.index.append(struct.pack(indexformatng, *e))
 
 class lazymap(object):
     """a lazy version of the node map"""