gzz-commits
[Top][All Lists]
Advanced

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




reply via email to

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