[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gzz-commits] fenfire/org/fenfire/swamp makeswamp.py
From: |
Tuomas J. Lukka |
Subject: |
[Gzz-commits] fenfire/org/fenfire/swamp makeswamp.py |
Date: |
Mon, 14 Apr 2003 06:25:37 -0400 |
CVSROOT: /cvsroot/fenfire
Module name: fenfire
Changes by: Tuomas J. Lukka <address@hidden> 03/04/14 06:25:37
Modified files:
org/fenfire/swamp: makeswamp.py
Log message:
Code generation almost there...
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/makeswamp.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
Patches:
Index: fenfire/org/fenfire/swamp/makeswamp.py
diff -u fenfire/org/fenfire/swamp/makeswamp.py:1.1
fenfire/org/fenfire/swamp/makeswamp.py:1.2
--- fenfire/org/fenfire/swamp/makeswamp.py:1.1 Mon Apr 14 00:45:04 2003
+++ fenfire/org/fenfire/swamp/makeswamp.py Mon Apr 14 06:25:37 2003
@@ -17,9 +17,10 @@
graph = []
for pattern in (
- "111",
- "11A", "1A1", "A11",
- "1AA", "A1A", "AA1"):
+ "111", # Only these three removes at first...
+ "11A",
+ "1AA",
+ ):
graph.append({
"Type": "rm",
"Pattern": pattern})
@@ -135,6 +136,7 @@
public interface Graph extends ConstGraph {
Graph getObservedGraph(org.fenfire.Obs o);
void close();
+ void set1_11X(Object subject, Object predicate, Object object);
%(nonobs_modprotos)s
@@ -202,6 +204,9 @@
this.graph = graph;
this.obs = obs;
}
+ void set1_11X(Object subject, Object predicate, Object object) {
+ graph.set1_11X(subject, predicate, object);
+ }
%(graph_callother)s
}
@@ -225,10 +230,101 @@
def makeFind(g):
code = ""
+ code += proto(g, 1) + "{\n";
+ def ow(i, wild):
+ if g["Pattern"][i] == "1": return "e"+str(i)
+ else: return wild
+
+ code += "if(obs != null) observer.addObs(%s, %s, %s, obs);\n" % tuple(
+ [ow(i, "observer.WILDCARD") for i in range(0,3)])
+
+ notUniqueParams = ",".join([ow(i, "null") for i in range(0,3)])
+
+ indsNeeded = [i for i in range(0,3) if g["Pattern"][i] == "1"]
+ indNext = [i for i in range(0,3) if g["Pattern"][i] == "X"][0]
+
+ print g, indsNeeded, indNext
+
+ success = None
+
+ # Select the index to use
+ for i in range(0,len(hashIndices)):
+ if len(indsNeeded):
+ firstinds = hashIndices[i][0:len(indsNeeded)]
+ if not min([el in firstinds for el in indsNeeded]) :
+ print "Can't be ", hashNames[i], indsNeeded, firstinds
+ continue
+ if hashIndices[i][len(indsNeeded)] != indNext:
+ print "Can't be (because of next set) ",hashNames[i],
hashIndices[i], indNext
+ continue
+
+ print "Is: ",hashNames[i]
+ success = i
+ break
+
+ assert success != None
+ ind = i
+
+ curHash = hashNames[ind]
+ for i in range(0,3):
+ elem = hashIndices[ind][i]
+ newHash = "hash"+str(i+1)
+ p = g["Pattern"][elem]
+ if p == "1":
+ if i == 1:
+ htype = "HashSet"
+ else:
+ htype = "HashMap"
+ code += """
+ %(htype)s %(newHash)s = (%(htype)s)
%(curHash)s.get(e%(elem)s);
+ if(%(newHash)s == null) RETURN_NONE
+ """ % locals()
+ curHash = newHash
+ elif p == "X":
+ if i < 2:
+ code += """
+ HashSet resSet = %(curHash)s.keySet();
+ """ % locals()
+ else:
+ code += """
+ HashSet resSet = %(curHash)s;
+ """ % locals()
+ break
+ elif p == "A":
+ assert 1 == 0
+
+ if g["NVal"] == "N":
+ code += "return resSet.iterator();\n"
+ code = code.replace("RETURN_NONE", "return emptySet.iterator(); ")
+ else:
+ code += """
+ if(resSet.size() == 0) return null;
+ if(resSet.size() == 1) return resSet().iterator().next();
+ throw new NotUniqueError(%(notUniqueParams)s);
+ """ % locals()
+ code = code.replace("RETURN_NONE", "return null; ")
+
+
+
+ code += "}\n\n"
return code
finds = "".join([makeFind(g) for g in constgraph])
+ rm_triple = ""
+ add_triple = ""
+ for ind in range(0, len(hashIndices)):
+ name = hashNames[ind]
+ s0 = hashIndices[ind][0]
+ s1 = hashIndices[ind][1]
+ s2 = hashIndices[ind][2]
+ rm_triple += """
+ rm_ind(%(name)s, e%(s0)s, e%(s1)s, e%(s2)s);
+ """ % locals()
+ add_triple += """
+ add_ind(%(name)s, e%(s0)s, e%(s1)s, e%(s2)s);
+ """ % locals()
+
mkFile("org/fenfire/swamp/impl/HashGraph.nava", """
package org.fenfire.swamp.impl;
import org.fenfire.Obs;
@@ -250,9 +346,16 @@
private HashSet emptySet = new HashSet();
private StdObserver observer = new StdObserver();
- private HashSet get_HHS(boolean create, HashMap m,
- Object o1, Object o2) {
- HashMap m2 = (HashMap)m.get(o1);
+ private final void rm_ind(HashMap ind, Object o1, Object o2, Object o3)
{
+ HashMap m2 = (HashMap)ind.get(o1);
+ if(m2 == null) return;
+ HashSet m3 = (HashMap)m2.get(o2);
+ if(m3 == null) return;
+ m3.remove(o3);
+ }
+
+ private final void add_ind(HashMap ind, Object o1, Object o2, Object
o3) {
+ HashMap m2 = (HashMap)ind.get(o1);
if(m2 == null) {
if(create) {
m2 = new HashMap();
@@ -270,35 +373,20 @@
return null;
}
}
- return s;
+ s.add(o3);
}
- //////////////////
- // Finds
-
- %(finds)s
+ public void set1_11X(Object subject, Object predicate, Object object) {
+ rm_11X(subject, predicate);
- public Object find1_11X(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 null;
- int size = s.size();
- if(size == 0) return null;
- if(size != 1) throw new NotUniqueError(subject, predicate, null);
- // urgh...
- return s.iterator().next();
+ add(subject, predicate, object);
}
- 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();
- }
+ //////////////////
+ // Finds
+ %(finds)s
// --------------------------------
@@ -307,12 +395,6 @@
//
- public void set1_11X(Object subject, Object predicate, Object object) {
- rm_11X(subject, predicate);
-
- add(subject, predicate, object);
- }
-
public void rm_11X(Object subject, Object predicate) {
HashSet s = get_HHS(false, spo, subject, predicate);
if(s == null) return;
@@ -326,16 +408,16 @@
// Methods which actually modify the structure
//
- public void rm_111(Object subject, Object predicate, Object object) {
- HashSet s = get_HHS(false, spo, subject, predicate);
- if(s == null) return;
- s.remove(object);
- observer.triggerObs(subject, predicate, object);
+ public void rm_111(Object e0, Object e1, Object e2) {
+ %(rm_triple)s
+
+ observer.triggerObs(e0, e1, e2);
}
- public void add(Object subject, Object predicate, Object object) {
- get_HHS(true, spo, subject, predicate).add(object);
- observer.triggerObs(subject, predicate, object);
+ public void add(Object e0, Object e1, Object e2) {
+ %(add_triple)s
+
+ observer.triggerObs(e0, e1, e2);
}
}
@@ -343,6 +425,6 @@
- """)
+ """ % locals())
makeHashGraph()