153 * nodes. 154 */ 155 public boolean hasOrdering(E preferred, E other) { 156 DigraphNode<E> preferredPONode = poNodes.get(preferred); 157 DigraphNode<E> otherPONode = poNodes.get(other); 158 159 return preferredPONode.hasEdge(otherPONode); 160 } 161 } 162 163 class PartialOrderIterator<E> implements Iterator<E> { 164 165 LinkedList<DigraphNode<E>> zeroList = new LinkedList<>(); 166 Map<DigraphNode<E>, Integer> inDegrees = new HashMap<>(); 167 168 public PartialOrderIterator(Iterator<DigraphNode<E>> iter) { 169 // Initialize scratch in-degree values, zero list 170 while (iter.hasNext()) { 171 DigraphNode<E> node = iter.next(); 172 int inDegree = node.getInDegree(); 173 inDegrees.put(node, new Integer(inDegree)); 174 175 // Add nodes with zero in-degree to the zero list 176 if (inDegree == 0) { 177 zeroList.add(node); 178 } 179 } 180 } 181 182 public boolean hasNext() { 183 return !zeroList.isEmpty(); 184 } 185 186 public E next() { 187 DigraphNode<E> first = zeroList.removeFirst(); 188 189 // For each out node of the output node, decrement its in-degree 190 Iterator<DigraphNode<E>> outNodes = first.getOutNodes(); 191 while (outNodes.hasNext()) { 192 DigraphNode<E> node = outNodes.next(); 193 int inDegree = inDegrees.get(node).intValue() - 1; 194 inDegrees.put(node, new Integer(inDegree)); 195 196 // If the in-degree has fallen to 0, place the node on the list 197 if (inDegree == 0) { 198 zeroList.add(node); 199 } 200 } 201 202 return first.getData(); 203 } 204 205 public void remove() { 206 throw new UnsupportedOperationException(); 207 } 208 } | 153 * nodes. 154 */ 155 public boolean hasOrdering(E preferred, E other) { 156 DigraphNode<E> preferredPONode = poNodes.get(preferred); 157 DigraphNode<E> otherPONode = poNodes.get(other); 158 159 return preferredPONode.hasEdge(otherPONode); 160 } 161 } 162 163 class PartialOrderIterator<E> implements Iterator<E> { 164 165 LinkedList<DigraphNode<E>> zeroList = new LinkedList<>(); 166 Map<DigraphNode<E>, Integer> inDegrees = new HashMap<>(); 167 168 public PartialOrderIterator(Iterator<DigraphNode<E>> iter) { 169 // Initialize scratch in-degree values, zero list 170 while (iter.hasNext()) { 171 DigraphNode<E> node = iter.next(); 172 int inDegree = node.getInDegree(); 173 inDegrees.put(node, inDegree); 174 175 // Add nodes with zero in-degree to the zero list 176 if (inDegree == 0) { 177 zeroList.add(node); 178 } 179 } 180 } 181 182 public boolean hasNext() { 183 return !zeroList.isEmpty(); 184 } 185 186 public E next() { 187 DigraphNode<E> first = zeroList.removeFirst(); 188 189 // For each out node of the output node, decrement its in-degree 190 Iterator<DigraphNode<E>> outNodes = first.getOutNodes(); 191 while (outNodes.hasNext()) { 192 DigraphNode<E> node = outNodes.next(); 193 int inDegree = inDegrees.get(node).intValue() - 1; 194 inDegrees.put(node, inDegree); 195 196 // If the in-degree has fallen to 0, place the node on the list 197 if (inDegree == 0) { 198 zeroList.add(node); 199 } 200 } 201 202 return first.getData(); 203 } 204 205 public void remove() { 206 throw new UnsupportedOperationException(); 207 } 208 } |