aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/query/AnswerTuplesImp.java
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();
	}

}