/** * Finds the first {@link GraphComponent} in a {@link Iterator} set * which has the specified visited state. * * @param i an Iterator of GraphComponents * @param visitedState the visited state to test * @return the first component found, or <code>null</code> if none found */ public static GraphComponent getComponentWithVisitedState(Iterator i, boolean visitedState) { while (i.hasNext()) { GraphComponent comp = (GraphComponent) i.next(); if (comp.isVisited() == visitedState) return comp; } return null; }
/** * Sets the Marked state for all {@link GraphComponent}s in an {@link Iterator} * * @param i the Iterator to scan * @param marked the state to set the Marked flag to */ public static void setMarked(Iterator i, boolean marked) { while (i.hasNext()) { GraphComponent comp = (GraphComponent) i.next(); comp.setMarked(marked); } }
/** * Sets the Visited state for all {@link GraphComponent}s in an {@link Iterator} * * @param i the Iterator to scan * @param visited the state to set the visited flag to */ public static void setVisited(Iterator i, boolean visited) { while (i.hasNext()) { GraphComponent comp = (GraphComponent) i.next(); comp.setVisited(visited); } }
public List getConnectedSubgraphs() { List subgraphs = new ArrayList(); GraphComponent.setVisited(graph.nodeIterator(), false); for (Iterator i = graph.edgeIterator(); i.hasNext(); ) { Edge e = (Edge) i.next(); Node node = e.getDirEdge(0).getFromNode(); if (! node.isVisited()) { subgraphs.add(findSubgraph(node)); } } return subgraphs; }
private void merge() { if (mergedLineStrings != null) { return; } // reset marks (this allows incremental processing) GraphComponent.setMarked(graph.nodeIterator(), false); GraphComponent.setMarked(graph.edgeIterator(), false); edgeStrings = new ArrayList(); buildEdgeStringsForObviousStartNodes(); buildEdgeStringsForIsolatedLoops(); mergedLineStrings = new ArrayList(); for (Iterator i = edgeStrings.iterator(); i.hasNext(); ) { EdgeString edgeString = (EdgeString) i.next(); mergedLineStrings.add(edgeString.toLineString()); } }
/** * Finds the first {@link GraphComponent} in a {@link Iterator} set * which has the specified visited state. * * @param i an Iterator of GraphComponents * @param visitedState the visited state to test * @return the first component found, or <code>null</code> if none found */ public static GraphComponent getComponentWithVisitedState(Iterator i, boolean visitedState) { while (i.hasNext()) { GraphComponent comp = (GraphComponent) i.next(); if (comp.isVisited() == visitedState) return comp; } return null; }
private List findSequence(Subgraph graph) { GraphComponent.setVisited(graph.edgeIterator(), false); Node startNode = findLowestDegreeNode(graph); DirectedEdge startDE = (DirectedEdge) startNode.getOutEdges().iterator().next(); DirectedEdge startDESym = startDE.getSym(); List seq = new LinkedList(); ListIterator lit = seq.listIterator(); addReverseSubpath(startDESym, lit, false); while (lit.hasPrevious()) { DirectedEdge prev = (DirectedEdge) lit.previous(); DirectedEdge unvisitedOutDE = findUnvisitedBestOrientedDE(prev.getFromNode()); if (unvisitedOutDE != null) addReverseSubpath(unvisitedOutDE.getSym(), lit, true); } /** * At this point, we have a valid sequence of graph DirectedEdges, but it * is not necessarily appropriately oriented relative to the underlying * geometry. */ List orientedSeq = orient(seq); return orientedSeq; }
/** * Sets the Marked state for all {@link GraphComponent}s in an {@link Iterator} * * @param i the Iterator to scan * @param marked the state to set the Marked flag to */ public static void setMarked(Iterator i, boolean marked) { while (i.hasNext()) { GraphComponent comp = (GraphComponent) i.next(); comp.setMarked(marked); } }
/** * Sets the Visited state for all {@link GraphComponent}s in an {@link Iterator} * * @param i the Iterator to scan * @param visited the state to set the visited flag to */ public static void setVisited(Iterator i, boolean visited) { while (i.hasNext()) { GraphComponent comp = (GraphComponent) i.next(); comp.setVisited(visited); } }
private void merge() { if (mergedLineStrings != null) { return; } // reset marks (this allows incremental processing) GraphComponent.setMarked(graph.nodeIterator(), false); GraphComponent.setMarked(graph.edgeIterator(), false); edgeStrings = new ArrayList(); buildEdgeStringsForObviousStartNodes(); buildEdgeStringsForIsolatedLoops(); mergedLineStrings = new ArrayList(); for (Iterator i = edgeStrings.iterator(); i.hasNext(); ) { EdgeString edgeString = (EdgeString) i.next(); mergedLineStrings.add(edgeString.toLineString()); } }
public List getConnectedSubgraphs() { List subgraphs = new ArrayList(); GraphComponent.setVisited(graph.nodeIterator(), false); for (Iterator i = graph.edgeIterator(); i.hasNext(); ) { Edge e = (Edge) i.next(); Node node = e.getDirEdge(0).getFromNode(); if (! node.isVisited()) { subgraphs.add(findSubgraph(node)); } } return subgraphs; }
private List findSequence(Subgraph graph) { GraphComponent.setVisited(graph.edgeIterator(), false); Node startNode = findLowestDegreeNode(graph); DirectedEdge startDE = (DirectedEdge) startNode.getOutEdges().iterator().next(); DirectedEdge startDESym = startDE.getSym(); List seq = new LinkedList(); ListIterator lit = seq.listIterator(); addReverseSubpath(startDESym, lit, false); while (lit.hasPrevious()) { DirectedEdge prev = (DirectedEdge) lit.previous(); DirectedEdge unvisitedOutDE = findUnvisitedBestOrientedDE(prev.getFromNode()); if (unvisitedOutDE != null) addReverseSubpath(unvisitedOutDE.getSym(), lit, true); } /** * At this point, we have a valid sequence of graph DirectedEdges, but it * is not necessarily appropriately oriented relative to the underlying * geometry. */ List orientedSeq = orient(seq); return orientedSeq; }