src/share/classes/javax/imageio/spi/PartiallyOrderedSet.java
Print this page
rev 9345 : 8035487: Fix raw and unchecked lint warnings in javax.imageio.spi
Reviewed-by:
*** 49,69 ****
* service provider registry situation, an application might allow the
* user to set a preference order for service provider objects
* supplied by a trusted vendor over those supplied by another.
*
*/
! class PartiallyOrderedSet extends AbstractSet {
// The topological sort (roughly) follows the algorithm described in
// Horowitz and Sahni, _Fundamentals of Data Structures_ (1976),
// p. 315.
// Maps Objects to DigraphNodes that contain them
! private Map poNodes = new HashMap();
// The set of Objects
! private Set nodes = poNodes.keySet();
/**
* Constructs a <code>PartiallyOrderedSet</code>.
*/
public PartiallyOrderedSet() {}
--- 49,69 ----
* service provider registry situation, an application might allow the
* user to set a preference order for service provider objects
* supplied by a trusted vendor over those supplied by another.
*
*/
! class PartiallyOrderedSet<E> extends AbstractSet<E> {
// The topological sort (roughly) follows the algorithm described in
// Horowitz and Sahni, _Fundamentals of Data Structures_ (1976),
// p. 315.
// Maps Objects to DigraphNodes that contain them
! private Map<E, DigraphNode<E>> poNodes = new HashMap<>();
// The set of Objects
! private Set<E> nodes = poNodes.keySet();
/**
* Constructs a <code>PartiallyOrderedSet</code>.
*/
public PartiallyOrderedSet() {}
*** 79,112 ****
/**
* Returns an iterator over the elements contained in this
* collection, with an ordering that respects the orderings set
* by the <code>setOrdering</code> method.
*/
! public Iterator iterator() {
! return new PartialOrderIterator(poNodes.values().iterator());
}
/**
* Adds an <code>Object</code> to this
* <code>PartiallyOrderedSet</code>.
*/
! public boolean add(Object o) {
if (nodes.contains(o)) {
return false;
}
! DigraphNode node = new DigraphNode(o);
poNodes.put(o, node);
return true;
}
/**
* Removes an <code>Object</code> from this
* <code>PartiallyOrderedSet</code>.
*/
public boolean remove(Object o) {
! DigraphNode node = (DigraphNode)poNodes.get(o);
if (node == null) {
return false;
}
poNodes.remove(o);
--- 79,112 ----
/**
* Returns an iterator over the elements contained in this
* collection, with an ordering that respects the orderings set
* by the <code>setOrdering</code> method.
*/
! public Iterator<E> iterator() {
! return new PartialOrderIterator<>(poNodes.values().iterator());
}
/**
* Adds an <code>Object</code> to this
* <code>PartiallyOrderedSet</code>.
*/
! public boolean add(E o) {
if (nodes.contains(o)) {
return false;
}
! DigraphNode<E> node = new DigraphNode<>(o);
poNodes.put(o, node);
return true;
}
/**
* Removes an <code>Object</code> from this
* <code>PartiallyOrderedSet</code>.
*/
public boolean remove(Object o) {
! DigraphNode<E> node = poNodes.get(o);
if (node == null) {
return false;
}
poNodes.remove(o);
*** 125,182 ****
* between the nodes in the opposite order, it is removed.
*
* @return <code>true</code> if no prior ordering existed
* between the nodes, <code>false</code>otherwise.
*/
! public boolean setOrdering(Object first, Object second) {
! DigraphNode firstPONode =
! (DigraphNode)poNodes.get(first);
! DigraphNode secondPONode =
! (DigraphNode)poNodes.get(second);
secondPONode.removeEdge(firstPONode);
return firstPONode.addEdge(secondPONode);
}
/**
* Removes any ordering between two nodes.
*
* @return true if a prior prefence existed between the nodes.
*/
! public boolean unsetOrdering(Object first, Object second) {
! DigraphNode firstPONode =
! (DigraphNode)poNodes.get(first);
! DigraphNode secondPONode =
! (DigraphNode)poNodes.get(second);
return firstPONode.removeEdge(secondPONode) ||
secondPONode.removeEdge(firstPONode);
}
/**
* Returns <code>true</code> if an ordering exists between two
* nodes.
*/
! public boolean hasOrdering(Object preferred, Object other) {
! DigraphNode preferredPONode =
! (DigraphNode)poNodes.get(preferred);
! DigraphNode otherPONode =
! (DigraphNode)poNodes.get(other);
return preferredPONode.hasEdge(otherPONode);
}
}
! class PartialOrderIterator implements Iterator {
! LinkedList zeroList = new LinkedList();
! Map inDegrees = new HashMap(); // DigraphNode -> Integer
! public PartialOrderIterator(Iterator iter) {
// Initialize scratch in-degree values, zero list
while (iter.hasNext()) {
! DigraphNode node = (DigraphNode)iter.next();
int inDegree = node.getInDegree();
inDegrees.put(node, new Integer(inDegree));
// Add nodes with zero in-degree to the zero list
if (inDegree == 0) {
--- 125,176 ----
* between the nodes in the opposite order, it is removed.
*
* @return <code>true</code> if no prior ordering existed
* between the nodes, <code>false</code>otherwise.
*/
! public boolean setOrdering(E first, E second) {
! DigraphNode<E> firstPONode = poNodes.get(first);
! DigraphNode<E> secondPONode = poNodes.get(second);
secondPONode.removeEdge(firstPONode);
return firstPONode.addEdge(secondPONode);
}
/**
* Removes any ordering between two nodes.
*
* @return true if a prior prefence existed between the nodes.
*/
! public boolean unsetOrdering(E first, E second) {
! DigraphNode<E> firstPONode = poNodes.get(first);
! DigraphNode<E> secondPONode = poNodes.get(second);
return firstPONode.removeEdge(secondPONode) ||
secondPONode.removeEdge(firstPONode);
}
/**
* Returns <code>true</code> if an ordering exists between two
* nodes.
*/
! public boolean hasOrdering(E preferred, E other) {
! DigraphNode<E> preferredPONode = poNodes.get(preferred);
! DigraphNode<E> otherPONode = poNodes.get(other);
return preferredPONode.hasEdge(otherPONode);
}
}
! class PartialOrderIterator<E> implements Iterator<E> {
! LinkedList<DigraphNode<E>> zeroList = new LinkedList<>();
! Map<DigraphNode<E>, Integer> inDegrees = new HashMap<>();
! public PartialOrderIterator(Iterator<DigraphNode<E>> iter) {
// Initialize scratch in-degree values, zero list
while (iter.hasNext()) {
! DigraphNode<E> node = iter.next();
int inDegree = node.getInDegree();
inDegrees.put(node, new Integer(inDegree));
// Add nodes with zero in-degree to the zero list
if (inDegree == 0) {
*** 187,204 ****
public boolean hasNext() {
return !zeroList.isEmpty();
}
! public Object next() {
! DigraphNode first = (DigraphNode)zeroList.removeFirst();
// For each out node of the output node, decrement its in-degree
! Iterator outNodes = first.getOutNodes();
while (outNodes.hasNext()) {
! DigraphNode node = (DigraphNode)outNodes.next();
! int inDegree = ((Integer)inDegrees.get(node)).intValue() - 1;
inDegrees.put(node, new Integer(inDegree));
// If the in-degree has fallen to 0, place the node on the list
if (inDegree == 0) {
zeroList.add(node);
--- 181,198 ----
public boolean hasNext() {
return !zeroList.isEmpty();
}
! public E next() {
! DigraphNode<E> first = zeroList.removeFirst();
// For each out node of the output node, decrement its in-degree
! Iterator<DigraphNode<E>> outNodes = first.getOutNodes();
while (outNodes.hasNext()) {
! DigraphNode<E> node = outNodes.next();
! int inDegree = inDegrees.get(node).intValue() - 1;
inDegrees.put(node, new Integer(inDegree));
// If the in-degree has fallen to 0, place the node on the list
if (inDegree == 0) {
zeroList.add(node);