[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gzz-commits] fenfire docs/pegboard/swamp_rdf_api--tjl/peg.rs...
From: |
Tuomas J. Lukka |
Subject: |
[Gzz-commits] fenfire docs/pegboard/swamp_rdf_api--tjl/peg.rs... |
Date: |
Sat, 12 Apr 2003 06:39:13 -0400 |
CVSROOT: /cvsroot/fenfire
Module name: fenfire
Changes by: Tuomas J. Lukka <address@hidden> 03/04/12 06:39:12
Modified files:
docs/pegboard/swamp_rdf_api--tjl: peg.rst
org/fenfire/swamp: ObservableGraph.java ObservedGraph.java
graphtest.py
org/fenfire/swamp/impl: HashGraph.java hashgraph.test
Added files:
org/fenfire/swamp: observablegraphtest.py
org/fenfire/swamp/impl: StdObservableGraph.java
StdObservedGraph.java StdObserver.java
stdobserver.test
org/fenfire/util: ObsDoubler.java
Log message:
Swamp observing
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/docs/pegboard/swamp_rdf_api--tjl/peg.rst.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/observablegraphtest.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/ObservableGraph.java.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/ObservedGraph.java.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/graphtest.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/impl/StdObservableGraph.java?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/impl/StdObservedGraph.java?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/impl/StdObserver.java?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/impl/stdobserver.test?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/impl/HashGraph.java.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/impl/hashgraph.test.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/util/ObsDoubler.java?rev=1.1
Patches:
Index: fenfire/docs/pegboard/swamp_rdf_api--tjl/peg.rst
diff -u fenfire/docs/pegboard/swamp_rdf_api--tjl/peg.rst:1.9
fenfire/docs/pegboard/swamp_rdf_api--tjl/peg.rst:1.10
--- fenfire/docs/pegboard/swamp_rdf_api--tjl/peg.rst:1.9 Sat Apr 12
02:32:02 2003
+++ fenfire/docs/pegboard/swamp_rdf_api--tjl/peg.rst Sat Apr 12 06:39:12 2003
@@ -3,8 +3,8 @@
=============================================================
:Author: Tuomas J. Lukka
-:Last-Modified: $Date: 2003/04/12 06:32:02 $
-:Revision: $Revision: 1.9 $
+:Last-Modified: $Date: 2003/04/12 10:39:12 $
+:Revision: $Revision: 1.10 $
:Status: Current, Partially preliminarily implemented (since in its own
package)
This document outlines the main issues in the Jena api
@@ -18,9 +18,8 @@
- Are there any APIs out there that already support our needs?
- Do we want implicit or explicit observers?
- Gzz used explicit observing, due
- to having an object per cell. However, the tradeoffs are different
- here.
+ Gzz used explicit observing, due to having an object per cell. However,
+ the tradeoffs are different here.
The benefits of implicit observing are ease and purity of the functional
approach: in the explicit approach, forgetting a single obs somewhere will
@@ -145,6 +144,14 @@
RESOLVED: Fenfires spring out of swamps ;)
+- Should we also allow a different kind of observation for making functional
+ programming efficient? Right now, for each function value you cache, you
+ need to create a new Object for the Obs.
+
+ RESOLVED: Not yet. We may, at some point, want to put in the functional
+ part right into swamp itself...
+
+
Problems with jena
==================
@@ -331,5 +338,11 @@
*/
public void close();
}
+
+The find methods with Obses are included in ObservableGraph because
+this allows the cheap default implementation of ObservedGraph.
+In an autogenerated implementation, ObservedGraph would also be generated
+for efficiency.
+
Index: fenfire/org/fenfire/swamp/ObservableGraph.java
diff -u fenfire/org/fenfire/swamp/ObservableGraph.java:1.2
fenfire/org/fenfire/swamp/ObservableGraph.java:1.3
--- fenfire/org/fenfire/swamp/ObservableGraph.java:1.2 Sat Apr 12 03:30:28 2003
+++ fenfire/org/fenfire/swamp/ObservableGraph.java Sat Apr 12 06:39:12 2003
@@ -2,8 +2,13 @@
package org.fenfire.swamp;
import org.fenfire.Obs;
+import java.util.Iterator;
public interface ObservableGraph extends Graph {
public ObservedGraph getObserved(Obs o);
+
+ Object find1_11X(Object subject, Object predicate, Obs o);
+
+ Iterator findN_11X_Iter(Object subject, Object predicate, Obs o);
}
Index: fenfire/org/fenfire/swamp/ObservedGraph.java
diff -u fenfire/org/fenfire/swamp/ObservedGraph.java:1.1
fenfire/org/fenfire/swamp/ObservedGraph.java:1.2
--- fenfire/org/fenfire/swamp/ObservedGraph.java:1.1 Sat Apr 12 02:32:02 2003
+++ fenfire/org/fenfire/swamp/ObservedGraph.java Sat Apr 12 06:39:12 2003
@@ -8,6 +8,6 @@
* if desired, may be recycled by the ObservableGraph.
* This operation is allowed to be a no-op.
*/
- public void close();
+ void close();
}
Index: fenfire/org/fenfire/swamp/graphtest.py
diff -u fenfire/org/fenfire/swamp/graphtest.py:1.1
fenfire/org/fenfire/swamp/graphtest.py:1.2
--- fenfire/org/fenfire/swamp/graphtest.py:1.1 Sat Apr 12 02:32:02 2003
+++ fenfire/org/fenfire/swamp/graphtest.py Sat Apr 12 06:39:12 2003
@@ -3,15 +3,16 @@
import org
from org.fenfire.swamp import Nodes
-uriMaker = org.fenfire.util.URN5Namespace()
-node = [Nodes.get(uriMaker.generateId()) for i in range(0,20)]
+_uriMaker = org.fenfire.util.URN5Namespace()
+_node = [Nodes.get(_uriMaker.generateId()) for i in range(0,20)]
def setUpGraphtest(thegraph):
global graph
graph = thegraph
-def testSingleTriple():
+def test_Graph_SingleTriple():
+ node = _node
# Check it isn't there
assert graph.find1_11X(node[0], node[1]) == None
Index: fenfire/org/fenfire/swamp/impl/HashGraph.java
diff -u fenfire/org/fenfire/swamp/impl/HashGraph.java:1.2
fenfire/org/fenfire/swamp/impl/HashGraph.java:1.3
--- fenfire/org/fenfire/swamp/impl/HashGraph.java:1.2 Sat Apr 12 02:32:02 2003
+++ fenfire/org/fenfire/swamp/impl/HashGraph.java Sat Apr 12 06:39:12 2003
@@ -1,6 +1,7 @@
// (c) Tuomas J. Lukka
package org.fenfire.swamp.impl;
+import org.fenfire.Obs;
import org.fenfire.swamp.*;
import java.util.HashMap;
@@ -12,14 +13,18 @@
* Relatively inefficient but a basic implementation
* that can be used as a reference.
*/
-public class HashGraph implements Graph {
+public class HashGraph extends StdObservableGraph {
+
/** Map: key = subject, value = (Map: key=predicate, value =
* (Set: r/l)).
*/
private HashMap spo = new HashMap();
+
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);
@@ -43,7 +48,8 @@
return s;
}
- public Object find1_11X(Object subject, Object 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();
@@ -52,7 +58,10 @@
// urgh...
return s.iterator().next();
}
- public Iterator findN_11X_Iter(Object subject, Object predicate) {
+
+
+ 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();
@@ -60,6 +69,14 @@
return s.iterator();
}
+
+
+ // --------------------------------
+ // Methods which modify the structure by calling the single-triple
+ // methods below.
+ //
+
+
public void set1_11X(Object subject, Object predicate, Object object) {
rm_11X(subject, predicate);
@@ -74,14 +91,21 @@
rm_111(subject, predicate, i.next());
}
+
+ // --------------------------------
+ // 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 add(Object subject, Object predicate, Object object) {
get_HHS(true, spo, subject, predicate).add(object);
+ observer.triggerObs(subject, predicate, object);
}
}
Index: fenfire/org/fenfire/swamp/impl/hashgraph.test
diff -u fenfire/org/fenfire/swamp/impl/hashgraph.test:1.1
fenfire/org/fenfire/swamp/impl/hashgraph.test:1.2
--- fenfire/org/fenfire/swamp/impl/hashgraph.test:1.1 Sat Apr 12 02:32:02 2003
+++ fenfire/org/fenfire/swamp/impl/hashgraph.test Sat Apr 12 06:39:12 2003
@@ -1,7 +1,10 @@
from org.fenfire import swamp
from org.fenfire.swamp.graphtest import *
+from org.fenfire.swamp.observablegraphtest import *
def setUp():
- setUpGraphtest(swamp.impl.HashGraph())
+ g = swamp.impl.HashGraph()
+ setUpGraphtest(g)
+ setUpObservableGraphTest(g)