Author: mes
Date: 2009-12-11 12:31:54 -0800 (Fri, 11 Dec 2009)
New Revision: 18744
Modified:
corelibs/trunk/graph.dynamic/src/cytoscape/graph/dynamic/util/DynamicGraphRepresentation.java
corelibs/trunk/graph.dynamic/tests/cytoscape/graph/dynamic/GraphTest.java
Log:
refactored graph impl to be a bit clearer
Modified:
corelibs/trunk/graph.dynamic/src/cytoscape/graph/dynamic/util/DynamicGraphRepresentation.java
===================================================================
---
corelibs/trunk/graph.dynamic/src/cytoscape/graph/dynamic/util/DynamicGraphRepresentation.java
2009-12-11 20:12:00 UTC (rev 18743)
+++
corelibs/trunk/graph.dynamic/src/cytoscape/graph/dynamic/util/DynamicGraphRepresentation.java
2009-12-11 20:31:54 UTC (rev 18744)
@@ -82,25 +82,29 @@
* @return DOCUMENT ME!
*/
public final IntEnumerator nodes() {
- final int nodeCount = m_nodeCount;
- final Node firstNode = m_firstNode;
+ return new NodesEnumerator(m_nodeCount, m_firstNode);
+ }
- return new IntEnumerator() {
- private int numRemaining = nodeCount;
- private Node node = firstNode;
+ private class NodesEnumerator implements IntEnumerator {
+ private int numRemaining;
+ private Node node;
- public final int numRemaining() {
- return numRemaining;
- }
+ NodesEnumerator(final int nodeCount, final Node firstNode) {
+ numRemaining = nodeCount;
+ node = firstNode;
+ }
- public final int nextInt() {
- final int returnThis = node.nodeId;
- node = node.nextNode;
- numRemaining--;
+ public final int numRemaining() {
+ return numRemaining;
+ }
- return returnThis;
- }
- };
+ public final int nextInt() {
+ final int returnThis = node.nodeId;
+ node = node.nextNode;
+ numRemaining--;
+
+ return returnThis;
+ }
}
/**
@@ -109,38 +113,43 @@
* @return DOCUMENT ME!
*/
public final IntEnumerator edges() {
- final int edgeCount = m_edgeCount;
- final Node firstNode = m_firstNode;
+ return new EdgesEnumerator(m_edgeCount,m_firstNode);
+ }
- return new IntEnumerator() {
- private int numRemaining = edgeCount;
- private Node node = firstNode;
- private Edge edge = null;
+ private class EdgesEnumerator implements IntEnumerator {
- public final int numRemaining() {
- return numRemaining;
- }
+ private int numRemaining;
+ private Node node;
+ private Edge edge;
- public final int nextInt() {
- final int returnThis;
+ EdgesEnumerator(final int edgeCount, final Node firstNode) {
+ numRemaining = edgeCount;
+ node = firstNode;
+ }
- if (edge != null) {
- returnThis = edge.edgeId;
- } else {
- for (edge = node.firstOutEdge;
edge == null;
- node = node.nextNode, edge
= node.firstOutEdge) {
- }
+ public final int numRemaining() {
+ return numRemaining;
+ }
- node = node.nextNode;
- returnThis = edge.edgeId;
- }
+ public final int nextInt() {
+ final int returnThis;
- edge = edge.nextOutEdge;
- numRemaining--;
+ if (edge != null) {
+ returnThis = edge.edgeId;
+ } else {
+ for (edge = node.firstOutEdge; edge == null;
+ node = node.nextNode, edge =
node.firstOutEdge) {
+ }
- return returnThis;
- }
- };
+ node = node.nextNode;
+ returnThis = edge.edgeId;
+ }
+
+ edge = edge.nextOutEdge;
+ numRemaining--;
+
+ return returnThis;
+ }
}
/**
@@ -497,57 +506,70 @@
tentativeEdgeCount -= n.selfEdges;
}
- final int edgeCount = tentativeEdgeCount;
+ return new
EdgesAdjacentEnumerator(tentativeEdgeCount,edgeLists,undirected,incoming,outgoing
);
+ }
- return new IntEnumerator() {
- private int numRemaining = edgeCount;
- private int edgeListIndex = -1;
- private Edge edge = null;
+ private class EdgesAdjacentEnumerator implements IntEnumerator {
- public final int numRemaining() {
- return numRemaining;
- }
+ private int numRemaining;
+ private int edgeListIndex = -1;
+ private Edge edge = null;
+ private final Edge[] edgeLists;
+ private final boolean undirected;
+ private final boolean incoming;
+ private final boolean outgoing;
- public final int nextInt() {
- while (edge == null)
- edge =
edgeLists[++edgeListIndex];
+ EdgesAdjacentEnumerator(final int edgeCount,final Edge[]
edgeLists, final boolean undirected, final boolean incoming, final boolean
outgoing ) {
+ this.numRemaining = edgeCount;
+ this.edgeLists = edgeLists;
+ this.undirected = undirected;
+ this.incoming = incoming;
+ this.outgoing = outgoing;
+ }
- int returnThis = -1;
+ public final int numRemaining() {
+ return numRemaining;
+ }
- if (edgeListIndex == 0) {
- while ((edge != null)
- && !((outgoing &&
edge.directed) || (undirected && !edge.directed))) {
- edge = edge.nextOutEdge;
+ public final int nextInt() {
+ while (edge == null)
+ edge = edgeLists[++edgeListIndex];
- if (edge == null) {
- edge =
edgeLists[++edgeListIndex];
+ int returnThis = -1;
- break;
- }
- }
+ if (edgeListIndex == 0) {
+ while ((edge != null)
+ && !((outgoing && edge.directed) ||
(undirected && !edge.directed))) {
+ edge = edge.nextOutEdge;
- if ((edge != null) &&
(edgeListIndex == 0)) {
- returnThis =
edge.edgeId;
- edge = edge.nextOutEdge;
- }
+ if (edge == null) {
+ edge =
edgeLists[++edgeListIndex];
+
+ break;
}
+ }
- if (edgeListIndex == 1) {
- while (((edge.sourceNode ==
edge.targetNode)
- && ((outgoing &&
edge.directed) || (undirected && !edge.directed)))
- || !((incoming &&
edge.directed) || (undirected && !edge.directed))) {
- edge = edge.nextInEdge;
- }
+ if ((edge != null) && (edgeListIndex == 0)) {
+ returnThis = edge.edgeId;
+ edge = edge.nextOutEdge;
+ }
+ }
- returnThis = edge.edgeId;
- edge = edge.nextInEdge;
- }
+ if (edgeListIndex == 1) {
+ while (((edge.sourceNode == edge.targetNode)
+ && ((outgoing && edge.directed) ||
(undirected && !edge.directed)))
+ || !((incoming && edge.directed) ||
(undirected && !edge.directed))) {
+ edge = edge.nextInEdge;
+ }
- numRemaining--;
+ returnThis = edge.edgeId;
+ edge = edge.nextInEdge;
+ }
- return returnThis;
- }
- };
+ numRemaining--;
+
+ return returnThis;
+ }
}
/**
@@ -571,7 +593,6 @@
return null;
}
- final DynamicGraph graph = this;
final IntEnumerator theAdj;
final int nodeZero;
final int nodeOne;
@@ -586,46 +607,60 @@
nodeOne = node0;
}
- return new IntIterator() {
- private int nextEdge = -1;
+ return new ConnectingEdgesIterator(theAdj, nodeZero, nodeOne,
this);
+ }
- private void ensureComputeNext() {
- if (nextEdge != -1) {
- return;
- }
+ private class ConnectingEdgesIterator implements IntIterator {
+ private int nextEdge = -1;
+ private final IntEnumerator theAdj;
+ private final int nodeZero;
+ private final int nodeOne;
+ private final DynamicGraph graph;
- while (theAdj.numRemaining() > 0) {
- final int edge =
theAdj.nextInt();
+ ConnectingEdgesIterator(final IntEnumerator theAdj, final int
nodeZero,
+ final int nodeOne, final DynamicGraph
graph) {
+ this.theAdj = theAdj;
+ this.nodeZero = nodeZero;
+ this.nodeOne = nodeOne;
+ this.graph = graph;
+ }
- if (nodeOne == (nodeZero ^
graph.edgeSource(edge) ^ graph.edgeTarget(edge))) {
- nextEdge = edge;
+ private void ensureComputeNext() {
+ if (nextEdge != -1) {
+ return;
+ }
- return;
- }
- }
+ while (theAdj.numRemaining() > 0) {
+ final int edge = theAdj.nextInt();
- nextEdge = -2;
+ if (nodeOne == (nodeZero ^
graph.edgeSource(edge) ^ graph.edgeTarget(edge))) {
+ nextEdge = edge;
+
+ return;
}
+ }
- public final boolean hasNext() {
- ensureComputeNext();
+ nextEdge = -2;
+ }
- if (nextEdge < 0) {
- return false;
- } else {
- return true;
- }
- }
+ public final boolean hasNext() {
+ ensureComputeNext();
- public final int nextInt() {
- ensureComputeNext();
+ if (nextEdge < 0) {
+ return false;
+ } else {
+ return true;
+ }
+ }
- final int returnThis = nextEdge;
- nextEdge = -1;
+ public final int nextInt() {
+ ensureComputeNext();
- return returnThis;
- }
- };
+ final int returnThis = nextEdge;
+ nextEdge = -1;
+
+ return returnThis;
+ }
}
// Externalizable methods.
Modified:
corelibs/trunk/graph.dynamic/tests/cytoscape/graph/dynamic/GraphTest.java
===================================================================
--- corelibs/trunk/graph.dynamic/tests/cytoscape/graph/dynamic/GraphTest.java
2009-12-11 20:12:00 UTC (rev 18743)
+++ corelibs/trunk/graph.dynamic/tests/cytoscape/graph/dynamic/GraphTest.java
2009-12-11 20:31:54 UTC (rev 18744)
@@ -47,23 +47,25 @@
public void testGraph() {
final DynamicGraph graph =
DynamicGraphFactory.instantiateDynamicGraph();
- System.out.println("Creating 10 nodes...");
+ //System.out.println("Creating 10 nodes...");
+ long begin = System.nanoTime();
for (int i = 0; i < 10; i++)
graph.nodeCreate();
+
IntEnumerator nodesEnum = graph.nodes();
int index = -1;
int[] nodes = new int[nodesEnum.numRemaining()];
- System.out.print("Here are the nodes: ");
+ //System.out.print("Here are the nodes: ");
while (nodesEnum.numRemaining() > 0) {
nodes[++index] = nodesEnum.nextInt();
- System.out.print(nodes[index] + " ");
+ //System.out.print(nodes[index] + " ");
}
- System.out.println();
- System.out.println();
+ //System.out.println();
+ //System.out.println();
boolean[] edgesDir = new boolean[] {
false, true, true, true, false, true,
false, false, true, true,
@@ -88,135 +90,135 @@
};
for (int i = 0; i < edgesDir.length; i++) {
- System.out.println("Creating " + (edgesDir[i] ?
"directed" : "undirected")
- + " edge from node " +
nodes[edgesDef[i][0]] + " to node "
- + nodes[edgesDef[i][1]] + "...");
+ //System.out.println("Creating " + (edgesDir[i] ?
"directed" : "undirected")
+ // + " edge from node " +
nodes[edgesDef[i][0]] + " to node "
+ // + nodes[edgesDef[i][1]] + "...");
graph.edgeCreate(nodes[edgesDef[i][0]],
nodes[edgesDef[i][1]], edgesDir[i]);
}
IntEnumerator edgesEnum = graph.edges();
- System.out.println();
- System.out.println("Here are the edges:");
+ //System.out.println();
+ //System.out.println("Here are the edges:");
while (edgesEnum.numRemaining() > 0) {
final int edge = edgesEnum.nextInt();
- System.out.println(((graph.edgeType(edge) ==
DynamicGraph.DIRECTED_EDGE) ? "Directed"
-
: "Undirected")
- + " edge " + edge + " with source "
+ graph.edgeSource(edge)
- + " and target " +
graph.edgeTarget(edge) + ".");
+ //System.out.println(((graph.edgeType(edge) ==
DynamicGraph.DIRECTED_EDGE) ? "Directed"
+ //
: "Undirected")
+ // + " edge " + edge + " with source
" + graph.edgeSource(edge)
+ // + " and target " +
graph.edgeTarget(edge) + ".");
}
- System.out.println();
- System.out.println("All adjacent edges...");
+ //System.out.println();
+ //System.out.println("All adjacent edges...");
nodesEnum = graph.nodes();
while (nodesEnum.numRemaining() > 0) {
final int node = nodesEnum.nextInt();
IntEnumerator adjEdges = graph.edgesAdjacent(node,
true, true, true);
- System.out.print("For node " + node + ": ");
+ //System.out.print("For node " + node + ": ");
while (adjEdges.numRemaining() > 0) {
final int edge = adjEdges.nextInt();
- System.out.print(edge + " ");
+ //System.out.print(edge + " ");
}
- System.out.println();
+ //System.out.println();
}
- System.out.println();
- System.out.println("All undirected adjacent edges...");
+ //System.out.println();
+ //System.out.println("All undirected adjacent edges...");
nodesEnum = graph.nodes();
while (nodesEnum.numRemaining() > 0) {
final int node = nodesEnum.nextInt();
IntEnumerator adjEdges = graph.edgesAdjacent(node,
false, false, true);
- System.out.print("For node " + node + ": ");
+ //System.out.print("For node " + node + ": ");
while (adjEdges.numRemaining() > 0) {
final int edge = adjEdges.nextInt();
- System.out.print(edge + " ");
+ //System.out.print(edge + " ");
}
- System.out.println();
+ //System.out.println();
}
- System.out.println();
- System.out.println("All undirected and incoming adjacent
edges...");
+ //System.out.println();
+ //System.out.println("All undirected and incoming adjacent
edges...");
nodesEnum = graph.nodes();
while (nodesEnum.numRemaining() > 0) {
final int node = nodesEnum.nextInt();
IntEnumerator adjEdges = graph.edgesAdjacent(node,
false, true, true);
- System.out.print("For node " + node + ": ");
+ //System.out.print("For node " + node + ": ");
while (adjEdges.numRemaining() > 0) {
final int edge = adjEdges.nextInt();
- System.out.print(edge + " ");
+ //System.out.print(edge + " ");
}
- System.out.println();
+ //System.out.println();
}
- System.out.println();
- System.out.println("All outgoing adjacent edges...");
+ //System.out.println();
+ //System.out.println("All outgoing adjacent edges...");
nodesEnum = graph.nodes();
while (nodesEnum.numRemaining() > 0) {
final int node = nodesEnum.nextInt();
IntEnumerator adjEdges = graph.edgesAdjacent(node,
true, false, false);
- System.out.print("For node " + node + ": ");
+ //System.out.print("For node " + node + ": ");
while (adjEdges.numRemaining() > 0) {
final int edge = adjEdges.nextInt();
- System.out.print(edge + " ");
+ //System.out.print(edge + " ");
}
- System.out.println();
+ //System.out.println();
}
- System.out.println();
- System.out.println("All outgoing and incoming adjacent
edges...");
+ //System.out.println();
+ //System.out.println("All outgoing and incoming adjacent
edges...");
nodesEnum = graph.nodes();
while (nodesEnum.numRemaining() > 0) {
final int node = nodesEnum.nextInt();
IntEnumerator adjEdges = graph.edgesAdjacent(node,
true, true, false);
- System.out.print("For node " + node + ": ");
+ //System.out.print("For node " + node + ": ");
while (adjEdges.numRemaining() > 0) {
final int edge = adjEdges.nextInt();
- System.out.print(edge + " ");
+ //System.out.print(edge + " ");
}
- System.out.println();
+ //System.out.println();
}
- System.out.println();
+ //System.out.println();
for (int i = 0; i < nodes.length; i++)
if ((i % 3) == 0) {
- System.out.println("Removing node " + nodes[i]
+ "...");
+ //System.out.println("Removing node " +
nodes[i] + "...");
graph.nodeRemove(nodes[i]);
}
- System.out.println();
- System.out.println("All adjacent edges...");
+ //System.out.println();
+ //System.out.println("All adjacent edges...");
nodesEnum = graph.nodes();
while (nodesEnum.numRemaining() > 0) {
final int node = nodesEnum.nextInt();
IntEnumerator adjEdges = graph.edgesAdjacent(node,
true, true, true);
- System.out.print("For node " + node + ": ");
+ //System.out.print("For node " + node + ": ");
while (adjEdges.numRemaining() > 0) {
final int edge = adjEdges.nextInt();
- System.out.print(edge + " ");
+ //System.out.print(edge + " ");
}
- System.out.println();
+ //System.out.println();
}
- System.out.println();
+ //System.out.println();
nodesEnum = graph.nodes();
while (nodesEnum.numRemaining() > 0) {
@@ -226,14 +228,16 @@
while (nodesEnum2.numRemaining() > 0) {
final int node1 = nodesEnum2.nextInt();
IntIterator connectingEdges =
graph.edgesConnecting(node0, node1, true, true, true);
- System.out.print("All edges connecting node " +
node0 + " with node " + node1
- + ": ");
+ //System.out.print("All edges connecting node "
+ node0 + " with node " + node1
+ // + ": ");
- while (connectingEdges.hasNext())
-
System.out.print(connectingEdges.nextInt() + " ");
+ //while (connectingEdges.hasNext())
+
//System.out.print(connectingEdges.nextInt() + " ");
- System.out.println();
+ //System.out.println();
}
}
+ long end = System.nanoTime();
+ System.out.println("duration: " + (end - begin));
}
}
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.