1.1 --- a/iixr.py Fri Sep 11 01:27:18 2009 +0200
1.2 +++ b/iixr.py Sat Sep 12 00:31:31 2009 +0200
1.3 @@ -99,6 +99,8 @@
1.4 def __init__(self, f):
1.5 self.f = f
1.6 self.reset()
1.7 + self.cache = []
1.8 + self.cache_length = 0
1.9
1.10 def reset(self):
1.11
1.12 @@ -110,8 +112,23 @@
1.13 self.f.seek(0)
1.14 self.reset()
1.15
1.16 + def write(self, s):
1.17 + self.cache.append(s)
1.18 + self.cache_length += len(s)
1.19 + if len(self.cache) >= 1000:
1.20 + self.flush()
1.21 +
1.22 + def tell(self):
1.23 + return self.f.tell() + self.cache_length
1.24 +
1.25 + def flush(self):
1.26 + self.f.write("".join(self.cache))
1.27 + self.cache = []
1.28 + self.cache_length = 0
1.29 +
1.30 def close(self):
1.31 if self.f is not None:
1.32 + self.flush()
1.33 self.f.close()
1.34 self.f = None
1.35
1.36 @@ -123,7 +140,7 @@
1.37
1.38 "Write 'number' to the file using a variable length encoding."
1.39
1.40 - self.f.write(vint(number))
1.41 + self.write(vint(number))
1.42
1.43 def write_string(self, s, compress=0):
1.44
1.45 @@ -157,7 +174,7 @@
1.46 # Write the length of the data before the data itself.
1.47
1.48 length = len(s)
1.49 - self.f.write(flag + vint(length) + s)
1.50 + self.write(flag + vint(length) + s)
1.51
1.52 class FileReader(File):
1.53
1.54 @@ -247,7 +264,7 @@
1.55
1.56 # Record the offset of this record.
1.57
1.58 - offset = self.f.tell()
1.59 + offset = self.tell()
1.60
1.61 # Make sure that the positions are sorted.
1.62
1.63 @@ -266,7 +283,7 @@
1.64 # Write the number of positions.
1.65 # Then write the positions.
1.66
1.67 - self.f.write(vint(docnum - self.last_docnum) + vint(len(positions)) + "".join(output))
1.68 + self.write(vint(docnum - self.last_docnum) + vint(len(positions)) + "".join(output))
1.69
1.70 self.last_docnum = docnum
1.71 return offset
1.72 @@ -306,7 +323,7 @@
1.73
1.74 # Record the offset of this record.
1.75
1.76 - offset = self.f.tell()
1.77 + offset = self.tell()
1.78 output = []
1.79
1.80 # Write the document number delta.
1.81 @@ -325,7 +342,7 @@
1.82
1.83 # Actually write the data.
1.84
1.85 - self.f.write("".join(output))
1.86 + self.write("".join(output))
1.87
1.88 return offset
1.89
1.90 @@ -769,7 +786,7 @@
1.91 self.last_term = term
1.92 self.last_offset = offset
1.93
1.94 - return self.f.tell()
1.95 + return self.tell()
1.96
1.97 class TermReader(FileReader):
1.98
1.99 @@ -1116,7 +1133,7 @@
1.100 Return the offset at which the fields are stored.
1.101 """
1.102
1.103 - offset = self.f.tell()
1.104 + offset = self.tell()
1.105
1.106 # Write the document number delta.
1.107