[Top][All Lists]
[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
+