1
2 package org.galagosearch.core.retrieval.structured;
3
4 import java.util.ArrayList;
5 import java.util.PriorityQueue;
6 import org.galagosearch.tupleflow.Parameters;
7
8 /***
9 *
10 * @author trevor
11 */
12 public class SynonymIterator extends ExtentDisjunctionIterator {
13 public SynonymIterator(Parameters parameters, ExtentIterator[] iterators) {
14 super(iterators);
15 loadExtents();
16 }
17
18 public void loadExtents() {
19 ExtentIterator iter = iterators.poll();
20 document = iter.document();
21
22
23 ArrayList<ExtentIterator> useable = new ArrayList<ExtentIterator>();
24 while (iterators.size() > 0 && iterators.peek().document() == document) {
25 useable.add(iterators.poll());
26 }
27 useable.add(iter);
28
29
30 PriorityQueue<ExtentArrayIterator> arrayIterators = new PriorityQueue<ExtentArrayIterator>();
31 for (ExtentIterator iterator : useable) {
32 arrayIterators.offer(new ExtentArrayIterator(iterator.extents()));
33 }
34 while (arrayIterators.size() > 0) {
35 ExtentArrayIterator top = arrayIterators.poll();
36 extents.add(top.current());
37
38 if (top.next()) {
39 arrayIterators.offer(top);
40 }
41 }
42
43
44 for (ExtentIterator i : useable) {
45 if (!i.isDone()) {
46 iterators.offer(i);
47 }
48 }
49 }
50 }