1 |
// (c) Tuomas J. Lukka |
// AUTOGENERATED By makeswamp.py - DO NOT EDIT. |
2 |
|
|
3 |
package org.fenfire.swamp.impl; |
package org.fenfire.swamp.impl; |
4 |
import org.fenfire.Obs; |
import org.fenfire.Obs; |
5 |
import org.fenfire.swamp.*; |
import org.fenfire.swamp.*; |
6 |
|
|
7 |
import java.util.HashMap; |
import java.util.HashMap; |
8 |
import java.util.HashSet; |
import java.util.Set; |
9 |
import java.util.ArrayList; |
import java.util.HashSet; |
10 |
import java.util.Iterator; |
import java.util.ArrayList; |
11 |
|
import java.util.Iterator; |
12 |
/** An RDF Graph implemented by HashMaps. |
|
13 |
* Relatively inefficient but a basic implementation |
/** An RDF Graph implemented by HashMaps. |
14 |
* that can be used as a reference. |
* Relatively inefficient but a basic implementation |
15 |
*/ |
* that can be used as a reference. |
|
public class HashGraph extends AbstractGraph { |
|
|
|
|
|
/** Map: key = subject, value = (Map: key=predicate, value = |
|
|
* (Set: r/l)). |
|
16 |
*/ |
*/ |
17 |
private HashMap spo = new HashMap(); |
public class HashGraph extends AbstractGraph { |
|
|
|
|
|
|
|
private HashSet emptySet = new HashSet(); |
|
18 |
|
|
19 |
private StdObserver observer = new StdObserver(); |
private HashMap ind_012 = new HashMap(); |
20 |
|
private HashMap ind_021 = new HashMap(); |
21 |
|
private HashMap ind_120 = new HashMap(); |
22 |
|
|
23 |
|
|
24 |
|
private HashSet emptySet = new HashSet(); |
25 |
|
private StdObserver observer = new StdObserver(); |
26 |
|
|
27 |
|
private final void rm_ind(HashMap ind, Object o1, Object o2, Object o3) { |
28 |
|
HashMap m2 = (HashMap)ind.get(o1); |
29 |
|
if(m2 == null) return; |
30 |
|
HashSet m3 = (HashSet)m2.get(o2); |
31 |
|
if(m3 == null) return; |
32 |
|
m3.remove(o3); |
33 |
|
} |
34 |
|
|
35 |
private HashSet get_HHS(boolean create, HashMap m, |
private final void add_ind(HashMap ind, Object o1, Object o2, Object o3) { |
36 |
Object o1, Object o2) { |
HashMap m2 = (HashMap)ind.get(o1); |
37 |
HashMap m2 = (HashMap)m.get(o1); |
if(m2 == null) { |
|
if(m2 == null) { |
|
|
if(create) { |
|
38 |
m2 = new HashMap(); |
m2 = new HashMap(); |
39 |
m.put(o1, m2); |
ind.put(o1, m2); |
|
} else { |
|
|
return null; |
|
40 |
} |
} |
41 |
} |
HashSet s = (HashSet)m2.get(o2); |
42 |
HashSet s = (HashSet)m2.get(o2); |
if(s == null) { |
|
if(s == null) { |
|
|
if(create) { |
|
43 |
s = new HashSet(); |
s = new HashSet(); |
44 |
m2.put(o2, s); |
m2.put(o2, s); |
|
} else { |
|
|
return null; |
|
45 |
} |
} |
46 |
|
s.add(o3); |
47 |
} |
} |
|
return s; |
|
|
} |
|
48 |
|
|
49 |
public Object find1_11X(Object subject, Object predicate, Obs obs) { |
public void set1_11X(Object subject, Object predicate, Object object) { |
50 |
observer.addObs(subject, predicate, observer.WILDCARD, obs); |
rm_11A(subject, predicate); |
|
HashSet s = get_HHS(false, spo, subject, predicate); |
|
|
if(s == null) return null; |
|
|
int size = s.size(); |
|
|
if(size == 0) return null; |
|
|
if(size != 1) throw new NotUniqueError(subject, predicate, null); |
|
|
// urgh... |
|
|
return s.iterator().next(); |
|
|
} |
|
51 |
|
|
52 |
|
add(subject, predicate, object); |
53 |
|
} |
54 |
|
|
|
public Iterator findN_11X_Iter(Object subject, Object predicate, Obs obs) { |
|
|
observer.addObs(subject, predicate, observer.WILDCARD, obs); |
|
|
HashSet s = get_HHS(false, spo, subject, predicate); |
|
|
if(s == null) |
|
|
return emptySet.iterator(); |
|
|
int size = s.size(); |
|
|
return s.iterator(); |
|
|
} |
|
55 |
|
|
56 |
|
////////////////// |
57 |
|
// Finds |
58 |
|
|
59 |
|
public Object find1_11X(Object e0,Object e1,Obs obs) { |
60 |
|
if(obs != null) observer.addObs(e0, e1, observer.WILDCARD, obs); |
61 |
|
|
62 |
|
HashMap hash1 = (HashMap) ind_012.get(e0); |
63 |
|
if(hash1 == null) return null; |
64 |
|
|
65 |
|
HashSet hash2 = (HashSet) hash1.get(e1); |
66 |
|
if(hash2 == null) return null; |
67 |
|
|
68 |
|
HashSet resSet = hash2; |
69 |
|
|
70 |
|
if(resSet.size() == 0) return null; |
71 |
|
if(resSet.size() == 1) return resSet.iterator().next(); |
72 |
|
throw new NotUniqueError(e0,e1,null); |
73 |
|
} |
74 |
|
|
75 |
|
public Object find1_1X1(Object e0,Object e2,Obs obs) { |
76 |
|
if(obs != null) observer.addObs(e0, observer.WILDCARD, e2, obs); |
77 |
|
|
78 |
// -------------------------------- |
HashMap hash1 = (HashMap) ind_021.get(e0); |
79 |
// Methods which modify the structure by calling the single-triple |
if(hash1 == null) return null; |
80 |
// methods below. |
|
81 |
// |
HashSet hash2 = (HashSet) hash1.get(e2); |
82 |
|
if(hash2 == null) return null; |
83 |
|
|
84 |
|
HashSet resSet = hash2; |
85 |
|
|
86 |
|
if(resSet.size() == 0) return null; |
87 |
|
if(resSet.size() == 1) return resSet.iterator().next(); |
88 |
|
throw new NotUniqueError(e0,null,e2); |
89 |
|
} |
90 |
|
|
91 |
|
public Object find1_X11(Object e1,Object e2,Obs obs) { |
92 |
|
if(obs != null) observer.addObs(observer.WILDCARD, e1, e2, obs); |
93 |
|
|
94 |
public void set1_11X(Object subject, Object predicate, Object object) { |
HashMap hash1 = (HashMap) ind_120.get(e1); |
95 |
rm_11X(subject, predicate); |
if(hash1 == null) return null; |
96 |
|
|
97 |
|
HashSet hash2 = (HashSet) hash1.get(e2); |
98 |
|
if(hash2 == null) return null; |
99 |
|
|
100 |
|
HashSet resSet = hash2; |
101 |
|
|
102 |
|
if(resSet.size() == 0) return null; |
103 |
|
if(resSet.size() == 1) return resSet.iterator().next(); |
104 |
|
throw new NotUniqueError(null,e1,e2); |
105 |
|
} |
106 |
|
|
107 |
add(subject, predicate, object); |
public Object find1_1XA(Object e0,Obs obs) { |
108 |
} |
if(obs != null) observer.addObs(e0, observer.WILDCARD, observer.WILDCARD, obs); |
109 |
|
|
110 |
public void rm_11X(Object subject, Object predicate) { |
HashMap hash1 = (HashMap) ind_012.get(e0); |
111 |
HashSet s = get_HHS(false, spo, subject, predicate); |
if(hash1 == null) return null; |
112 |
if(s == null) return; |
|
113 |
ArrayList l = new ArrayList(s); |
Set resSet = hash1.keySet(); |
114 |
for(Iterator i = l.iterator(); i.hasNext(); ) |
|
115 |
rm_111(subject, predicate, i.next()); |
if(resSet.size() == 0) return null; |
116 |
} |
if(resSet.size() == 1) return resSet.iterator().next(); |
117 |
|
throw new NotUniqueError(e0,null,null); |
118 |
|
} |
119 |
|
|
120 |
|
public Object find1_XAA(Obs obs) { |
121 |
|
if(obs != null) observer.addObs(observer.WILDCARD, observer.WILDCARD, observer.WILDCARD, obs); |
122 |
|
|
123 |
// -------------------------------- |
Set resSet = ind_012.keySet(); |
124 |
// Methods which actually modify the structure |
|
125 |
// |
if(resSet.size() == 0) return null; |
126 |
|
if(resSet.size() == 1) return resSet.iterator().next(); |
127 |
public void rm_111(Object subject, Object predicate, Object object) { |
throw new NotUniqueError(null,null,null); |
128 |
HashSet s = get_HHS(false, spo, subject, predicate); |
} |
|
if(s == null) return; |
|
|
s.remove(object); |
|
|
observer.triggerObs(subject, predicate, object); |
|
|
} |
|
129 |
|
|
130 |
public void add(Object subject, Object predicate, Object object) { |
public Iterator findN_11X_Iter(Object e0,Object e1,Obs obs) { |
131 |
get_HHS(true, spo, subject, predicate).add(object); |
if(obs != null) observer.addObs(e0, e1, observer.WILDCARD, obs); |
132 |
observer.triggerObs(subject, predicate, object); |
|
133 |
} |
HashMap hash1 = (HashMap) ind_012.get(e0); |
134 |
|
if(hash1 == null) return emptySet.iterator(); |
135 |
|
|
136 |
|
HashSet hash2 = (HashSet) hash1.get(e1); |
137 |
|
if(hash2 == null) return emptySet.iterator(); |
138 |
|
|
139 |
|
HashSet resSet = hash2; |
140 |
|
return resSet.iterator(); |
141 |
|
} |
142 |
|
|
143 |
|
public Iterator findN_1X1_Iter(Object e0,Object e2,Obs obs) { |
144 |
|
if(obs != null) observer.addObs(e0, observer.WILDCARD, e2, obs); |
145 |
|
|
146 |
|
HashMap hash1 = (HashMap) ind_021.get(e0); |
147 |
|
if(hash1 == null) return emptySet.iterator(); |
148 |
|
|
149 |
|
HashSet hash2 = (HashSet) hash1.get(e2); |
150 |
|
if(hash2 == null) return emptySet.iterator(); |
151 |
|
|
152 |
|
HashSet resSet = hash2; |
153 |
|
return resSet.iterator(); |
154 |
|
} |
155 |
|
|
156 |
|
public Iterator findN_X11_Iter(Object e1,Object e2,Obs obs) { |
157 |
|
if(obs != null) observer.addObs(observer.WILDCARD, e1, e2, obs); |
158 |
|
|
159 |
|
HashMap hash1 = (HashMap) ind_120.get(e1); |
160 |
|
if(hash1 == null) return emptySet.iterator(); |
161 |
|
|
162 |
|
HashSet hash2 = (HashSet) hash1.get(e2); |
163 |
|
if(hash2 == null) return emptySet.iterator(); |
164 |
|
|
165 |
|
HashSet resSet = hash2; |
166 |
|
return resSet.iterator(); |
167 |
} |
} |
168 |
|
|
169 |
|
public Iterator findN_1XA_Iter(Object e0,Obs obs) { |
170 |
|
if(obs != null) observer.addObs(e0, observer.WILDCARD, observer.WILDCARD, obs); |
171 |
|
|
172 |
|
HashMap hash1 = (HashMap) ind_012.get(e0); |
173 |
|
if(hash1 == null) return emptySet.iterator(); |
174 |
|
|
175 |
|
Set resSet = hash1.keySet(); |
176 |
|
return resSet.iterator(); |
177 |
|
} |
178 |
|
|
179 |
|
public Iterator findN_XAA_Iter(Obs obs) { |
180 |
|
if(obs != null) observer.addObs(observer.WILDCARD, observer.WILDCARD, observer.WILDCARD, obs); |
181 |
|
|
182 |
|
Set resSet = ind_012.keySet(); |
183 |
|
return resSet.iterator(); |
184 |
|
} |
185 |
|
|
186 |
|
|
187 |
|
|
188 |
|
|
189 |
|
// -------------------------------- |
190 |
|
// Methods which modify the structure by calling the single-triple |
191 |
|
// methods below. |
192 |
|
// |
193 |
|
|
194 |
|
|
195 |
|
// -------------------------------- |
196 |
|
// Methods which actually modify the structure |
197 |
|
// |
198 |
|
|
199 |
|
public void rm_111(Object e0, Object e1, Object e2) { |
200 |
|
|
201 |
|
rm_ind(ind_012, e0, e1, e2); |
202 |
|
|
203 |
|
rm_ind(ind_021, e0, e2, e1); |
204 |
|
|
205 |
|
rm_ind(ind_120, e1, e2, e0); |
206 |
|
|
207 |
|
|
208 |
|
observer.triggerObs(e0, e1, e2); |
209 |
|
} |
210 |
|
|
211 |
|
public void add(Object e0, Object e1, Object e2) { |
212 |
|
|
213 |
|
add_ind(ind_012, e0, e1, e2); |
214 |
|
|
215 |
|
add_ind(ind_021, e0, e2, e1); |
216 |
|
|
217 |
|
add_ind(ind_120, e1, e2, e0); |
218 |
|
|
219 |
|
|
220 |
|
observer.triggerObs(e0, e1, e2); |
221 |
|
} |
222 |
|
|
223 |
|
} |
224 |
|
|
225 |
|
|
226 |
|
|
227 |
|
|
228 |
|
|