public void addNodes(Vector descriptors) { Enumeration descriptorsEnum = descriptors.elements(); while (descriptorsEnum.hasMoreElements()) { ClassDescriptor descriptor = (ClassDescriptor)descriptorsEnum.nextElement(); addNode(descriptor); } }
public void orderCommits() { depthFirstSearch(); Object[] nodeArray = new Object[nodes.size()]; nodes.copyInto(nodeArray); quicksort(nodeArray); Vector result = new Vector(nodes.size()); for (int i = 0; i < nodes.size(); i++) { CommitOrderDependencyNode node = (CommitOrderDependencyNode)nodeArray[i]; result.addElement(node.getDescriptor()); } this.orderedDescriptors = result; }
private static void quicksort(Object[] arr, int left, int right) { int i; int last; if (left >= right) {/* do nothing if array contains fewer than two */ return;/* two elements */ } swap(arr, left, (left + right) / 2); last = left; for (i = left + 1; i <= right; i++) { if (doCompare(arr[i], arr[left]) < 0) { swap(arr, ++last, i); } } swap(arr, left, last); quicksort(arr, left, last - 1); quicksort(arr, last + 1, right); }
CommitOrderCalculator calculator = new CommitOrderCalculator(getSession()); calculator.addNodes(descriptors); calculator.calculateMappingDependencies(); calculator.orderCommits(); descriptors = calculator.getOrderedDescriptors(); calculator = new CommitOrderCalculator(getSession()); calculator.addNodes(descriptors); calculator.calculateSpecifiedDependencies(); calculator.orderCommits(); setCommitOrder(calculator.getOrderedClasses());
public void depthFirstSearch() { /* * Traverse the entire graph in breadth-first order. When finished, every node will have a * predecessor which indicates the node that came efore it in the search * It will also have a discovery time (the value of the counter when we first saw it) and * finishingTime (the value of the counter after we've visited all the adjacent nodes). * See Cormen, Leiserson and Rivest, Section 23.3, page 477 for a full explanation of the algorithm */ //Setup for (Enumeration e = getNodes().elements(); e.hasMoreElements();) { CommitOrderDependencyNode node = (CommitOrderDependencyNode)e.nextElement(); node.markNotVisited(); node.setPredecessor(null); } currentTime = 0; //Execution for (Enumeration e = getNodes().elements(); e.hasMoreElements();) { CommitOrderDependencyNode node = (CommitOrderDependencyNode)e.nextElement(); if (node.hasNotBeenVisited()) { node.visit(); } } }
public void visit() { //Visit this node as part of a topological sort int startTime; markInProgress(); startTime = getOwner().getNextTime(); setDiscoveryTime(startTime); for (Enumeration e = getRelatedNodes().elements(); e.hasMoreElements();) { CommitOrderDependencyNode node = (CommitOrderDependencyNode)e.nextElement(); if (node.hasNotBeenVisited()) { node.setPredecessor(this); node.visit(); } if (node.getPredecessor() == null) { node.setPredecessor(this); } } markVisited(); setFinishingTime(getOwner().getNextTime()); }