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

Diff of /jsr166/src/main/java/util/concurrent/LinkedTransferQueue.java

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

revision 1.114, Mon Dec 26 17:29:35 2016 UTC revision 1.115, Mon Dec 26 19:54:46 2016 UTC
# Line 985  Line 985 
985          LTQSpliterator() {}          LTQSpliterator() {}
986    
987          public Spliterator<E> trySplit() {          public Spliterator<E> trySplit() {
988              Node p;              Node p, q;
989              int b = batch;              if ((p = current()) == null || (q = p.next) == null)
990              int n = (b <= 0) ? 1 : (b >= MAX_BATCH) ? MAX_BATCH : b + 1;                  return null;
991              if (!exhausted &&              int i = 0, n = batch = Math.min(batch + 1, MAX_BATCH);
992                  ((p = current) != null || (p = firstDataNode()) != null) &&              Object[] a = null;
                 p.next != null) {  
                 Object[] a = new Object[n];  
                 int i = 0;  
993                  do {                  do {
994                      final Object item = p.item;                      final Object item = p.item;
995                      if (p.isData) {                      if (p.isData) {
996                          if (item != null)                          if (item != null)
997                              a[i++] = item;                          ((a != null) ? a : (a = new Object[n]))[i++] = item;
998                      }                  } else if (item == null) {
                     else if (item == null) {  
999                          p = null;                          p = null;
1000                          break;                          break;
1001                      }                      }
1002                      if (p == (p = p.next))                  if (p == (p = q)) p = firstDataNode();
1003                          p = head;              } while (p != null && (q = p.next) != null && i < n);
1004                  } while (p != null && i < n);              setCurrent(p);
1005                  if ((current = p) == null)              return (i == 0) ? null :
1006                      exhausted = true;                  Spliterators.spliterator(a, 0, i, (Spliterator.ORDERED |
                 if (i > 0) {  
                     batch = i;  
                     return Spliterators.spliterator  
                         (a, 0, i, (Spliterator.ORDERED |  
1007                                     Spliterator.NONNULL |                                     Spliterator.NONNULL |
1008                                     Spliterator.CONCURRENT));                                     Spliterator.CONCURRENT));
1009                  }                  }
             }  
             return null;  
         }  
1010    
1011          @SuppressWarnings("unchecked")          @SuppressWarnings("unchecked")
1012          public void forEachRemaining(Consumer<? super E> action) {          public void forEachRemaining(Consumer<? super E> action) {
1013              Objects.requireNonNull(action);              Objects.requireNonNull(action);
1014              Node p;              Node p;
1015              if (!exhausted &&              if ((p = current()) != null) {
                 ((p = current) != null || (p = head) != null)) {  
1016                  current = null;                  current = null;
1017                  exhausted = true;                  exhausted = true;
1018                  do {                  do {
# Line 1045  Line 1033 
1033          public boolean tryAdvance(Consumer<? super E> action) {          public boolean tryAdvance(Consumer<? super E> action) {
1034              Objects.requireNonNull(action);              Objects.requireNonNull(action);
1035              Node p;              Node p;
1036              if (!exhausted &&              if ((p = current()) != null) {
1037                  ((p = current) != null || (p = head) != null)) {                  E e = null;
                 Object item;  
1038                  do {                  do {
1039                      if (p.isData)                      final Object item = p.item;
1040                          item = p.item;                      final boolean isData = p.isData;
                     else {  
                         item = null;  
                         if (p.item == null) {  
                             p = null;  
                             break;  
                         }  
                     }  
1041                      if (p == (p = p.next))                      if (p == (p = p.next))
1042                          p = head;                          p = head;
1043                  } while (item == null && p != null);                      if (isData) {
                 if ((current = p) == null)  
                     exhausted = true;  
1044                  if (item != null) {                  if (item != null) {
1045                      action.accept((E)item);                              e = (E) item;
1046                                break;
1047                            }
1048                        }
1049                        else if (item == null)
1050                            p = null;
1051                    } while (p != null);
1052                    setCurrent(p);
1053                    if (e != null) {
1054                        action.accept(e);
1055                      return true;                      return true;
1056                  }                  }
1057              }              }
1058              return false;              return false;
1059          }          }
1060    
1061            private void setCurrent(Node p) {
1062                if ((current = p) == null)
1063                    exhausted = true;
1064            }
1065    
1066            private Node current() {
1067                Node p;
1068                if ((p = current) == null && !exhausted)
1069                    setCurrent(p = firstDataNode());
1070                return p;
1071            }
1072    
1073          public long estimateSize() { return Long.MAX_VALUE; }          public long estimateSize() { return Long.MAX_VALUE; }
1074    
1075          public int characteristics() {          public int characteristics() {

Legend:
Removed from v.1.114  
changed lines
  Added in v.1.115

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8