1 public class DirectedEdgeGraph implements EdgeGraph {
3 public DirectedEdgeGraph() {
4 // nodes = Collections.synchronizedSet(new HashSet());
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;
15 public Edge_d createEdge(Node src, Node dest, Object e) {
16 return new GraphEdge((EdgeGraphNode) src, (EdgeGraphNode) dest, e);
19 public Node getDest(Edge_d e) {
20 return ((GraphEdge) e).getDest();
23 public Edge_d getEdge(Node src, Node dest) {
24 return ((EdgeGraphNode) src).getOutEdge((EdgeGraphNode) dest);
27 public Iterator getInEdges(Node n) {
28 return ((EdgeGraphNode) n).getInEdges();
31 public Iterator getOutEdges(Node n) {
32 return ((EdgeGraphNode) n).getOutEdges();
35 public Node getSource(Edge_d e) {
36 return ((GraphEdge) e).src;
39 public boolean hasEdge(Edge_d e) {
40 GraphEdge ge = (GraphEdge) e;
41 return ge.getSrc().hasOutNeighbor(ge.getDest());
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;
51 public boolean addNeighbor(Node src, Node dest) {
52 throw new UnsupportedOperationException(
53 "addNeighbor not supported in EdgeGraphs. Use createEdge/addEdge instead");
56 public Node createNode(Object n) {
57 return new EdgeGraphNode(n);
60 public Iterator getInNeighbors(Node src) {
61 return ((EdgeGraphNode) src).getInNeighbors();
64 public int getInNeighborsSize(Node node) {
65 return ((EdgeGraphNode) node).inEdges.size();
68 public Iterator getOutNeighbors(Node src) {
69 return ((EdgeGraphNode) src).getOutNeighbors();
72 public int getOutNeighborsSize(Node node) {
73 return ((EdgeGraphNode)node).outEdges.size();
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;
82 public Object getEdgeData(Edge_d e) {
83 return ((GraphEdge) e).d;
86 public Object setEdgeData(Edge_d e, Object d) {
87 GraphEdge ge = (GraphEdge) e;
93 public Iterator iterator() {
94 return nodes.iterator();
97 public boolean addNode(Node n) {
98 return nodes.add((EdgeGraphNode) n);
101 public boolean containsNode(Node n) {
102 return nodes.contains(n);
105 public Object getNodeData(Node n) {
106 EdgeGraphNode egn = (EdgeGraphNode) n;
110 public int getNumNodes() {
114 public Node getRandom() {
115 // return (Node)Sets.getAny(nodes);
116 return (Node) nodes.iterator().next();
119 public boolean hasNeighbor(Node src, Node dest) {
120 EdgeGraphNode esrc = (EdgeGraphNode) src;
121 EdgeGraphNode edest = (EdgeGraphNode) dest;
122 return esrc.hasOutNeighbor(edest);
125 public boolean removeNode(Node n) {
126 removeConnectingEdges((EdgeGraphNode) n);
127 return nodes.remove(n);
130 protected void removeConnectingEdges(EdgeGraphNode n) {
132 for (Iterator iterator1 = n.getOutNeighborsCopy(); iterator1.hasNext();) {
133 g = (EdgeGraphNode) iterator1.next();
134 removeNeighbor(n, g);
137 for (Iterator iterator2 = n.getInNeighborsCopy(); iterator2.hasNext(); ) {
138 g = (EdgeGraphNode) iterator2.next();
139 removeNeighbor(g, n);
144 public Object setNodeData(Node n, Object d) {
145 EdgeGraphNode egn = (EdgeGraphNode) n;
146 Object retval = egn.data;
151 public boolean isDirected() {