[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.93, Sat Jun 13 22:33:38 2015 UTC revision 1.94, Wed Jun 17 02:21:25 2015 UTC
# Line 989  Line 989 
989      }      }
990    
991      /** A customized variant of Spliterators.IteratorSpliterator */      /** A customized variant of Spliterators.IteratorSpliterator */
992      static final class LTQSpliterator<E> implements Spliterator<E> {      final class LTQSpliterator<E> implements Spliterator<E> {
993          static final int MAX_BATCH = 1 << 25;  // max batch array size;          static final int MAX_BATCH = 1 << 25;  // max batch array size;
         final LinkedTransferQueue<E> queue;  
994          Node current;       // current node; null until initialized          Node current;       // current node; null until initialized
995          int batch;          // batch size for splits          int batch;          // batch size for splits
996          boolean exhausted;  // true when no more nodes          boolean exhausted;  // true when no more nodes
997          LTQSpliterator(LinkedTransferQueue<E> queue) {          LTQSpliterator() {}
             this.queue = queue;  
         }  
998    
999          public Spliterator<E> trySplit() {          public Spliterator<E> trySplit() {
1000              Node p;              Node p;
             final LinkedTransferQueue<E> q = this.queue;  
1001              int b = batch;              int b = batch;
1002              int n = (b <= 0) ? 1 : (b >= MAX_BATCH) ? MAX_BATCH : b + 1;              int n = (b <= 0) ? 1 : (b >= MAX_BATCH) ? MAX_BATCH : b + 1;
1003              if (!exhausted &&              if (!exhausted &&
1004                  ((p = current) != null || (p = q.firstDataNode()) != null) &&                  ((p = current) != null || (p = firstDataNode()) != null) &&
1005                  p.next != null) {                  p.next != null) {
1006                  Object[] a = new Object[n];                  Object[] a = new Object[n];
1007                  int i = 0;                  int i = 0;
# Line 1014  Line 1010 
1010                      if (e != p && (a[i] = e) != null)                      if (e != p && (a[i] = e) != null)
1011                          ++i;                          ++i;
1012                      if (p == (p = p.next))                      if (p == (p = p.next))
1013                          p = q.firstDataNode();                          p = firstDataNode();
1014                  } while (p != null && i < n && p.isData);                  } while (p != null && i < n && p.isData);
1015                  if ((current = p) == null)                  if ((current = p) == null)
1016                      exhausted = true;                      exhausted = true;
# Line 1033  Line 1029 
1029          public void forEachRemaining(Consumer<? super E> action) {          public void forEachRemaining(Consumer<? super E> action) {
1030              Node p;              Node p;
1031              if (action == null) throw new NullPointerException();              if (action == null) throw new NullPointerException();
             final LinkedTransferQueue<E> q = this.queue;  
1032              if (!exhausted &&              if (!exhausted &&
1033                  ((p = current) != null || (p = q.firstDataNode()) != null)) {                  ((p = current) != null || (p = firstDataNode()) != null)) {
1034                  exhausted = true;                  exhausted = true;
1035                  do {                  do {
1036                      Object e = p.item;                      Object e = p.item;
1037                      if (e != null && e != p)                      if (e != null && e != p)
1038                          action.accept((E)e);                          action.accept((E)e);
1039                      if (p == (p = p.next))                      if (p == (p = p.next))
1040                          p = q.firstDataNode();                          p = firstDataNode();
1041                  } while (p != null && p.isData);                  } while (p != null && p.isData);
1042              }              }
1043          }          }
# Line 1051  Line 1046 
1046          public boolean tryAdvance(Consumer<? super E> action) {          public boolean tryAdvance(Consumer<? super E> action) {
1047              Node p;              Node p;
1048              if (action == null) throw new NullPointerException();              if (action == null) throw new NullPointerException();
             final LinkedTransferQueue<E> q = this.queue;  
1049              if (!exhausted &&              if (!exhausted &&
1050                  ((p = current) != null || (p = q.firstDataNode()) != null)) {                  ((p = current) != null || (p = firstDataNode()) != null)) {
1051                  Object e;                  Object e;
1052                  do {                  do {
1053                      if ((e = p.item) == p)                      if ((e = p.item) == p)
1054                          e = null;                          e = null;
1055                      if (p == (p = p.next))                      if (p == (p = p.next))
1056                          p = q.firstDataNode();                          p = firstDataNode();
1057                  } while (e == null && p != null && p.isData);                  } while (e == null && p != null && p.isData);
1058                  if ((current = p) == null)                  if ((current = p) == null)
1059                      exhausted = true;                      exhausted = true;
# Line 1096  Line 1090 
1090       * @since 1.8       * @since 1.8
1091       */       */
1092      public Spliterator<E> spliterator() {      public Spliterator<E> spliterator() {
1093          return new LTQSpliterator<E>(this);          return new LTQSpliterator<E>();
1094      }      }
1095    
1096      /* -------------- Removal methods -------------- */      /* -------------- Removal methods -------------- */

Legend:
Removed from v.1.93  
changed lines
  Added in v.1.94

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8