blob: bec76712e94169a7c7028c8f1fe92bea98addee3 [file] [log] [blame]
Eliza Margaretha9d1ebeb2014-08-12 11:42:58 +00001package de.ids_mannheim.korap.query.spans;
2
3import java.io.IOException;
4import java.util.Map;
5
6import org.apache.lucene.index.AtomicReaderContext;
7import org.apache.lucene.index.Term;
8import org.apache.lucene.index.TermContext;
9import org.apache.lucene.util.Bits;
10
11import de.ids_mannheim.korap.query.SubspanQuery;
12
13public class SubSpans extends SimpleSpans{
14
15 private int startOffset, length;
16
17 public SubSpans(SubspanQuery subspanQuery,
18 AtomicReaderContext context, Bits acceptDocs,
19 Map<Term, TermContext> termContexts) throws IOException {
20 super(subspanQuery, context, acceptDocs, termContexts);
21 this.startOffset= subspanQuery.getStartOffset();
22 this.length = subspanQuery.getLength();
23 hasMoreSpans = firstSpans.next();
24 }
25
26 @Override
27 public boolean next() throws IOException {
Eliza Margaretha9d1ebeb2014-08-12 11:42:58 +000028 isStartEnumeration=false;
29 return advance();
30 }
31
32 private boolean advance() throws IOException {
33 while (hasMoreSpans){
34 setMatch();
35 hasMoreSpans = firstSpans.next();
36 return true;
37 }
38 return false;
39 }
40
41 public void setMatch() throws IOException {
42 if (this.startOffset < 0)
43 matchStartPosition = firstSpans.end() + startOffset;
44 else matchStartPosition = firstSpans.start() + startOffset;
45
46 matchEndPosition = matchStartPosition + this.length;
47 matchPayload = firstSpans.getPayload();
48 matchDocNumber = firstSpans.doc();
49 }
50
51 @Override
52 public boolean skipTo(int target) throws IOException {
53 if (hasMoreSpans && (firstSpans.doc() < target)){
54 if (!firstSpans.skipTo(target)){
55 hasMoreSpans = false;
56 return false;
57 }
58 }
59 matchPayload.clear();
60 return advance();
61 }
62
63 @Override
64 public long cost() {
65 return firstSpans.cost() + 1;
66 }
67
68}