blob: fd3fb1f2459a6b3004c40a2c58460f7d97037e15 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
package uk.ac.ox.cs.pagoda.query;
import java.util.Iterator;
import java.util.Set;
public class AnswerTuplesImp extends AnswerTuples {
int m_index;
Iterator<AnswerTuple> m_iter;
Set<AnswerTuple> m_answers1, m_answers2;
String[] m_answerVars;
AnswerTuple m_tuple;
public AnswerTuplesImp(String[] answerVars, Set<AnswerTuple> answers) {
m_answers1 = answers;
m_answers2 = null;
m_answerVars = answerVars;
reset();
}
public AnswerTuplesImp(String[] answerVars, Set<AnswerTuple> answers1, Set<AnswerTuple> answers2) {
m_answers1 = answers1;
m_answers2 = answers2;
m_answerVars = answerVars;
reset();
}
@Override
public boolean isValid() {
return m_tuple != null;
}
@Override
public int getArity() {
return m_answerVars.length;
}
@Override
public void moveNext() {
if (m_iter != null && m_iter.hasNext()) {
m_tuple = m_iter.next();
return ;
}
else if (m_answers2 != null && m_index == 1){
++m_index;
m_iter = m_answers2.iterator();
if (m_iter.hasNext()) {
m_tuple = m_iter.next();
return ;
}
}
else
m_tuple = null;
}
@Override
public void reset() {
if (m_answers1 == null || m_answers1.isEmpty()) {
m_index = 2;
m_iter = m_answers2 == null ? null : m_answers2.iterator();
}
else {
m_index = 1;
m_iter = m_answers1.iterator();
}
moveNext();
}
@Override
public boolean contains(AnswerTuple t) {
return m_answers1.contains(t) || (m_answers2 != null && m_answers2.contains(t));
}
@Override
public AnswerTuple getTuple() {
return m_tuple;
}
@Override
public String[] getAnswerVariables() {
return m_answerVars;
}
@Override
public void remove() {
m_iter.remove();
}
}
|