public Object next() { int stamp; Object vertex; do { vertex = dfs.next(); stamp = dfs.getStamp(); } while (stamp != DepthFirstStampSearch.SHRINK_STAMP && stamp != DepthFirstStampSearch.LEAF_STAMP); return vertex; }
public Map traverse(Map orders) { int preOrder = 0; int postOrder = 0; while (hasNext()) { Object vertex = next(); int stamp = getStamp(); if (stamp == SHRINK_STAMP) { postOrder++; OrderPair pair = (OrderPair)orders.get(vertex); if (pair == null) { preOrder++; orders.put(vertex, new OrderPair(preOrder, postOrder)); } else pair.postOrder = postOrder; } else if (stamp == LEAF_STAMP) { preOrder++; postOrder++; orders.put(vertex, new OrderPair(preOrder, postOrder)); } else if (!orders.containsKey(vertex)) { preOrder++; orders.put(vertex, new OrderPair(preOrder, -1)); } } return orders; }
private boolean runDirectDFS() { dfsStack.clear(); reverseDFSFilter.seenVertices.clear(); Object root = nextDFSRoot(); if (root == null) return false; if (directDfs == null) directDfs = new DepthFirstStampSearch(filteredDigraph, root); else directDfs.reset(root); int stamp; Object vertex; while (directDfs.hasNext()) { vertex = directDfs.next(); stamp = directDfs.getStamp(); if (stamp == DepthFirstStampSearch.SHRINK_STAMP || stamp == DepthFirstStampSearch.LEAF_STAMP) { //if (seen.add(vertex)) { dfsStack.push(vertex); reverseDFSFilter.seenVertices.add(vertex); //} } } seen.addAll(dfsStack); return true; }
while (sizeTraversal.hasNext()) { Object vertex = sizeTraversal.next(); int stamp = sizeTraversal.getStamp(); if (stamp == DepthFirstStampSearch.LEAF_STAMP) { RectangularShape leafShape = (RectangularShape)vertexShape.get(vertex); while (vertexLocationTraversal.hasNext()) { Object vertex = vertexLocationTraversal.next(); int stamp = vertexLocationTraversal.getStamp(); if (stamp == DepthFirstStampSearch.LEAF_STAMP) { RectangularShape leafShape = (RectangularShape)vertexShape.get(vertex);