modified algorithm for dfj style parallelism
[IRC.git] / Robust / src / Benchmarks / oooJava / DelaunayRefinement / DirectedEdgeGraph.java
1 public class DirectedEdgeGraph implements EdgeGraph {
2
3   public DirectedEdgeGraph() {
4     // nodes = Collections.synchronizedSet(new HashSet());
5     // nodes = new HashSet();
6   }
7
8   public boolean addEdge(Edge_d e) {
9     GraphEdge ge = (GraphEdge) e;
10     EdgeGraphNode src = ge.getSrc();
11     EdgeGraphNode dest = ge.getDest();
12     return src.addOutEdge(dest, ge) ? dest.addInEdge(src, ge) : false;
13   }
14
15   public Edge_d createEdge(Node src, Node dest, Object e) {
16     return new GraphEdge((EdgeGraphNode) src, (EdgeGraphNode) dest, e);
17   }
18
19   public Node getDest(Edge_d e) {
20     return ((GraphEdge) e).getDest();
21   }
22
23   public Edge_d getEdge(Node src, Node dest) {
24     return ((EdgeGraphNode) src).getOutEdge((EdgeGraphNode) dest);
25   }
26
27   public Iterator getInEdges(Node n) {
28     return ((EdgeGraphNode) n).getInEdges();
29   }
30
31   public Iterator getOutEdges(Node n) {
32     return ((EdgeGraphNode) n).getOutEdges();
33   }
34
35   public Node getSource(Edge_d e) {
36     return ((GraphEdge) e).src;
37   }
38
39   public boolean hasEdge(Edge_d e) {
40     GraphEdge ge = (GraphEdge) e;
41     return ge.getSrc().hasOutNeighbor(ge.getDest());
42   }
43
44   public boolean removeEdge(Edge_d e) {
45     GraphEdge ge = (GraphEdge) e;
46     EdgeGraphNode src = ge.getSrc();
47     EdgeGraphNode dest = ge.getDest();
48     return src.removeOutEdge(dest) ? dest.removeInEdge(src) : false;
49   }
50
51   public boolean addNeighbor(Node src, Node dest) {
52     throw new UnsupportedOperationException(
53         "addNeighbor not supported in EdgeGraphs. Use createEdge/addEdge instead");
54   }
55
56   public Node createNode(Object n) {
57     return new EdgeGraphNode(n);
58   }
59
60   public Iterator getInNeighbors(Node src) {
61     return ((EdgeGraphNode) src).getInNeighbors();
62   }
63
64   public int getInNeighborsSize(Node node) {
65     return ((EdgeGraphNode) node).inEdges.size();
66   }
67
68   public Iterator getOutNeighbors(Node src) {
69     return ((EdgeGraphNode) src).getOutNeighbors();
70   }
71
72   public int getOutNeighborsSize(Node node) {
73     return ((EdgeGraphNode)node).outEdges.size();
74   }
75
76   public boolean removeNeighbor(Node src, Node dest) {
77     EdgeGraphNode gsrc = (EdgeGraphNode) src;
78     EdgeGraphNode gdest = (EdgeGraphNode) dest;
79     return gsrc.removeOutEdge(gdest) ? gdest.removeInEdge(gsrc) : false;
80   }
81
82   public Object getEdgeData(Edge_d e) {
83     return ((GraphEdge) e).d;
84   }
85
86   public Object setEdgeData(Edge_d e, Object d) {
87     GraphEdge ge = (GraphEdge) e;
88     Object retval = ge.d;
89     ge.d = d;
90     return retval;
91   }
92
93   //public Iterator iterator() {
94   //  return nodes.iterator();
95   //}
96
97   public boolean addNode(Node n) {
98     boolean notInAlready = !n.inGraph;
99     n.inGraph = true;
100     return notInAlready;
101   }
102
103   public boolean containsNode(Node n) {
104     return n.inGraph;
105   }
106
107   public Object getNodeData(Node n) {
108     EdgeGraphNode egn = (EdgeGraphNode) n;
109     return egn.data;
110   }
111
112   //public int getNumNodes() {
113   //  return nodes.size();
114   //}
115
116   //public Node getRandom() {
117   //  // return (Node)Sets.getAny(nodes);
118   //  return (Node) nodes.iterator().next();
119   //}
120
121   public boolean hasNeighbor(Node src, Node dest) {
122     EdgeGraphNode esrc = (EdgeGraphNode) src;
123     EdgeGraphNode edest = (EdgeGraphNode) dest;
124     return esrc.hasOutNeighbor(edest);
125   }
126
127   public boolean removeNode(Node n) {
128     boolean wasIn = n.inGraph;
129     removeConnectingEdges((EdgeGraphNode) n);
130     return wasIn;
131   }
132
133   protected void removeConnectingEdges(EdgeGraphNode n) {
134     EdgeGraphNode g;
135     for (Iterator iterator1 = n.getOutNeighborsCopy(); iterator1.hasNext();) {
136       g = (EdgeGraphNode) iterator1.next();
137       removeNeighbor(n, g);
138     }
139
140     for (Iterator iterator2 = n.getInNeighborsCopy(); iterator2.hasNext(); ) {
141       g = (EdgeGraphNode) iterator2.next();
142       removeNeighbor(g, n);
143     }
144
145   }
146
147   public Object setNodeData(Node n, Object d) {
148     EdgeGraphNode egn = (EdgeGraphNode) n;
149     Object retval = egn.data;
150     egn.data = d;
151     return retval;
152   }
153
154   public boolean isDirected() {
155     return true;
156   }
157 }