1.1 --- a/iixr/phrases.py Tue Sep 22 01:08:13 2009 +0200
1.2 +++ b/iixr/phrases.py Tue Sep 22 20:32:24 2009 +0200
1.3 @@ -29,16 +29,16 @@
1.4 def __init__(self, sequences):
1.5 itermerge.__init__(self, sequences)
1.6
1.7 - def _add_iter(self, iterator, i):
1.8 + def _add_seq(self, sequence, i):
1.9
1.10 - "Store the details of the given 'iterator' at position 'i'."
1.11 + "Store the details of the given 'sequence' at position 'i'."
1.12
1.13 - insort_right(self.iters, (len(iterator), i, iterator))
1.14 + insort_right(self.iters, (len(sequence), i, iter(sequence)))
1.15
1.16 def next(self):
1.17 if self.iters:
1.18 - freq, i, it = self.iters[0]
1.19 while 1:
1.20 + freq, i, it = self.iters[0]
1.21 doc, positions = it.next()
1.22 values = [(i, positions)]
1.23 for freq, i, it in self.iters[1:]:
1.24 @@ -46,11 +46,16 @@
1.25 if positions is None:
1.26 break
1.27 else:
1.28 - values.append((i, positions))
1.29 + insort_right(values, (i, positions))
1.30 else:
1.31 - values.sort()
1.32 return doc, [positions for (i, positions) in values]
1.33 else:
1.34 raise StopIteration
1.35
1.36 + def close(self):
1.37 + for freq, i, it in self.iters:
1.38 + if hasattr(it, "close"):
1.39 + it.close()
1.40 + self.iters = []
1.41 +
1.42 # vim: tabstop=4 expandtab shiftwidth=4
2.1 --- a/iixr/terms.py Tue Sep 22 01:08:13 2009 +0200
2.2 +++ b/iixr/terms.py Tue Sep 22 20:32:24 2009 +0200
2.3 @@ -372,7 +372,7 @@
2.4
2.5 t = self._find_term(term)
2.6 if t is None:
2.7 - return None
2.8 + return []
2.9 else:
2.10 offset, frequency, doc_frequency = t
2.11 return self._get_positions(offset, doc_frequency)
3.1 --- a/itermerge.py Tue Sep 22 01:08:13 2009 +0200
3.2 +++ b/itermerge.py Tue Sep 22 20:32:24 2009 +0200
3.3 @@ -33,13 +33,13 @@
3.4 # Prepare the underlying iterators.
3.5
3.6 for i, seq in enumerate(sequences):
3.7 - it = iter(seq)
3.8 - self._add_iter(it, i)
3.9 + self._add_seq(seq, i)
3.10 +
3.11 + def _add_seq(self, sequence, i):
3.12
3.13 - def _add_iter(self, iterator, i):
3.14 + "Store the details of the given 'sequence' at position 'i'."
3.15
3.16 - "Store the details of the given 'iterator' at position 'i'."
3.17 -
3.18 + iterator = iter(sequence)
3.19 next = iterator.next
3.20 self._add_next(next)
3.21
4.1 --- a/test.py Tue Sep 22 01:08:13 2009 +0200
4.2 +++ b/test.py Tue Sep 22 20:32:24 2009 +0200
4.3 @@ -371,7 +371,7 @@
4.4 print doc_positions == dp, doc_positions, dp
4.5 for term in ("aaa", "dog", "dingo"):
4.6 dp = rd.find_positions(term)
4.7 - print dp is None, dp
4.8 + print dp == [], dp
4.9
4.10 # (Test iterators.)
4.11