/[fenfire]/fenfire/org/fenfire/swamp/impl/HashGraph.java
ViewVC logotype

Diff of /fenfire/org/fenfire/swamp/impl/HashGraph.java

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

revision 1.2 by tjl, Sat Apr 12 06:32:02 2003 UTC revision 1.3 by tjl, Sat Apr 12 10:39:12 2003 UTC
# Line 1  Line 1 
1  // (c) Tuomas J. Lukka  // (c) Tuomas J. Lukka
2    
3  package org.fenfire.swamp.impl;  package org.fenfire.swamp.impl;
4    import org.fenfire.Obs;
5  import org.fenfire.swamp.*;  import org.fenfire.swamp.*;
6    
7  import java.util.HashMap;  import java.util.HashMap;
# Line 12  import java.util.Iterator; Line 13  import java.util.Iterator;
13   * Relatively inefficient but a basic implementation   * Relatively inefficient but a basic implementation
14   * that can be used as a reference.   * that can be used as a reference.
15   */   */
16  public class HashGraph implements Graph {  public class HashGraph extends StdObservableGraph {
17    
18      /** Map: key = subject, value = (Map: key=predicate, value =      /** Map: key = subject, value = (Map: key=predicate, value =
19       * (Set: r/l)).       * (Set: r/l)).
20       */       */
21      private HashMap spo = new HashMap();      private HashMap spo = new HashMap();
22    
23    
24      private HashSet emptySet = new HashSet();      private HashSet emptySet = new HashSet();
25    
26        private StdObserver observer = new StdObserver();
27    
28      private HashSet get_HHS(boolean create, HashMap m,      private HashSet get_HHS(boolean create, HashMap m,
29                      Object o1, Object o2) {                      Object o1, Object o2) {
30          HashMap m2 = (HashMap)m.get(o1);          HashMap m2 = (HashMap)m.get(o1);
# Line 43  public class HashGraph implements Graph Line 48  public class HashGraph implements Graph
48          return s;          return s;
49      }      }
50    
51      public Object find1_11X(Object subject, Object predicate) {      public Object find1_11X(Object subject, Object predicate, Obs obs) {
52            observer.addObs(subject, predicate, observer.WILDCARD, obs);
53          HashSet s = get_HHS(false, spo, subject, predicate);          HashSet s = get_HHS(false, spo, subject, predicate);
54          if(s == null) return null;          if(s == null) return null;
55          int size = s.size();          int size = s.size();
# Line 52  public class HashGraph implements Graph Line 58  public class HashGraph implements Graph
58          // urgh...          // urgh...
59          return s.iterator().next();          return s.iterator().next();
60      }      }
61      public Iterator findN_11X_Iter(Object subject, Object predicate) {  
62    
63        public Iterator findN_11X_Iter(Object subject, Object predicate, Obs obs) {
64            observer.addObs(subject, predicate, observer.WILDCARD, obs);
65          HashSet s = get_HHS(false, spo, subject, predicate);          HashSet s = get_HHS(false, spo, subject, predicate);
66          if(s == null)          if(s == null)
67              return emptySet.iterator();              return emptySet.iterator();
# Line 60  public class HashGraph implements Graph Line 69  public class HashGraph implements Graph
69          return s.iterator();          return s.iterator();
70      }      }
71    
72    
73    
74        // --------------------------------
75        // Methods which modify the structure by calling the single-triple
76        // methods below.
77        //
78    
79    
80      public void set1_11X(Object subject, Object predicate, Object object) {      public void set1_11X(Object subject, Object predicate, Object object) {
81          rm_11X(subject, predicate);          rm_11X(subject, predicate);
82    
# Line 74  public class HashGraph implements Graph Line 91  public class HashGraph implements Graph
91              rm_111(subject, predicate, i.next());              rm_111(subject, predicate, i.next());
92      }      }
93    
94    
95        // --------------------------------
96        // Methods which actually modify the structure
97        //
98    
99      public void rm_111(Object subject, Object predicate, Object object) {      public void rm_111(Object subject, Object predicate, Object object) {
100          HashSet s = get_HHS(false, spo, subject, predicate);          HashSet s = get_HHS(false, spo, subject, predicate);
101          if(s == null) return;          if(s == null) return;
102          s.remove(object);          s.remove(object);
103            observer.triggerObs(subject, predicate, object);
104      }      }
105    
106      public void add(Object subject, Object predicate, Object object) {      public void add(Object subject, Object predicate, Object object) {
107          get_HHS(true, spo, subject, predicate).add(object);          get_HHS(true, spo, subject, predicate).add(object);
108            observer.triggerObs(subject, predicate, object);
109      }      }
110    
111  }  }

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

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