--- jsr166/src/main/java/util/ArrayDeque.java 2016/10/29 21:10:34 1.97 +++ jsr166/src/main/java/util/ArrayDeque.java 2016/10/29 22:47:55 1.98 @@ -731,6 +731,7 @@ public class ArrayDeque extends Abstr } public void forEachRemaining(Consumer action) { + Objects.requireNonNull(action); final int k; if ((k = remaining) > 0) { remaining = 0; @@ -761,10 +762,18 @@ public class ArrayDeque extends Abstr } public final void forEachRemaining(Consumer action) { + Objects.requireNonNull(action); final int k; if ((k = remaining) > 0) { remaining = 0; - forEachRemainingDescending(action, elements, cursor, k); + final Object[] elements = ArrayDeque.this.elements; + int i, end, to, todo; + todo = (to = ((end = (i = cursor) - k) >= -1) ? end : -1) - end; + for (;; to = (i = elements.length - 1) - todo, todo = 0) { + for (; i > to; i--) + action.accept(nonNullElementAt(elements, i)); + if (todo == 0) break; + } if ((lastRet = cursor - (k - 1)) < 0) lastRet += elements.length; } @@ -824,6 +833,7 @@ public class ArrayDeque extends Abstr } public void forEachRemaining(Consumer action) { + Objects.requireNonNull(action); final int k = remaining(); // side effect! remaining = 0; ArrayDeque.forEachRemaining(action, elements, cursor, k); @@ -875,7 +885,6 @@ public class ArrayDeque extends Abstr */ static void forEachRemaining( Consumer action, Object[] es, int i, int remaining) { - Objects.requireNonNull(action); final int capacity = es.length; int end, to, todo; todo = (end = i + remaining) @@ -885,19 +894,6 @@ public class ArrayDeque extends Abstr action.accept(nonNullElementAt(es, i)); if (todo == 0) break; } - } - - static void forEachRemainingDescending( - Consumer action, Object[] es, int i, int remaining) { - Objects.requireNonNull(action); - final int capacity = es.length; - int end, to, todo; - todo = (to = ((end = i - remaining) >= -1) ? end : -1) - end; - for (;; to = (i = capacity - 1) - todo, todo = 0) { - for (; i > to; i--) - action.accept(nonNullElementAt(es, i)); - if (todo == 0) break; - } } /**