gzz-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gzz-commits] fenfire/org/fenfire/swamp CachedNodeFunction.ja...


From: Tuomas J. Lukka
Subject: [Gzz-commits] fenfire/org/fenfire/swamp CachedNodeFunction.ja...
Date: Thu, 24 Apr 2003 09:06:48 -0400

CVSROOT:        /cvsroot/fenfire
Module name:    fenfire
Changes by:     Tuomas J. Lukka <address@hidden>        03/04/24 09:06:48

Modified files:
        org/fenfire/swamp: CachedNodeFunction.java 
                           observablegraphtest.py 

Log message:
        Recursive cached functions SEEM TO WORK

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/CachedNodeFunction.java.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/observablegraphtest.py.diff?tr1=1.3&tr2=1.4&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/swamp/CachedNodeFunction.java
diff -u fenfire/org/fenfire/swamp/CachedNodeFunction.java:1.2 
fenfire/org/fenfire/swamp/CachedNodeFunction.java:1.3
--- fenfire/org/fenfire/swamp/CachedNodeFunction.java:1.2       Thu Apr 24 
08:05:30 2003
+++ fenfire/org/fenfire/swamp/CachedNodeFunction.java   Thu Apr 24 09:06:48 2003
@@ -24,21 +24,17 @@
     private class CacheEntry implements Obs {
        Object node;
        Object value = DIRTY;
-       /*
        Set obses;
        public void addObs(Obs o) {
            if(obses == null) obses = new HashSet();
            obses.add(o);
        }
-       */
        public void chg() {
-           /*
            if(obses != null) {
                for(Iterator i = obses.iterator(); i.hasNext();) {
                    ((Obs)i.next()).chg();
                }
            }
-           */
            value = DIRTY;
        }
     }
@@ -50,8 +46,13 @@
     }
 
     public Object f(ConstGraph g, Object node) {
-       if(g != ourGraph)
-           throw new IllegalArgumentException("Called with wrong graph");
+       Obs o = null;
+       if(g != ourGraph) {
+           o = g.getObserver();
+           g = g.getOriginalConstGraph();
+           if(g != ourGraph)
+               throw new IllegalArgumentException("Called with wrong graph");
+       }
 
        CacheEntry cac = (CacheEntry)cache.get(node);
        if(cac == null) {
@@ -64,6 +65,8 @@
            cac.value = f.f(og, node);
            og.close();
        }
+       if(o != null)
+           cac.addObs(o);
        return cac.value;
     }
 
Index: fenfire/org/fenfire/swamp/observablegraphtest.py
diff -u fenfire/org/fenfire/swamp/observablegraphtest.py:1.3 
fenfire/org/fenfire/swamp/observablegraphtest.py:1.4
--- fenfire/org/fenfire/swamp/observablegraphtest.py:1.3        Thu Apr 24 
08:05:30 2003
+++ fenfire/org/fenfire/swamp/observablegraphtest.py    Thu Apr 24 09:06:48 2003
@@ -111,3 +111,33 @@
     doit(cf)
     assert of.calls < 16
 
+    of.calls = 0
+    cf = CachedNodeFunction(3, graph, of)
+
+    class Func2(NodeFunction):
+       def __init__(self, func):
+           self.func = func
+       def f(self, g, x):
+           self.calls += 1
+           t = self.func.f(g, x)
+           if t == None: return None
+           return "_"+t
+
+    of2 = Func2(cf)
+    of2.calls = 0
+    cf2 = CachedNodeFunction(3, graph, of2)
+
+    assert cf2.f(graph, node[1]) == None
+    assert of.calls == 1
+    assert of2.calls == 1
+    assert cf2.f(graph, node[1]) == None
+    assert of.calls == 1
+    assert of2.calls == 1
+    graph.set1_11X(node[1], node[0], Nodes.getStringLiteral("Z"))
+    assert cf2.f(graph, node[1]) == "_Z"
+    assert of.calls == 2
+    assert of2.calls == 2
+    assert cf2.f(graph, node[1]) == "_Z"
+    assert of.calls == 2
+    assert of2.calls == 2
+




reply via email to

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