9bc02ff05e06d935e986ffd504431feb714df2aa
[IRC.git] / Robust / src / Benchmarks / oooJava / DelaunayRefinement / DirectedEdgeGraph.java
1 public class DirectedEdgeGraph implements EdgeGraph {
2   HashSet nodes;
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     return nodes.add((EdgeGraphNode) n);
99   }
100
101   public boolean containsNode(Node n) {
102     return nodes.contains(n);
103   }
104
105   public Object getNodeData(Node n) {
106     EdgeGraphNode egn = (EdgeGraphNode) n;
107     return egn.data;
108   }
109
110   public int getNumNodes() {
111     return nodes.size();
112   }
113
114   public Node getRandom() {
115     // return (Node)Sets.getAny(nodes);
116     return (Node) nodes.iterator().next();
117   }
118
119   public boolean hasNeighbor(Node src, Node dest) {
120     EdgeGraphNode esrc = (EdgeGraphNode) src;
121     EdgeGraphNode edest = (EdgeGraphNode) dest;
122     return esrc.hasOutNeighbor(edest);
123   }
124
125   public boolean removeNode(Node n) {
126     removeConnectingEdges((EdgeGraphNode) n);
127     return nodes.remove(n);
128   }
129
130   protected void removeConnectingEdges(EdgeGraphNode n) {
131     EdgeGraphNode g;
132     for (Iterator iterator1 = n.getOutNeighborsCopy(); iterator1.hasNext();) {
133       g = (EdgeGraphNode) iterator1.next();
134       removeNeighbor(n, g);
135     }
136
137     for (Iterator iterator2 = n.getInNeighborsCopy(); iterator2.hasNext(); ) {
138       g = (EdgeGraphNode) iterator2.next();
139       removeNeighbor(g, n);
140     }
141
142   }
143
144   public Object setNodeData(Node n, Object d) {
145     EdgeGraphNode egn = (EdgeGraphNode) n;
146     Object retval = egn.data;
147     egn.data = d;
148     return retval;
149   }
150
151   public boolean isDirected() {
152     return true;
153   }
154 }