/[fenfire]/fenfire/org/fenfire/swamp/makeswamp.py
ViewVC logotype

Diff of /fenfire/org/fenfire/swamp/makeswamp.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by tjl, Mon Apr 14 04:45:04 2003 UTC revision 1.2 by tjl, Mon Apr 14 10:25:37 2003 UTC
# Line 17  for n in (1,"N"): Line 17  for n in (1,"N"):
17  graph = []  graph = []
18    
19  for pattern in (  for pattern in (
20          "111",          "111",  # Only these three removes at first...
21          "11A", "1A1", "A11",          "11A",
22          "1AA", "A1A", "AA1"):          "1AA",
23            ):
24      graph.append({      graph.append({
25          "Type": "rm",          "Type": "rm",
26          "Pattern": pattern})          "Pattern": pattern})
# Line 135  package org.fenfire.swamp; Line 136  package org.fenfire.swamp;
136  public interface Graph extends ConstGraph {  public interface Graph extends ConstGraph {
137      Graph getObservedGraph(org.fenfire.Obs o);      Graph getObservedGraph(org.fenfire.Obs o);
138      void close();      void close();
139        void set1_11X(Object subject, Object predicate, Object object);
140    
141      %(nonobs_modprotos)s      %(nonobs_modprotos)s
142    
# Line 202  public class StdObservedGraph extends St Line 204  public class StdObservedGraph extends St
204          this.graph = graph;          this.graph = graph;
205          this.obs = obs;          this.obs = obs;
206      }      }
207        void set1_11X(Object subject, Object predicate, Object object) {
208            graph.set1_11X(subject, predicate, object);
209        }
210    
211      %(graph_callother)s      %(graph_callother)s
212  }  }
# Line 225  def makeHashGraph(): Line 230  def makeHashGraph():
230            
231      def makeFind(g):      def makeFind(g):
232          code = ""          code = ""
233            code += proto(g, 1) + "{\n";
234            def ow(i, wild):
235                if g["Pattern"][i] == "1": return "e"+str(i)
236                else: return wild
237    
238            code += "if(obs != null) observer.addObs(%s, %s, %s, obs);\n" % tuple(
239                [ow(i, "observer.WILDCARD") for i in range(0,3)])
240    
241            notUniqueParams = ",".join([ow(i, "null") for i in range(0,3)])
242    
243            indsNeeded = [i for i in range(0,3) if g["Pattern"][i] == "1"]
244            indNext = [i for i in range(0,3) if g["Pattern"][i] == "X"][0]
245    
246            print g, indsNeeded, indNext
247    
248            success = None
249    
250            # Select the index to use
251            for i in range(0,len(hashIndices)):
252                if len(indsNeeded):
253                    firstinds = hashIndices[i][0:len(indsNeeded)]
254                    if not min([el in firstinds for el in indsNeeded]) :
255                        print "Can't be ", hashNames[i], indsNeeded, firstinds
256                        continue
257                if hashIndices[i][len(indsNeeded)] != indNext:
258                    print "Can't be (because of next set) ",hashNames[i], hashIndices[i], indNext
259                    continue
260    
261                print "Is: ",hashNames[i]
262                success = i
263                break
264    
265            assert success != None
266            ind = i
267                
268            curHash = hashNames[ind]
269            for i in range(0,3):
270                elem = hashIndices[ind][i]
271                newHash = "hash"+str(i+1)
272                p = g["Pattern"][elem]
273                if p == "1":
274                    if i == 1:
275                        htype = "HashSet"
276                    else:
277                        htype = "HashMap"
278                    code += """
279                        %(htype)s %(newHash)s = (%(htype)s) %(curHash)s.get(e%(elem)s);
280                        if(%(newHash)s == null) RETURN_NONE
281                    """ % locals()
282                    curHash = newHash
283                elif p == "X":
284                    if i < 2:
285                        code += """
286                            HashSet resSet = %(curHash)s.keySet();
287                        """ % locals()
288                    else:
289                        code += """
290                            HashSet resSet = %(curHash)s;
291                        """ % locals()
292                    break
293                elif p == "A":
294                    assert 1 == 0
295    
296            if g["NVal"] == "N":
297                code += "return resSet.iterator();\n"
298                code = code.replace("RETURN_NONE", "return emptySet.iterator(); ")
299            else:
300                code += """
301                    if(resSet.size() == 0) return null;
302                    if(resSet.size() == 1) return resSet().iterator().next();
303                    throw new NotUniqueError(%(notUniqueParams)s);
304                """ % locals()
305                code = code.replace("RETURN_NONE", "return null; ")
306    
307    
308    
309            code += "}\n\n"
310          return code          return code
311    
312      finds = "".join([makeFind(g) for g in constgraph])      finds = "".join([makeFind(g) for g in constgraph])
313    
314        rm_triple = ""
315        add_triple = ""
316        for ind in range(0, len(hashIndices)):
317            name = hashNames[ind]
318            s0 = hashIndices[ind][0]
319            s1 = hashIndices[ind][1]
320            s2 = hashIndices[ind][2]
321            rm_triple += """
322                rm_ind(%(name)s, e%(s0)s, e%(s1)s, e%(s2)s);
323            """ % locals()
324            add_triple += """
325                add_ind(%(name)s, e%(s0)s, e%(s1)s, e%(s2)s);
326            """ % locals()
327    
328      mkFile("org/fenfire/swamp/impl/HashGraph.nava", """      mkFile("org/fenfire/swamp/impl/HashGraph.nava", """
329      package org.fenfire.swamp.impl;      package org.fenfire.swamp.impl;
330      import org.fenfire.Obs;      import org.fenfire.Obs;
# Line 250  def makeHashGraph(): Line 346  def makeHashGraph():
346          private HashSet emptySet = new HashSet();          private HashSet emptySet = new HashSet();
347          private StdObserver observer = new StdObserver();          private StdObserver observer = new StdObserver();
348    
349          private HashSet get_HHS(boolean create, HashMap m,          private final void rm_ind(HashMap ind, Object o1, Object o2, Object o3) {
350                          Object o1, Object o2) {              HashMap m2 = (HashMap)ind.get(o1);
351              HashMap m2 = (HashMap)m.get(o1);              if(m2 == null) return;
352                HashSet m3 = (HashMap)m2.get(o2);
353                if(m3 == null) return;
354                m3.remove(o3);
355            }
356    
357            private final void add_ind(HashMap ind, Object o1, Object o2, Object o3) {
358                HashMap m2 = (HashMap)ind.get(o1);
359              if(m2 == null) {              if(m2 == null) {
360                  if(create) {                  if(create) {
361                      m2 = new HashMap();                      m2 = new HashMap();
# Line 270  def makeHashGraph(): Line 373  def makeHashGraph():
373                      return null;                      return null;
374                  }                  }
375              }              }
376              return s;              s.add(o3);
377          }          }
378    
379          //////////////////          public void set1_11X(Object subject, Object predicate, Object object) {
380          // Finds              rm_11X(subject, predicate);
   
         %(finds)s  
381    
382          public Object find1_11X(Object subject, Object predicate, Obs obs) {              add(subject, predicate, object);
             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();  
383          }          }
384    
385    
386          public Iterator findN_11X_Iter(Object subject, Object predicate, Obs obs) {          //////////////////
387              observer.addObs(subject, predicate, observer.WILDCARD, obs);          // Finds
             HashSet s = get_HHS(false, spo, subject, predicate);  
             if(s == null)  
                 return emptySet.iterator();  
             int size = s.size();  
             return s.iterator();  
         }  
388    
389            %(finds)s
390    
391    
392          // --------------------------------          // --------------------------------
# Line 307  def makeHashGraph(): Line 395  def makeHashGraph():
395          //          //
396    
397    
         public void set1_11X(Object subject, Object predicate, Object object) {  
             rm_11X(subject, predicate);  
   
             add(subject, predicate, object);  
         }  
   
398          public void rm_11X(Object subject, Object predicate) {          public void rm_11X(Object subject, Object predicate) {
399              HashSet s = get_HHS(false, spo, subject, predicate);              HashSet s = get_HHS(false, spo, subject, predicate);
400              if(s == null) return;              if(s == null) return;
# Line 326  def makeHashGraph(): Line 408  def makeHashGraph():
408          // Methods which actually modify the structure          // Methods which actually modify the structure
409          //          //
410    
411          public void rm_111(Object subject, Object predicate, Object object) {          public void rm_111(Object e0, Object e1, Object e2) {
412              HashSet s = get_HHS(false, spo, subject, predicate);              %(rm_triple)s
413              if(s == null) return;  
414              s.remove(object);              observer.triggerObs(e0, e1, e2);
             observer.triggerObs(subject, predicate, object);  
415          }          }
416    
417          public void add(Object subject, Object predicate, Object object) {          public void add(Object e0, Object e1, Object e2) {
418              get_HHS(true, spo, subject, predicate).add(object);              %(add_triple)s
419              observer.triggerObs(subject, predicate, object);  
420                observer.triggerObs(e0, e1, e2);
421          }          }
422    
423      }      }
# Line 343  def makeHashGraph(): Line 425  def makeHashGraph():
425    
426    
427    
428      """)      """ % locals())
429    
430  makeHashGraph()  makeHashGraph()

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26