gzz-commits
[Top][All Lists]
Advanced

[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()




reply via email to

[Prev in Thread] Current Thread [Next in Thread]