[cvs] / jsr166 / src / main / java / util / PriorityQueue.java Repository:
ViewVC logotype

Diff of /jsr166/src/main/java/util/PriorityQueue.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.112, Tue Nov 29 18:11:28 2016 UTC revision 1.113, Wed Nov 30 03:31:47 2016 UTC
# Line 813  Line 813 
813       * @since 1.8       * @since 1.8
814       */       */
815      public final Spliterator<E> spliterator() {      public final Spliterator<E> spliterator() {
816          return new PriorityQueueSpliterator<>(this, 0, -1, 0);          return new PriorityQueueSpliterator(0, -1, 0);
817      }      }
818    
819      static final class PriorityQueueSpliterator<E> implements Spliterator<E> {      final class PriorityQueueSpliterator implements Spliterator<E> {
820          /*          /*
821           * This is very similar to ArrayList Spliterator, except for           * This is very similar to ArrayList Spliterator, except for
822           * extra null checks.           * extra null checks.
823           */           */
         private final PriorityQueue<E> pq;  
824          private int index;            // current index, modified on advance/split          private int index;            // current index, modified on advance/split
825          private int fence;            // -1 until first use          private int fence;            // -1 until first use
826          private int expectedModCount; // initialized when fence set          private int expectedModCount; // initialized when fence set
827    
828          /** Creates new spliterator covering the given range. */          /** Creates new spliterator covering the given range. */
829          PriorityQueueSpliterator(PriorityQueue<E> pq, int origin, int fence,          PriorityQueueSpliterator(int origin, int fence, int expectedModCount) {
                                  int expectedModCount) {  
             this.pq = pq;  
830              this.index = origin;              this.index = origin;
831              this.fence = fence;              this.fence = fence;
832              this.expectedModCount = expectedModCount;              this.expectedModCount = expectedModCount;
# Line 838  Line 835 
835          private int getFence() { // initialize fence to size on first use          private int getFence() { // initialize fence to size on first use
836              int hi;              int hi;
837              if ((hi = fence) < 0) {              if ((hi = fence) < 0) {
838                  expectedModCount = pq.modCount;                  expectedModCount = modCount;
839                  hi = fence = pq.size;                  hi = fence = size;
840              }              }
841              return hi;              return hi;
842          }          }
843    
844          public PriorityQueueSpliterator<E> trySplit() {          public PriorityQueueSpliterator trySplit() {
845              int hi = getFence(), lo = index, mid = (lo + hi) >>> 1;              int hi = getFence(), lo = index, mid = (lo + hi) >>> 1;
846              return (lo >= mid) ? null :              return (lo >= mid) ? null :
847                  new PriorityQueueSpliterator<>(pq, lo, index = mid,                  new PriorityQueueSpliterator(lo, index = mid, expectedModCount);
                                                expectedModCount);  
848          }          }
849    
850          @SuppressWarnings("unchecked")          @SuppressWarnings("unchecked")
851          public void forEachRemaining(Consumer<? super E> action) {          public void forEachRemaining(Consumer<? super E> action) {
852              int i, hi, mc; // hoist accesses and checks from loop              int i, hi, mc; // hoist accesses and checks from loop
853              PriorityQueue<E> q; Object[] a;              final Object[] a;
854              if (action == null)              if (action == null)
855                  throw new NullPointerException();                  throw new NullPointerException();
856              if ((q = pq) != null && (a = q.queue) != null) {              if ((a = queue) != null) {
857                  if ((hi = fence) < 0) {                  if ((hi = fence) < 0) {
858                      mc = q.modCount;                      mc = modCount;
859                      hi = q.size;                      hi = size;
860                  }                  }
861                  else                  else
862                      mc = expectedModCount;                      mc = expectedModCount;
# Line 871  Line 867 
867                                  break;                                  break;
868                              action.accept(e);                              action.accept(e);
869                          }                          }
870                          else if (q.modCount != mc)                          else if (modCount != mc)
871                              break;                              break;
872                          else                          else
873                              return;                              return;
# Line 887  Line 883 
883              int hi = getFence(), lo = index;              int hi = getFence(), lo = index;
884              if (lo >= 0 && lo < hi) {              if (lo >= 0 && lo < hi) {
885                  index = lo + 1;                  index = lo + 1;
886                  @SuppressWarnings("unchecked") E e = (E)pq.queue[lo];                  @SuppressWarnings("unchecked") E e = (E)queue[lo];
887                  if (e == null)                  if (e == null)
888                      throw new ConcurrentModificationException();                      throw new ConcurrentModificationException();
889                  action.accept(e);                  action.accept(e);
890                  if (pq.modCount != expectedModCount)                  if (modCount != expectedModCount)
891                      throw new ConcurrentModificationException();                      throw new ConcurrentModificationException();
892                  return true;                  return true;
893              }              }
# Line 899  Line 895 
895          }          }
896    
897          public long estimateSize() {          public long estimateSize() {
898              return (long) (getFence() - index);              return getFence() - index;
899          }          }
900    
901          public int characteristics() {          public int characteristics() {

Legend:
Removed from v.1.112  
changed lines
  Added in v.1.113

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8