Update UnorderedDistanceSpans as an abstract class
Add UnorderedElementDistanceSpans and UnorderedTokenDistanceSpans
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/SimpleSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/SimpleSpans.java
index 0b7b08c..a7483aa 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/SimpleSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/SimpleSpans.java
@@ -2,6 +2,7 @@
import java.io.IOException;
import java.util.Collection;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -17,18 +18,18 @@
/** An abstract class for Span enumeration including span match properties
* and basic methods.
*
- * @author margaretha
- *
+ * @author margaretha
* */
public abstract class SimpleSpans extends Spans{
+ private SimpleSpanQuery query;
protected boolean isStartEnumeration;
+
protected boolean hasMoreSpans;
- protected int matchDocNumber, matchStartPosition, matchEndPosition;
- protected List<byte[]> matchPayload;
-
// Warning: enumeration of Spans
protected Spans firstSpans, secondSpans;
- private SimpleSpanQuery query;
+
+ protected int matchDocNumber, matchStartPosition, matchEndPosition;
+ protected List<byte[]> matchPayload;
public SimpleSpans (SimpleSpanQuery simpleSpanQuery,
AtomicReaderContext context,
@@ -74,7 +75,25 @@
}
return true;
}
-
+
+ /** Find the same doc shared by element, firstspan and secondspan.
+ * @return true iff such a doc is found.
+ * */
+ protected boolean findSameDoc(Spans x,
+ Spans y, Spans e) throws IOException{
+
+ while (hasMoreSpans) {
+ if (ensureSameDoc(x, y) &&
+ e.doc() == x.doc()){
+ return true;
+ }
+ if (!ensureSameDoc(e,y)){
+ return false;
+ };
+ }
+ return false;
+ }
+
@Override
public int doc() {
return matchDocNumber;