1.1 --- a/iixr/fields.py Tue Feb 08 00:08:27 2011 +0100
1.2 +++ b/iixr/fields.py Thu Feb 10 01:19:13 2011 +0100
1.3 @@ -28,6 +28,12 @@
1.4
1.5 "Writing field data to files."
1.6
1.7 + def begin(self, docnum_size):
1.8 + self.write_number(docnum_size)
1.9 + self.end_record()
1.10 + self.docnum_size = docnum_size
1.11 + self.data_start = self.tell()
1.12 +
1.13 def reset(self):
1.14 self.end_record()
1.15 self.last_docnum = None
1.16 @@ -50,7 +56,7 @@
1.17
1.18 # Write the document number.
1.19
1.20 - self.write_sequence_value(docnum_seq)
1.21 + self.write_sequence_value(docnum_seq, self.docnum_size)
1.22
1.23 # Write the number of fields.
1.24
1.25 @@ -68,6 +74,14 @@
1.26
1.27 "Reading field data from files."
1.28
1.29 + def begin(self):
1.30 + self.begin_record()
1.31 + try:
1.32 + self.docnum_size = self.read_number()
1.33 + except EOFError:
1.34 + self.docnum_size = 0 # NOTE: No fields!
1.35 + self.data_start = self.tell()
1.36 +
1.37 def reset(self):
1.38 self.last_docnum = None
1.39 self.adder = None
1.40 @@ -82,7 +96,7 @@
1.41
1.42 # Read the document number.
1.43
1.44 - docnum = self.read_sequence_value()
1.45 + docnum = self.read_sequence_value(self.docnum_size)
1.46
1.47 if self.last_docnum is not None:
1.48 self.last_docnum = self.adder(docnum, self.last_docnum)
1.49 @@ -120,14 +134,12 @@
1.50 self.last_docnum = docnum
1.51 return docnum, fields
1.52
1.53 -class FieldIndexWriter(FileWriter):
1.54 +class FieldIndexWriter(FieldWriter):
1.55
1.56 "Writing field index details to files."
1.57
1.58 def reset(self):
1.59 - self.end_record()
1.60 - self.last_docnum = None
1.61 - self.subtractor = None
1.62 + FieldWriter.reset(self)
1.63 self.last_offset = 0
1.64
1.65 def write_document(self, docnum, offset):
1.66 @@ -147,7 +159,7 @@
1.67
1.68 # Write the document number.
1.69
1.70 - self.write_sequence_value(docnum_seq)
1.71 + self.write_sequence_value(docnum_seq, self.docnum_size)
1.72
1.73 # Write the offset delta.
1.74
1.75 @@ -156,15 +168,13 @@
1.76 self.last_docnum = docnum
1.77 self.last_offset = offset
1.78
1.79 -class FieldIndexReader(FileReader):
1.80 +class FieldIndexReader(FieldReader):
1.81
1.82 "Reading field index details from files."
1.83
1.84 def reset(self):
1.85 - self.last_docnum = None
1.86 - self.adder = None
1.87 + FieldReader.reset(self)
1.88 self.last_offset = 0
1.89 - self.begin_record()
1.90
1.91 def read_document(self):
1.92
1.93 @@ -172,7 +182,7 @@
1.94
1.95 # Read the document number.
1.96
1.97 - docnum = self.read_sequence_value()
1.98 + docnum = self.read_sequence_value(self.docnum_size)
1.99
1.100 if self.last_docnum is not None:
1.101 self.last_docnum = self.adder(docnum, self.last_docnum)
1.102 @@ -198,7 +208,13 @@
1.103
1.104 def write_fields(self, docnum, fields):
1.105
1.106 - "Write details of the document with the given 'docnum' and 'fields'."
1.107 + "Write details of the given 'docnum' and 'fields'."
1.108 +
1.109 + if self.entry == 0:
1.110 + docnum_size = sizeof(docnum)
1.111 + self.field_writer.begin(docnum_size)
1.112 + self.field_index_writer.begin(docnum_size)
1.113 + self.field_index_writer.reset()
1.114
1.115 if self.entry % self.interval == 0:
1.116 self.field_writer.reset()
1.117 @@ -221,9 +237,13 @@
1.118 def __init__(self, field_reader, field_index_reader):
1.119 self.field_reader = field_reader
1.120 self.field_index_reader = field_index_reader
1.121 - self.entry = 0
1.122 +
1.123 + self.field_reader.reset()
1.124 + self.field_index_reader.reset()
1.125
1.126 self.cache = {}
1.127 +
1.128 + self.entry = 0
1.129 self.docs = []
1.130 try:
1.131 while 1: