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.


Reply via email to